Вы не зашли.
Главная » PHP » Функция навигации по страницам
#141. tipsun Off (19)
Moderator
2012.01.18 23:11
Надо примеры выложить...
#142. Gemorroj Off (107)
Administrator
2012.01.19 12:12
обязательно!)
#143. tipsun Off (19)
Moderator
2012.01.19 14:02
Код:
span style="color: #0000BB"><?php/////Test///// $PM = new PageMan; define('COUNT', isset($_GET['count']) ? $_GET['count'] : 100); $pages = $PM->setCount(COUNT)->setPage($_GET['page'])->getPageRangeSimple(); define('NOW_PAGE', $PM->getPage()); define('LAST_PAGE', $PM->getPages()); ?> <html> <head> <title>Example</title> <style type="text/css"> a { text-decoration: none; } span.nowPage { background-color: #000; color: #fff; padding: 2px 3px 2px 3px; } span.pageRange { border: 1px dotted #000; padding: 1px 2px 1px 2px; } </style> </head> <body> <?php foreach ($pages as $page):?> <?php if (NOW_PAGE == $page):?> <span class="nowPage"><?php echo $page;?></span> <?php else:?> <span class="pageRange"><a href="?page=<?php echo $page;?>&amp;count=<?php echo COUNT;?>"><?php echo $page;?></a></span> <?php endif; endforeach;?> </body> </html>
Ну как-то так.
Код:
span style="color: #0000BB"><?php//$db = new PDO();define('ITEMS', 10);define('COUNT', (int)$db->query("SELECT COUNT(`news_id`) FROM `news` LIMIT 1;")->fetchColumn());if (COUNT) { $queryText = 'SELECT `news_id`, `name`, `date`, `comments` FROM `news` ORDER BY `news_id` DESC'; if (COUNT > ITEMS) { include_once 'pageMan.php'; $pg = new pageMan; $pg->setCount(COUNT)->setItems(ITEMS)->setPage($_REQUEST['page']); define('PAGES', $pg->getPages()); define('PAGE', $pg->getPage()); $points = $pg->getTable(); $queryText .= ' LIMIT '.$points['start'].', '.$points['stop']; } $queryText .= ';'; $query = $db->query($queryText); foreach ($query as $array) { echo '<div class="items">' . $array['date'] . '<br/><a href="read.php?id=' . $array['news_id'] . '">' . htmlspecialchars($array['name'], ENT_NOQUOTES) . '</a><br/>Comments: ' . $array['comments'] . '</div>'; } } else { echo '<div>Empty</div>'; }if (COUNT > ITEMS) { echo '<div class="pages"><a href="?page='.((int)PAGE-1).'">«</a> '.((int)PAGE).'/'.((int)PAGES).' <a href="?page='.((int)PAGE+1).'">»</a></div>'; }
Отредактировано tipsun (2012.01.19 15:03)
#144. Gemorroj Off (107)
Administrator
2012.01.19 19:07
в методе getTable нужно документировать выходные параметры.
и примеры упростить сильно.
Код:
span style="color: #0000BB"><?php$currentPage = 1;$allItems = 100;$itemsPerPage = 10;$pg = new pageMan;$pages = $pg->setCount($allItems)->setItems($itemsPerPage)->setPage($currentPage)->getPageRangeSimple();<?php foreach ($pages as $page): ?><?php if ($currentPage == $page): ?><span class="nowPage"><?php echo $page; ?></span><?php else: ?><span class="pageRange"><a href="?page=<?php echo $page; ?>&amp;count=<?php echo $allItems; ?>"><?php echo $page; ?></a></span><?php endif; endforeach; ?>
#145. tipsun Off (19)
Moderator
2012.01.23 18:06
PageMan.zip {Пароль: 745963}
Отредактировано tipsun (2012.01.23 18:06)
#146. Gemorroj Off (107)
Administrator
2012.01.23 20:08
ты сам проверял?) приватный коструктор нужен для синглтона только был
#147. tipsun Off (19)
Moderator
2012.01.23 21:09
Я не проверил. СПС, исправил.
Я в другом архиве видимо держал код. Я исправлял вроде эту ошибку.
PageMan.zip {Пароль: 78963}
Отредактировано tipsun (2012.01.23 21:09)
#148. Akdmeh Off (9)
Участник
2012.01.31 00:12
Мне кажется, что ты слишком много времени убиваешь на эту пагинацию, займись чем-то еще, потом возвратишься.
Основная проблема - нету нормального конструктора.
Завтра еще подробнее посмотрю.
Желание стать программистом из-за того, что вам нравляться компьютерные игры-это все равно, что желание стать гинекологом из-за того, что вам нравиться сексwink
#149. Gemorroj Off (107)
Administrator
2012.01.31 21:09
Akdmeh ну?)
#150. tipsun Off (19)
Moderator
2013.01.19 12:12
Код:
span style="color: #0000BB"><?php/** * Автор: TiPsun (tipsun91@gmail.com) * (c) 2013 * Блогодарность за помощь * в написании кода: ++ Gemorroj (http://wapinet.ru/) ++ Akdmeh (Akdmeh@gmail.com)**/class Pagination { protected // Данные $_pageCursor = 1, $_itemsCount = 0, $_itemsRange = 10, // Результат /*$_pagesCount, $_pageNumber, $_startPoint;*/ $_pagesCount = 1, $_pageNumber = 1, $_startPoint = 0; public function __construct() { } /** * Проверка числа на принадлежность к множеству натуральных. * @param integer $number * @return bool */ protected static function _isNatural($number) { return (is_numeric($number) and 0 < $number); } /** * Регистрация общего кол-ва записей. * @param integer $arg * @return PageMan */ public function setCount($arg) { if (self::_isNatural($arg)) { $this->_itemsCount = (int) $arg; $this->_pagesCount = null; } /*else { $this->_pagesCount = $this->_pageNumber = 1; $this->_startPoint = 0; }*/ return $this; } /** * Регистрация текущей страницы. * @param integer $arg * @return pageMan */ public function setCursor($arg) { if (self::_isNatural($arg)) { $this->_pageCursor = (int) $arg; $this->_pageNumber = null; } /*else { $this->_pageNumber = 1; $this->_startPoint = 0; }*/ return $this; } /** * Регистрация кол-ва записей на страницу. * @param integer $arg * @return pageMan */ public function setItems($arg) { if (self::_isNatural($arg)) { $this->_itemsRange = (int) $arg; $this->_pagesCount = $this->_startPoint = null; } else if($this->_itemsCount) { $this->_itemsRange = $this->_itemsCount; $this->_pagesCount = $this->_startPoint = null; } return $this; } /** * Расчет общего кол-ва страниц. * @return integer */ public function getPages() { if (null === $this->_pagesCount) { if ($this->_itemsCount) { $this->_pagesCount = (int) ceil($this->_itemsCount / $this->_itemsRange); } /*else { $this->_pagesCount = $this->_pageNumber = 1; $this->_startPoint = 0; }*/ } return $this->_pagesCount; } /** * Получение номера корректной текущей страницы. * @return integer */ public function getPage() { if (null === $this->_pageNumber) { $this->_pageNumber = min($this->_pageCursor, $this->getPages()); } return $this->_pageNumber; } /** * Расчет начальной точки отсчета показа записей в вашем цикле. * @return integer */ private function _calculateStartPoint() { if (null === $this->_startPoint) { $this->_startPoint = ($this->getPage() - 1) * $this->_itemsRange; } return $this->_startPoint; } /** * Расчет конечной точки отсчета показа записей в цикле для массива данных. * @return array */ public function getArrayPoints() { return array( $this->_calculateStartPoint(), min(($this->_startPoint + $this->_itemsRange), $this->_itemsCount) ); } /** * Расчет конечной точки отсчета показа записей в цикле для данных * в таблице (DB). * @return array */ public function getTablePoints() { return array( $this->_calculateStartPoint(), $this->_itemsRange ); } /** * Расчет конечной точки отсчета показа записей в цикле для данных * в таблице (DB). * @return string */ public function getTableLimit() { return 'LIMIT ' . $this->_calculateStartPoint() . ', ' . $this->_itemsRange; }}
Код:
span style="color: #0000BB"><?phpfunction paginationRange ($pagesCount, $pageNumber = 1, $pagesRange = 3){ // Проверка наличия необходимого кол-ва страниц для построениея ряда. if (1 >= $pagesCount) return array(1); // начальная + текущая + крайняя = 3 страницы * 2 стороны = лево + право :E if (0 >= $pagesRange || (3 + 2 * $pagesRange) >= $pagesCount) return range(1, $pagesCount); // Определяется отрезок построения if (0 >= $pageNumber) $pageNumber = 1; $lowerPoint = $pageNumber - $pagesRange; $upperPoint = $pageNumber + $pagesRange; // Перекидывание значений при: - - [1] 2 3 // Недостающее кол-во переходит на правую сторону: [1] 2 3 - - // И наоборот при: 8 9 [10=max] - - $lowerPoint = $pagesCount < $upperPoint ? $pagesCount - $upperPoint + $lowerPoint : $lowerPoint; $upperPoint = 1 > $lowerPoint ? $upperPoint - $lowerPoint + 1 : $upperPoint; // Избегаем ситуации: [1] 1 2 // Т.к. при построении будем добавлять начало и конец навигации. $lowerPoint -= $pagesCount <= $upperPoint ? 1 : 0; $upperPoint += 1 >= $lowerPoint ? 1 : 0; // Построение ряда. $range = array(); if (1 >= $lowerPoint) { $lowerPoint = 1; } else { $range[] = 1; } if ($pagesCount < $upperPoint) { $upperPoint = $pagesCount; } for ($i = $lowerPoint; $i <= $upperPoint; $i++) { $range[] = $i; } if ($pagesCount > $upperPoint) { $range[] = $pagesCount; } return $range;}
Отредактировано tipsun (2013.02.01 22:10)
Страниц: 113 14 15 16 Все
Главная
WEB
PunBB Mod v0.6.2
0.014 s