Есть класс, не получается взять внешнюю переменную! как это сделать можно?
Класс подключаю через 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();В результате я вижу, что $rewrite всегда равен false, а потому и всегда работает else.
...
function createMenu($rewrite = false, $level = ''){}
Спустя 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'] данное значение влияет на условие
Во-вторых, это передача значения для $rewrite в методе createMenu(). Оно влияет на два условия
Если ты хочешь чтобы что-то правильно работало, то устанавливай/передавай правильные значения данных параметров.
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;
$menu_name = !empty($_GET['menu_section']) ? $_GET['menu_section'] : null ;
$_GLOBALS['menu_name'] = $menu_name;
Спустя 1 минута, 6 секунд (11.02.2011 - 10:11) twin написал(а):
Вы чего тут костыли лепите в мой класс?
Расскажи точно, чего ты хочешь от него добиться?

Расскажи точно, чего ты хочешь от него добиться?
Спустя 4 минуты, 3 секунды (11.02.2011 - 10:15) linker написал(а):
twin
Да вот приходится латать недочеты
.
nugle
Ну клева, а что тогда не работает? $rewrite передаешь в метод?
Да вот приходится латать недочеты

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
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{
...
если выводить до класса то выводится как положено всё,т.е. так
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 написал(а):
еееееесть, спасибо! просто вчера я только с ними познакомился!