[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Класс и внешние переменные
nugle
Всем доброго дня!!!
Есть класс, не получается взять внешнюю переменную! как это сделать можно?
Класс подключаю через require!



Спустя 14 минут, 46 секунд (10.02.2011 - 16:15) linker написал(а):
Через глобалс.

Спустя 18 минут, 53 секунды (10.02.2011 - 16:34) nugle написал(а):
Если можно, поподробнее!через гет просто тоже не прокатывает!
или через
$_GLOBALS['имя переменной']
?

Спустя 7 минут, 10 секунд (10.02.2011 - 16:41) linker написал(а):
Запихиваешь значение в глобалс, а в классе из него берешь. Отмечу, что под классом я понимаю собственные поля класса (статические). Для объектов, можно отдавать как параметр методу.

Спустя 10 минут, 6 секунд (10.02.2011 - 16:51) nugle написал(а):
сделал так
$_GLOBALS['menu_name'] = $menu_name;

вызвал так
if($_GLOBALS['menu_name'])
$this->StartLink = $rewrite ? $this->LevelPage .'/' : '?menu_section='.$_GLOBALS['menu_name'].'&'. $this->LevelPage .'=';

но не работает

Спустя 2 минуты, 39 секунд (10.02.2011 - 16:54) linker написал(а):
Что не работает?

Спустя 2 минуты, 58 секунд (10.02.2011 - 16:57) nugle написал(а):
начинает работать else:
$this->StartLink = $rewrite ? $this->LevelPage .'/' : '?'. $this->LevelPage .'=';

Спустя 21 минута, 38 секунд (10.02.2011 - 17:18) linker написал(а):
А $rewrite-то откуда берется?

Спустя 30 секунд (10.02.2011 - 17:19) nugle написал(а):
ну это всё в классе задаётся!

Спустя 1 минута, 27 секунд (10.02.2011 - 17:20) linker написал(а):
Я не вижу и читать чужой код на расстоянии не умею.

Спустя 10 минут, 50 секунд (10.02.2011 - 17:31) nugle написал(а):
как так?\<?php

    include './options/db.php';


/**
* IRB_Paginator - Class of division of the information on a paginal mode
* NOTE: Requires PHP version 5 or later
*
@package IRB_Paginator
*
@author IT studio IRBIS-team
*
@copyright © 2010 IRBIS-team
*
@version 0.1
*
@license http://www.opensource.org/licenses/rpl1.5.txt
*/


class IRB_Paginator
{
/////////////////////////////////////////////////
// PUBLIC
/////////////////////////////////////////////////


/**
* Establishes page number.
*
@var int
*/

public $NumPage = 1;

/**
* Establishes quantity of numbers.
*
@var int
*/

public $NumRows = 1;

/**
* Establishes quantity of columns.
*
@var int
*/

public $NumColumns = 1;

/**
* Includes mod_rewrite.
*
@var string
*/

public $LevelPage = 'page';

/////////////////////////////////////////////////
// PROPERTIES AND PRIVATE
////////////////////////////////////////////////

private $TableTotal = 0;
private $TableCount = 0;
private $StartLink = '';

/**
* Constructor
*
@param int $page
*
@param int $rows
*
@param int $columns
*/

public function __construct($page = 1, $rows = 1, $columns = 1)
{
if($rows > 1)
$this->NumPage = (int)$page;

if($rows > 1)
$this->NumRows = $rows;

if($columns > 1)
$this->NumColumns = $columns;


}

/**
* Operates a cache of difficult inquiries
*
@param string $query
*
@access public
*
@return void
*/

public function countQuery($query)
{

$query = str_replace("\n", " ", $query);
preg_match("#FROM(.+)#i", $query, $table);

$result = mysql_query("SELECT COUNT(*) AS `cnt`
FROM "
. $table[1]);

$this->TableCount = mysql_result($result, 0);

$res = mysql_query($query . $this->createLimit());

return $res;
}

/**
* Calculates a position and prepares a limit for inquiry
*
@param int $page
*
@access public
*
@return string
*/

public function createLimit()
{

$this->TableTotal = intval(($this->TableCount - $this->NumColumns) / $this->NumRows * $this->NumColumns) - 1;

if($this->NumPage < 1)
$this->NumPage = 1;

if(empty($this->TableTotal) || $this->TableTotal < $this->TableCount)
$this->TableTotal = $this->TableCount;

if($this->NumPage > $this->TableTotal)
$this->NumPage = $this->TableTotal;

$start = $this->NumPage * $this->NumRows * $this->NumColumns - $this->NumRows * $this->NumColumns;

if($start < 0)
$start = 0;

return ' LIMIT '. $start .', '. $this->NumRows * $this->NumColumns;

}

/**
* Generates the navigation menu
*
@access private
*
@param string $link
*
@return string
*/

function createMenu($rewrite = false, $level = '')
{
if(!empty($level))
$this->LevelPage = $level;

$this->SetRewrite = $rewrite;
if($_GLOBALS['menu_name'])
$this->StartLink = $rewrite ? $this->LevelPage .'/' : '?menu_section='.$_GLOBALS['menu_name'].'&'. $this->LevelPage .'=';
else
$this->StartLink = $rewrite ? $this->LevelPage .'/' : '?'. $this->LevelPage .'=';
$count = ceil($this->TableTotal / $this->NumRows / $this->NumColumns);
$menu = "\n<!-- IRB_Paginator begin -->\n";

if($count < 13)
{
$i = 1;
$cnt = $count;
}
else
{
if($this->NumPage > 10)
$menu .= $this->createLink(($this->NumPage - 10), '-10<', '_top');

if($count > 12)
{
if($this->NumPage == 7)
$menu .= $this->createLink(1, 1);
elseif($this->NumPage == 8)
$menu .= $this->createLink(1, 1)
.
$this->createLink(2, 2);
elseif($this->NumPage > 7)
$menu .= $this->createLink(1, 1)
.
$this->createLink(2, 2)
.
$this->createLink(0, '...', '_top', false);
}


if($this->NumPage - 5 < 1)
{
$i = 1;
$cnt = 10;
}
elseif($this->NumPage >= $count)
{
$i = $count - 10;
$cnt = $count;
}
else
{
$i = $this->NumPage - 5;
$cnt = $count;
}


if($this->NumPage < 6)
$cnt = $i + 9;
elseif($count - $i > 10)
$cnt = $i + 10;
elseif($count > $count)
$cnt = $count;
}


while($i <= $cnt)
{
if($i == $this->NumPage)
$menu .= $this->createLink($i, $i, '_active', false);
else
$menu .= $this->createLink($i, $i);

$i++;
}

if($count > 12)
{
if($this->NumPage < $count - 6)
$menu .= $this->createLink(0, '...', '_top', false)
.
$this->createLink(($count - 1), ($count - 1));

if($this->NumPage < $count - 5)
$menu .= $this->createLink($count, $count);
}

$end = ($this->NumPage + 10 > $count) ? $count : $this->NumPage + 10;

if($this->NumPage < $count - 5 && $count - $this->NumPage >= 10)
$menu .= $this->createLink($end, '>+10', '_top');

return $menu ."\n\n<!-- IRB_Paginator end -->\n";
}

/**
* Makes a hyperlink
*
@param int $page
*
@param string $link, $class
*
@param bolean $active
*
@access private
*
@return string
*/

private function createLink($page = 1, $link = '', $class = '', $active = true)
{
if(strpos($_SERVER['REQUEST_URI'], $this->LevelPage) === false)
$string = $this->StartLink . $page;
else
{
if($this->SetRewrite)
$string = preg_replace('#'. $this->LevelPage .'/\d+#', $this->LevelPage .'/'. $page, $_SERVER['REQUEST_URI']);
else
$string = '?'. preg_replace('#'. $this->LevelPage .'=\d+#', $this->LevelPage .'='. $page, $_SERVER['QUERY_STRING']);
}

if(empty($link))
$link = $page;

if($active)
return "<span class=\"IRB_paginator". $class ."\">\n"
. "<a href=\"". $string ."\" />". $link ."</a>\n</span>\n";
else
return
"<span class=\"IRB_paginator". $class ."\"> ". $link ." </span>\n";
}
}


///////////////////////////////////////////////////////////////////////////////////


// Количество строк на странице
$num = 10;
// Принимаем номер требуемой страницы
$page = !empty($_GET['page']) ? (int)$_GET['page'] : 1;

// Подключаем класс
// include './irb_paginator.php';
// Инициализируем объект

$paginator = new IRB_Paginator($page, $num);
// Запрос
if(isset($menu_name))
{ $res = $paginator -> countQuery("SELECT * FROM `articles` where menu_section = '".mysql_real_escape_string($menu_name)."' order by articul");
}
else
{
$res = $paginator -> countQuery("SELECT * FROM `articles` order by articul");
}
// Формируем меню 'sel'
$menu = $paginator -> createMenu();
?>
<style type="text/css">
.
IRB_paginator {
padding: 2px;
font-weight:bold;
}

.IRB_paginator_active {
padding: 2px;
color:#FF0000;
font-weight:bold;
}

.IRB_paginator_top {
padding: 2px;
font-weight:bold;
color:#000;
}


.IRB_paginator_block{
font-family:Verdana, Arial, Helvetica, sans-serif;
color: #000099;
}

.IRB_paginator_block a:link {
text-decoration:none;
color: #000;
}

.IRB_paginator_block a:visited {
text-decoration:none;
color: #000;
}

.IRB_paginator_block a:hover {
text-decoration:none;
color: #000;
}

.IRB_paginator_block a:active {
text-decoration:none;
color: #000;
}

.IRB_paginator_top a:link {
color:#000;
}

.IRB_paginator_top a:visited {
text-decoration:none;
color: #000;
}

.IRB_paginator_top a:hover {
text-decoration:none;
color: #000;
}

.IRB_paginator_top a:active {
text-decoration:none;
color: #000;
}
</style>
<
div class="IRB_paginator_block">

<?php echo $menu; ?>

</div>

Спустя 7 минут, 49 секунд (10.02.2011 - 17:39) linker написал(а):
$menu = $paginator -> createMenu();
...

function createMenu($rewrite = false, $level = ''){}
В результате я вижу, что $rewrite всегда равен false, а потому и всегда работает else.

Спустя 11 минут, 44 секунды (10.02.2011 - 17:51) nugle написал(а):
а с true ничего не работает

Спустя 4 минуты, 42 секунды (10.02.2011 - 17:55) linker написал(а):
У тебя есть два параметра $_GLOBALS['menu_name'] и $rewrite. Их значения логически обуславливают выполнение того или иного участка кода. Если что-то логически работает не так, как ты ожидаешь, то смотри эти параметры.

Спустя 2 минуты, 51 секунда (10.02.2011 - 17:58) nugle написал(а):
А как сделать чтобы они оба работали?чё то я не совсем въезжаю!

Спустя 4 минуты, 26 секунд (10.02.2011 - 18:03) linker написал(а):
Во-первых, это установка нужного значения в $_GLOBALS['menu_name'] данное значение влияет на условие
if($_GLOBALS['menu_name']) ... else ...
.
Во-вторых, это передача значения для $rewrite в методе createMenu(). Оно влияет на два условия
$this->StartLink = $rewrite ? $this->LevelPage .'/' : '?menu_section='.$_GLOBALS['menu_name'].'&'. $this->LevelPage .'=';
либо
$this->StartLink = $rewrite ? $this->LevelPage .'/' : '?'. $this->LevelPage .'=';

Если ты хочешь чтобы что-то правильно работало, то устанавливай/передавай правильные значения данных параметров.

Спустя 1 минута, 21 секунда (10.02.2011 - 18:04) nugle написал(а):
то есть if else с глобалс не получется?

Спустя 2 минуты, 32 секунды (10.02.2011 - 18:07) linker написал(а):
Ну если ты не устанавливаешь значение для $_GLOBALS['menu_name'], то конечно. Попробуй сделать так
if (isset($_GLOBALS['menu_name'])) ... else ...

Спустя 4 минуты, 23 секунды (10.02.2011 - 18:11) nugle написал(а):
я устанавливаю!

Спустя 4 минуты, 57 секунд (10.02.2011 - 18:16) nugle написал(а):
как быть если устанавливаю?

Спустя 15 часов, 11 минут, 48 секунд (11.02.2011 - 09:28) linker написал(а):
Как ты устанавливаешь? Я по ходу твоего кода этого не заметил.

Спустя 41 минута, 55 секунд (11.02.2011 - 10:10) nugle написал(а):
<a class='a_menu_section' href='articles.php?menu_section=".$row2['name']."'>".$row2['name']."</a>

$menu_name = !empty($_GET['menu_section']) ? $_GET['menu_section'] : null ;

$_GLOBALS['menu_name'] = $menu_name;

Спустя 1 минута, 6 секунд (11.02.2011 - 10:11) twin написал(а):
Вы чего тут костыли лепите в мой класс? biggrin.gif
Расскажи точно, чего ты хочешь от него добиться?

Спустя 4 минуты, 3 секунды (11.02.2011 - 10:15) linker написал(а):
twin
Да вот приходится латать недочеты smile.gif.

nugle
Ну клева, а что тогда не работает? $rewrite передаешь в метод?

Спустя 1 минута, 1 секунда (11.02.2011 - 10:16) nugle написал(а):
Ну смотрите, у меня есть страница, выводящая товары(к ней и подключается ваш класс), слева менюшка, которая сортирует эти товары, нажимаю я на категорию какую нибудь и выводиться по данной категории товары, внизу странички, я кликую по странице и он переходит по такой ссылке
http://fiesta.ru/articles.php?page=2
а надо, чтоб по
http://fiesta.ru/articles.php?menu_section...не%труда&page=2

Спустя 4 минуты, 17 секунд (11.02.2011 - 10:20) nugle написал(а):
или если проще заходите на мой сайт fiesta-2000.com/articles.php, внизу ссылки по страницам и они замечательно рабортают, теперь вверху нажмите журналы, откроется менюшка, нажмите журналы по охране труда, посмотрите как выглядит урл, перейдите на вторую страницу и посмотрите теперь урл!

Спустя 4 минуты, 50 секунд (11.02.2011 - 10:25) linker написал(а):
Перед
if($_GLOBALS['menu_name']) ... else ...
напиши
echo $_GLOBALS['menu_name'];
и посмотри что у тебя там.

Спустя 10 минут, 6 секунд (11.02.2011 - 10:35) nugle написал(а):
ничего не выводит!
если выводить до класса то выводится как положено всё,т.е. так
echo $_GLOBALS['menu_name'];
class IRB_Paginator{
...

Спустя 1 час, 10 минут, 52 секунды (11.02.2011 - 11:46) linker написал(а):
Вот что значит не пользоваться глобалсами, нужно $GLOBALS, а не $_GLOBALS.

Спустя 5 минут, 57 секунд (11.02.2011 - 11:52) nugle написал(а):
еееееесть, спасибо! просто вчера я только с ними познакомился!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.