Вы не зашли.
Главная » PHP » Функция навигации по страницам
#21. Gemorroj Off (107)
Administrator
2011.11.12 16:04
мне кажется 2, просто из-за того, что при расширении класса, не нужно будет следить за массивом доступных методов
#22. tipsun Off (19)
Moderator
2011.11.12 22:10
СПС. smile Ну для этого и переписал. smile
#23. tipsun Off (19)
Moderator
2011.11.23 21:09
Ошибка. По невнимательности. sad
Код:
span style="color: #0000BB"><?phpprivate function countPages() { if (null === $this->pages) { //$this->pages = $this->count / $this->items; $this->pages = ceil($this->count / $this->items); } return $this->pages; }?>
Добавлено спустя   5 минут  26 секунд:
Хочу/пытаюсь реализовать: 1 .. 5 6 [7] 8 6 .. 100 такую фишку.
Отредактировано tipsun (2011.11.23 22:10)
#24. tipsun Off (19)
Moderator
2011.11.23 22:10
И надо было указывать в условии is_numeric(), чтоб с типами не возиться. А при занесении в свойство = (int).
Отредактировано tipsun (2011.11.23 22:10)
#25. tipsun Off (19)
Moderator
2011.12.11 13:01
Код:
span style="color: #0000BB"><?php/** * pageMan * * @package * @author TiPsun * @copyright TiPsun * @version 2011 * @access public */class pageMan { private $count = null, $page = null, $_page = 1, $pages = null, $start = null; private static $items = 10; /** * pageMan::__construct() * * @param mixed $method - метод расчета. * @param mixed $count - количество записей. * @param mixed $page - указанная/текущая страница. * @param mixed $items - кол-во записей на страницу. * * @return void */ public function __construct($method, $count, $page, $items=null) { if (method_exists(__CLASS__, 'method_' . $method)) { $this->method = 'method_' . $method; } else { trigger_error('Nonexistent method', E_USER_ERROR); } if (is_numeric($count) and 0 < $count) { $this->count = (int)$count; } else { trigger_error('Value must be integer', E_USER_ERROR); } if (is_numeric($page) and 0 < $page) { $this->_page = (int)$page; } if (is_numeric($items)) { if (0 < $items) $this->items = (int)$items; else $this->items = $this->count; } else { $this->items = self::$items; } } /** * pageMan::countPages() * * Расчет общего кол-ва страниц. * * @return integer */ private function countPages() { if (null === $this->pages) { $this->pages = ceil($this->count / $this->items); } return $this->pages; } /** * pageMan::getPages() * * Получение общего числа страниц. * * @return integer */ public function getPages() { return self::countPages(); } /** * pageMan::setPage() * * Корректировка указанной/текущей страницы. * * @return integer */ private function setPage() { if (null === $this->page) { $this->page = min($this->_page, self::countPages()); } return $this->page; } /** * pageMan::getPage() * * Получение корректной текущей страницы. * * @return integer */ public function getPage() { return self::setPage(); } /** * pageMan::setStart() * * Расчет начальной точки отсчета показа записей в вашем цикле. * * @return integer */ private function setStart() { if (null === $this->start) { $this->start = (self::setPage() - 1) * $this->items; } return $this->start; } /** * pageMan::getStart() * * Получение начальной точки отсчета показа записей в цикле. * * @return integer */ public function getStart() { return self::setStart(); } /** * pageMan::method_array() * * Расчет конечной точки отсчета показа записей в цикле для массива данных. * * @return integer */ private function method_array() { return min((self::setStart() + $this->items), $this->count); } /** * pageMan::method_table() * * Расчет конечной точки отсчета показа записей в цикле для данных в таблице (DB). * * @return integer */ private function method_table() { return $this->items; } /** * pageMan::getStop() * * Получение конечной точки отсчета показа записей в цикле. * * @return integer */ public function getStop() { return call_user_method($this->method, $this); } /** * pageMan::prevPage() * * Получение номера предыдущей страницы. * * @return integer */ public function prevPage() { if (null === $this->page) { self::setPage(); } return 1 < $this->page ? $this->page - 1 : $this->page; } /** * pageMan::nextPage() * * Получение номера следующей страницы. * * @return integer */ public function nextPage() { if (null === $this->pages) { self::countPages(); } if (null === $this->page) { self::setPage(); } return $this->pages > $this->page ? $this->page + 1 : $this->page; } }?>
tipsun написал:
Хочу/пытаюсь реализовать: 1 .. 5 6 [7] 8 6 .. 100 такую фишку.
Такой вид:
1 .. 5 [6] 7 .. 15
Можно сделать вручную, условиями.

А такой:
1 .. 3 4 5 [6] 7 8 9 .. 15
Наверно лучше циклом или вложенной функцией.
Отредактировано tipsun (2011.12.11 13:01)
#26. Gemorroj Off (107)
Administrator
2011.12.11 13:01
без phpDoc не нужно.
#27. tipsun Off (19)
Moderator
2011.12.11 13:01
Еще надо это все: 1 .. 3 4 5 [6] 7 8 9 .. 15; в массиве возвращать, чтоб потом, например в шаблоне, все это удобно можно было вытащить и сделать ссылки.
#28. Gemorroj Off (107)
Administrator
2011.12.11 14:02
у тебя не описано какие методы статические, а какие нет. будет кидать strict ошибки.
#29. tipsun Off (19)
Moderator
2011.12.11 14:02
Или сделать функцию такую, чтоб пользователь в шаблоне через цикл сразу задавал свои страницы, а функция их обрабатывала.
Как-то так наверно.

Код:
span style="color: #0000BB"><?php/*pageCheck()@param mixed var@return integer*/function pageCheck($var) { if ($var == 'begin') { return 1; } if ($var == 'end') { return /* последняя страница */; } if ($begin < (int)$var and $end > (int)$var) { return $var; } }?>
Добавлено спустя   1 минуту  39 секунд:
Gemorroj написал:
у тебя не описано какие методы статические, а какие нет. будет кидать strict ошибки.
Это мне просто описать надо (phpDoc) или чего в коде не так?
Отредактировано tipsun (2011.12.11 14:02)
#30. Gemorroj Off (107)
Administrator
2011.12.11 14:02
private function countPages() {
private static function countPages() {
и еще, если метод или свойство приватное или защищенное, название должно начинаться с подчеркивания.
Страниц: 1 2 3 4 516 Все
Главная
WEB
PunBB Mod v0.6.2
0.023 s