Как стать автором
Обновить

Как правильно использовать Zend_Paginator

Время на прочтение2 мин
Количество просмотров5.2K
Мой друг написал в песочнице статью, которая оказалась для меня (и не только) полезной, но через 7 дней была удалена. С его разрешения привожу её ниже. Если кому она тоже будет полезной, то он просит выслать ему инвайт на alxsad@gmail.com .

Привет всем любителям Zend Framework. Хочу расказать как правильно использовать компонент Zend_Paginator. Я очень часто видел, как плохо с ним работают некоторые программисты. Давайте посмотрим на код, представленный ниже:

$pages = new Model_Pages();
$paginator = Zend_Paginator::factory($pages->getRows());
$paginator->setItemCountPerPage(1);
$paginator->setPageRange(1);
$paginator->setCurrentPageNumber($this->getRequest()->getParam('page', 1));
Zend_Paginator::setDefaultScrollingStyle('Sliding');
$this->view->pages = $paginator;
$paginator->setView($this->view);
Zend_View_Helper_PaginationControl::setDefaultViewPartial('paginator.phtml');
$this->view->paginator = $paginator;


* This source code was highlighted with Source Code Highlighter.


Данный код я встречал на очень многих блогах, и даже, если не ошибаюсь, в самом мануале по Zend Framework. Давайте теперь посмотрим на запрос, который у нас получиться в результате:

image

Видите? Проблема заключается в том, что люди сразу забирают ВСЕ записи из базы данных, а потом уже из них выбирают нужные. Это огромная ошибка. Поэтому читаем как это делается
правильно.

Мы добавляем в модель таблицы данный метод:

public function getPaginatorRows ($pageNumber = 1)
{
  $paginator = new Zend_Paginator(new Zend_Paginator_Adapter_DbSelect($this->select()));
  $paginator->setCurrentPageNumber($pageNumber);
  $paginator->setItemCountPerPage(1);
  $paginator->setPageRange(1);
  return $paginator;
}

* This source code was highlighted with Source Code Highlighter.


а потом в контроллере вызываем его:

$pages = new Model_Pages();
$this->view->pages = $pages->getPaginatorRows((int) $this->getRequest()->getParam('page', 1));


* This source code was highlighted with Source Code Highlighter.


Вуаля!

image
Теги:
Хабы:
Всего голосов 17: ↑12 и ↓5+7
Комментарии14

Публикации