#121 2012.01.07 21:42

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Функция навигации по страницам

наверное, метод getRange лучше переименовать, т.к. он не является геттером переменной range (сеттер setRange).

Неактивен

#122 2012.01.07 22:07

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: Функция навигации по страницам

Не проблема. Сейчас.

Код:

1
span style="color: #0000BB"><?phpclass PageMan{ private $_count = 0, $_tmpPage = 1, $_items = 10, $_range = 2, $_page, $_pages, $_start; private function __construct() {} /** * Проверка числа на принадлежность к множеству натуральных. * @param integer $var * @return bool */ private function _isNatural($var) { return (is_numeric($var) and 0 < $var); } /** * Регистрация общего кол-ва записей. * @param integer $count * @return pageMan */ public function setCount($count) { if ($this->_isNatural($count)) { $this->_count = (int)$count; } return $this; } /** * Регистрация текущей страницы. * @param integer $page * @return pageMan */ public function setPage($page) { if ($this->_isNatural($page)) { $this->_tmpPage = (int)$page; } return $this; } /** * Регистрация кол-ва записей на страницу. * @param integer $items * @return pageMan */ public function setItems($items) { if ($this->_isNatural($items)) { $this->_items = (int)$items; } else if($this->_count) { $this->_items = $this->_count; } return $this; } /** * Регистрация масштаба ранжировки. * @param integer $range * @return pageMan */ public function setRange($range) { if ($this->_isNatural($range)) { $this->_range = (int)$range; } return $this; } /** * Расчет общего кол-ва страниц. * @return integer */ public function getPages() { if (null === $this->_pages) { $this->_pages = (int)ceil($this->_count / $this->_items); if (0 == $this->_pages) $this->_pages += 1; } return $this->_pages; } /** * Получение номера корректной текущей страницы. * @return integer */ public function getPage() { if (null === $this->_page) { $this->_page = min($this->_tmpPage, $this->getPages()); } return $this->_page; } /** * Расчет начальной точки отсчета показа записей в вашем цикле. * @return integer */ private function _setStart() { if (null === $this->_start) { $this->_start = ($this->getPage() - 1) * $this->_items; } return $this->_start; } /** * Расчет конечной точки отсчета показа записей в цикле для массива данных. * @return array */ public function getArray() { return array( 'start' => $this->_setStart(), 'stop' => min(($this->_start + $this->_items), $this->_count)); } /** * Расчет конечной точки отсчета показа записей в цикле для данных * в таблице (DB). * @return array */ public function getTable() { return array( 'start' => $this->_setStart(), 'stop' => $this->_items); } /** * Получение ближайшего отрезка номеров страниц для создания навигации * вида: (1 p-2 p-1 [p] p+1 p+2 N). * @return array */ public function getPageRange() { if (1 == $this->getPages()) return array(1); $prev = $this->getPage() - $this->_range; $next = $this->_page + $this->_range; $start = $this->_pages < $next ? $this->_pages - $next + $prev : $prev; $stop = 1 > $prev ? $next - $prev + 1 : $next; $start -= $this->_pages <= $stop ? 1 : 0; $stop += 1 >= $start ? 1 : 0; $start = 1 < $start ? $start : 1; $stop = $this->_pages > $stop ? $stop : $this->_pages; $array = range($start, $stop); if (1 < $start) array_unshift($array, 1); if ($this->_pages > $stop) $array[] = $this->_pages; return $array; }}

Отредактировано tipsun (2012.01.07 22:09)

Неактивен

#123 2012.01.07 22:27

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: Функция навигации по страницам

Happy End? smile
Или еще чего осталось?

Отредактировано tipsun (2012.01.07 22:31)

Неактивен

#124 2012.01.07 22:43

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Функция навигации по страницам

ну по архитектуре, вроде норм)
то, что получается на выходе мне оценивать сложно. нужно, наверное, простые экзамплы с примерами реально работающей пагинации.

Неактивен

#125 2012.01.07 22:50

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: Функция навигации по страницам

Ура! smile

Неактивен

#126 2012.01.07 23:17

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: Функция навигации по страницам

Код:

1
Fatal error: Call to private PageMan::__construct() from invalid context in L:\home\tt.php\www\PageMan.php on line 187

Надо конструкт публичным сделать.

Отредактировано tipsun (2012.01.08 02:07)

Неактивен

#127 2012.01.08 01:32

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: Функция навигации по страницам

Код:

1
span style="color: #0000BB"><?phppublic function getPageRange(){ if (1 == $this->getPages()) return array(1); $prev = $this->getPage() - $this->_range; $next = $this->_page + $this->_range; //+сделаю отдельный метод может $start = $this->_pages < $next ? $this->_pages - $next + $prev : $prev; $stop = 1 > $prev ? $next - $prev + 1 : $next; $start -= $this->_pages <= $stop ? 1 : 0; $stop += 1 >= $start ? 1 : 0; //-сделаю отдельный метод может if(1 >= $start) $start = 1; else $array[] = 1; if($stop > $this->_pages) $stop = $this->_pages; for ($i=$start; $i<=$stop; $i++) { $array[] = $i; } if ($stop < $this->_pages) $array[] = $this->_pages; return $array;}

Отредактировано tipsun (2012.01.08 02:12)

Неактивен

#128 2012.01.08 04:02

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Функция навигации по страницам

tipsun написал:

Надо конструкт публичным сделать.

так да. закрывали его для синглтона же)

Неактивен

#129 2012.01.08 08:34

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: Функция навигации по страницам

Код:

1
span style="color: #0000BB"><?php/** * Как бы будет сразу 2 метода в 1. * При вызове getPageRange() будет расчитываться простая ранжировка. * При вызове getPageRange(1)/getPageRange(true) будет расчитываться сложная ранжировка. */public function getPageRange($complex=null){ if (1 == $this->getPages()) return array(1); $prev = $this->getPage() - $this->_range; $next = $this->_page + $this->_range; if ($complex) { $start = $this->_pages < $next ? $this->_pages - $next + $prev : $prev; $stop = 1 > $prev ? $next - $prev + 1 : $next; if ($this->_pages <= $stop) $start -= 1; if (1 >= $start) $stop += 1; } else { $start = $prev; $stop = $next; } if(1 >= $start) $start = 1; else $array[] = 1; if($stop > $this->_pages) $stop = $this->_pages; for ($i=$start; $i<=$stop; $i++) { $array[] = $i; } if ($stop < $this->_pages) $array[] = $this->_pages; return $array;}

Отредактировано tipsun (2012.01.08 08:44)

Неактивен

#130 2012.01.08 09:44

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Функция навигации по страницам

tipsun написал:

Как бы будет сразу 2 метода в 1.

никогда так не делай

Неактивен

Дополнительно

forum.wapinet.ru

PunBB Mod v0.6.2
0.014 s