#51 2011.12.12 23:16

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

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

Набросок.
Бле там за данными не уследишь.

Код:

1
span style="color: #0000BB"><?phpclass pageMan { private $_count = null, $_page = null, $_tmpPage = 1, $_pages = null, $_start = null; private static $_items = 10; 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; } public function setPage($page) { if (is_numeric($page) and 0 < $page) { $this->_tmpPage = (int)$page; } return $this; } public function setItems($items) { if (is_numeric($items)) { if (0 < $items) $this->_items = (int)$items; //else $this->_items = $this->_count; } else { $this->_items = self::$_items; } return $this; } /** * pageMan::getPages() * Расчет общего кол-ва страниц. * @return integer */ 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::_methodArray() * Расчет конечной точки отсчета показа записей в цикле для массива данных. * @return integer */ public function getArray() { if (null === $this->_count) { trigger_error('Not enough data', E_USER_ERROR); } return array('start'=>$this->_setStart(), 'stop'=>min(($this->_setStart() + $this->_items), $this->_count)); } /** * pageMan::_methodTable() * Расчет конечной точки отсчета показа записей в цикле для данных в таблице (DB). * @return integer */ public function getTable() { return array('start'=>$this->_setStart(), 'stop'=>$this->_items); } }?>

Отредактировано tipsun (2011.12.12 23:17)

Неактивен

#52 2011.12.12 23:31

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

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

Хотя в принципе там только за count следить надо smile

Неактивен

#53 2011.12.13 00:29

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

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

почему у тебя _items объявлена статическим свойством, а работаешь ты с ним как с динамическим?

Неактивен

#54 2011.12.13 12:21

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

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

Оу! Да действительно.
Надо константу объявить.

Код:

1
span style="color: #0000BB"><?php const ITEMS = 10; private $_count = null, $_page = null, $_tmpPage = 1, $_items = null, $_pages = null, $_start = null; public function setItems($items) { if (is_numeric($items)) { if (0 < $items) $this->_items = (int)$items; //else $this->_items = $this->_count; } else { $this->_items = self::ITEMS; } return $this; }?>

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

Неактивен

#55 2011.12.13 12:26

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

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

а переопределять ты ее тогда как собираешься?

Неактивен

#56 2011.12.13 12:28

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

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

Код:

1
span style="color: #0000BB"><?phpconst ITEMS = 10; //это как дефолтное значение, можно тупо без нее 10 написать и все, если пользователь не указал ниче.private $_items = null; //там есть =)?>

Добавлено спустя   3 минуты  2 секунды:
Еще если условию 0 < не удовлетворяет, то надо опять присвоить из константы

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

Неактивен

#57 2011.12.13 12:35

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

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

почему бы просто не работать с динамическим свойством?

Неактивен

#58 2011.12.13 15:09

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

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

Код:

1
span style="color: #0000BB"><?phpclass 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 integer */ 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 integer */ public function getArray() { if (null === $this->_count) { trigger_error('Not enough data', E_USER_ERROR); } return array( 'start' => $this->_setStart(), 'stop' => min(($this->_setStart() + $this->_items), $this->_count)); } /** * pageMan::getTable() * Расчет конечной точки отсчета показа записей в цикле для данных в таблице (DB). * @return integer */ public function getTable() { return array( 'start' => $this->_setStart(), 'stop' => $this->_items); } }?>

Отредактировано tipsun (2011.12.13 18:54)

Неактивен

#59 2011.12.13 22:53

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

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

* pageMan::getPages()
* Расчет общего кол-ва страниц.
* @return float, а не int...

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

Неактивен

#60 2011.12.13 23:05

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

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

Вот еще заметил. Зачем 2 раза к методу обращаться, если свойство с 1 запуска метода будет определено. smile

Код:

1
span style="color: #0000BB"><?php/*return array('start' => $this->_setStart(),'stop' => min(($this->_setStart() + $this->_items), $this->_count));*/return array('start' => $this->_setStart(),'stop' => min(($this->_start + $this->_items), $this->_count));?>

Отредактировано tipsun (2011.12.13 23:06)

Неактивен

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

forum.wapinet.ru

PunBB Mod v0.6.2
0.015 s