Вы не зашли.
Набросок.
Код:
span style="color: #0000BB"><?php /** * pageMan::getPageRange() * Получение ближайшего отрезка номеров страниц для создания навигации вида: (10 11 [12] 13 14). * @return array */ public function getPageRange() { $this->getPages(); $this->getPage(); $min = $this->_page - 4; //or user number. $min = 1 < $min ? $min : 1; $max = $this->_page + 4; //or user number. $max = $this->_pages > $max ? $max : $this->_pages; /* for ($page=$min; $page<=$max; $page++) { if ($this->_page == $page) { $range[] = '[' . $page . ']'; continue; } if (1 <= $page and $this->_pages >= $page) { $range[] = $page; } } */ return range($min, $max); }?> |
Отредактировано tipsun (2011.12.14 18:06)
что это такое? где phpDoc?
Поправил код.
В принципе можно и в шаблоне отметить текущую страницу.
Код:
span style="color: #0000BB"><?php class pageMan { private $_count = null, $_page = null, $_tmpPage = 1, $_items = 10, $_pages = null, $_start = null; /** * pageMan::setCount() * Регистрация общего количества записей. * @param mixed $count * @return object */ public function setCount($count) { if (is_numeric($count) and 0 < $count) { $this->_count = (int)$count; } else { trigger_error('Value must be integer', E_USER_ERROR); } return $this; } /** * pageMan::setPage() * Регистрация текущей страницы. * @param mixed $page * @return object */ public function setPage($page) { if (is_numeric($page) and 0 < $page) { $this->_tmpPage = (int)$page; } return $this; } /** * pageMan::setItems() * Регистрация количества записей на страницу. * @param mixed $items * @return object */ public function setItems($items) { if (is_numeric($items)) { if (0 < $items) { $this->_items = (int)$items; } else if ($this->_count) { $this->_items = $this->_count; } } return $this; } /** * pageMan::getPages() * Расчет общего кол-ва страниц. * @return float */ public function getPages() { if (null === $this->_count) { trigger_error('Not enough data', E_USER_ERROR); } if (null === $this->_pages) { $this->_pages = ceil($this->_count / $this->_items); } return $this->_pages; } /** * pageMan::_corrPage() * Коррекция текущей страницы. * @return integer */ private function _corrPage() { if (null === $this->_page) { $this->_page = min($this->_tmpPage, $this->getPages()); } return $this->_page; } /** * pageMan::getPage() * Получение номера корректной текущей страницы. * @return integer */ public function getPage() { return $this->_corrPage(); } /** * pageMan::_setStart() * Расчет начальной точки отсчета показа записей в вашем цикле. * @return integer */ private function _setStart() { if (null === $this->_start) { $this->_start = ($this->_corrPage() - 1) * $this->_items; } return $this->_start; } /** * pageMan::getArray() * Расчет конечной точки отсчета показа записей в цикле для массива данных. * @return array */ public function getArray() { if (null === $this->_count) { trigger_error('Not enough data', E_USER_ERROR); } return array( 'start' => $this->_setStart(), 'stop' => min(($this->_start + $this->_items), $this->_count)); } /** * pageMan::getTable() * Расчет конечной точки отсчета показа записей в цикле для данных в таблице (DB). * @return array */ public function getTable() { return array( 'start' => $this->_setStart(), 'stop' => $this->_items); } /** * pageMan::getPageRange() * Получение ближайшего отрезка номеров страниц для создания навигации вида: (10 11 [12] 13 14). * @return array */ public function getPageRange($range=null) { $range = (is_numeric($range) and 0 < $range) ? (int)$range : 4; $min = $this->getPage() - $range; $max = $this->_page + $range; $min = 1 < $min ? $min : 1; $max = $this->getPages() > $max ? $max : $this->_pages; return range($min, $max); } }?> |
Отредактировано tipsun (2011.12.15 19:07)
А может быть даже просто "схитрить"
Чем делать в цикле лишнее условие, лучше в стиле
a:active просто по-другому пометить и все
Вот мне и активная/текущая страница.
Отредактировано tipsun (2011.12.15 19:07)
Ну вроде цвет активной ссылки должен меняться ведь? Если я не ошибся, то должно сработать.
CSS
Код:
a { color: #000; } |
a:active { color: #888; } |
PHP
Код:
span style="color: #0000BB"><?php//run class, insert data...$links = $obj->getPageRange(3);foreach ($links as $page) { echo '<a href="?a=1&b=5&page=' . $page . '">' . $page . '</a> '; }?> |
Добавлено спустя 1 минуту 4 секунды: Сейчас проверю. ~_~
Добавлено спустя 8 минут 21 секунду: Эх, не то. Это при клике работает.
Код:
:active - при клике на ссылку |
:link - не посещенная ссылка |
:hover - при наведении |
:visited - посещенная |
Вроде чет было типа активная ссылка (на которой ты сейчас находишься) другим цветом отображается, или это я ступил?
Отредактировано tipsun (2011.12.15 21:09)
PHP file
Код:
span style="color: #0000BB"><?php$pg = new pageMan();$pg->setCount(1000)->setPage($_GET['p']);define('NOW_PAGE', $pg->getPage());define('LAST_PAGE', $pg->getPages());?> |
TPL file
Код:
span style="color: #0000BB"><?php foreach ($links = $pg->getPageRange(3) as $page):?><?php if (NOW_PAGE == $page):?><?php echo $page;?> <?php else:?><a href="?a=someValue&b=5&p=<?php echo $page;?>"><?php echo $page;?></a> <?php endif; endforeach;?><br/><a href="?a=someValue&p=1">Begin</a> | <a href="?a=someValue&p=<?php echo LAST_PAGE;?>">End</a> |
- - - -
А если записей слишком мало, то как быть?
В логике сделать так, чтоб подключался шаблон без навигации?
Отредактировано tipsun (2011.12.16 11:11)
<?=$page;?> - короткие теги нахуй.
- заменить на & #160; (без пробела)