Использование Разбиение наборов данных на страницы Для разбиения элементов данных на страницы Zend_Paginator должен иметь обобщенный доступ к этим данным. Поэтому доступ к данным осуществляется через адаптеры к источникам данных. В поставку Zend Framework входят несколько адаптеров: Адаптеры для <code>Zend_Paginator</code> Адаптер Описание Array Использует PHP-массив DbSelect Использует экземпляр Zend_Db_Select Iterator Использует экземпляр Iterator Null Не использовать Zend_Paginator для разбиения на страницы. Но и в этом случае вы можете воспользоваться возможностями постраничной навигации.
При создании экземпляра класса Zend_Paginator, следует передать адаптер его конструктору: Для удобства вы можете воспользоваться статическим методом factory() для адаптеров, входящих в поставку Zend Framework: В случае использования адаптера Null вы должны передавать его конструктору количество элементов вместо набора данных. Несмотря на то, что экземпляр технически можно использовать и в таком состоянии, вы должны будете указывать, какой номер страницы запросил пользователь, чтобы он мог просматривать данные: setCurrentPageNumber($pageNumber);]]> Наиболее простым способом отслеживания номера страницы является использование URL. Мы рекомендуем использовать для этого совместимый с Zend_Controller_Router_Interface маршрутизатор, но это не обязательно. Ниже приведен пример маршрута, который можно использовать в конфигурационном файле INI: Используя этот маршрут и компоненты MVC Zend Framework-а, вы можете устанавливать номер текущей страницы следующим образом: setCurrentPageNumber($this->_getParam('pageNumber'));]]> Есть также другие опции, о них читайте в разделе Конфигурация. После этого нужно присвоить экземпляр Zend_Paginator переменной вида. Если используется Zend_View с помощником действий ViewRenderer, то для этого подходит следующий код: view->paginator = $paginator;]]>
Визуализация страниц через скрипты видов Для визуализации элементов страницы (если вы используете для этого Zend_Paginator) и отображения постраничной навигации используется скрипт вида. Поскольку Zend_Paginator реализует SPL-интерфейс IteratorAggregate, то обход элементов и их отображение производится просто.

Example

paginator)): ?>
    paginator as $item): ?>
paginationControl($this->paginator, 'Sliding', 'my_pagination_control.phtml'); ?> ]]>
Обратите внимание, что в конце вызывается помощник вида. PaginationControl принимает экземпляр Zend_Paginator, стиль прокрутки и скрипт вида. Последние два аргумента являются необязательными. Но несмотря на это, они очень важны. В то время как скрипт вида используется для определения внешнего вида постраничной навигации, стиль прокрутки определяет ее поведение. Предположим, скрипт вида отображает постраничную навигацию для результатов поиска следующего вида: Что должно происходить, если пользователь нажимает на ссылку "next" несколько раз? Правильно, тут может быть сколько угодно вариантов. Номер текущей страницы может оставаться в середине (как это реализовано, например, в Yahoo!) или перемещаться к концу ряда при каждом нажатии "next" и затем показываться снова с другого конца. Количество отображаемых номеров страниц может даже увеличиваться и уменьшаться, пока пользователь перемещается по ним (или "прокручивает" их), как это сделано в Google. Zend Framework предоставляет четыре стиля прокрутки: Стили прокрутки для <code>Zend_Paginator</code> Стиль прокрутки Описание All Возвращает все страницы. Полезен для постраничной навигации в виде выпадающего списка с относительно небольшим количеством страниц. В этом случае предпочтительнее, чтобы в нем отображались все доступные страницы. Elastic Скроллинг в стиле Google, в котором количество отображаемых номеров страниц может увеличиваться и уменьшаться, пока пользователь перемещается по страницам. Jumping Пока пользователь листает страницы, номер текущей страницы перемещается к концу ряда и показывается снова в начале нового ряда. Sliding Скроллинг в стиле Yahoo!, в котором номер текущей страницы находится в середине ряда или настолько близко к нему, насколько это возможно. Этот стиль используется по умолчанию.
Установив используемые по умолчанию скрипт вида, стиль прокрутки и экземпляр вида, вы можете полностью исключить вызовы PaginationControl: setView($view);]]> Если все эти значения установлены, то вы можете вывести постраничную навигацию в своем скрипте вида с помощью обычной конструкции echo: paginator; ?>]]> Примеры постраничной навигации Надеемся, следующие примеры помогут вам с созданием постраничной навигации: Постраничная навигация для результатов поиска pageCount): ?>
previous)): ?> < Previous | < Previous | pagesInRange as $page): ?> current): ?> | | next)): ?> Next > Next >
]]>
Постраничная навигация для элементов pageCount): ?>
firstItemNumber; ?> - lastItemNumber; ?> of totalItemCount; ?> previous)): ?> First | First | previous)): ?> < Previous | < Previous | next)): ?> Next > | Next > | next)): ?> Last Last
]]>
Постраничная навигация в виде выпадающего списка pageCount): ?> ]]>
Список свойств Следующие опции доступны внутри скрипта вида для постраничной навигации: Свойства, доступные внутри скрипта вида Свойство Тип Описание first integer Номер первой страницы (т.е. 1) firstItemNumber integer Действительный номер первого элемента на текущей странице firstPageInRange integer Первая страница в ряде, возвращенном текущим стилем прокрутки current integer Текущий номер страницы currentItemCount integer Количество элементов на текущей странице last integer Номер последней страницы lastItemNumber integer Действительный номер последнего элемента на текущей странице lastPageInRange integer Последняя страница в ряде, возвращенном текущим стилем прокрутки next integer Номер следующей страницы pageCount integer Общее количество страниц pagesInRange array Массив страниц, возвращенный текущим стилем прокрутки previous integer Номер предыдущей страницы totalItemCount integer Общее количество элементов