Продвинутое использование
Создание собственных адаптеров к источникам данных
Вы можете столкнуться с таким типом данных, для которого
не предусмотрено адаптера. В этом случае нужно создать
собственный адаптер.
Для этого нужно реализовать интерфейс
Zend_Paginator_Adapter_Interface. Он включает в себя
два метода:
count()
getItems($offset, $itemCountPerPage)
Кроме того, нужно реализовать конструктор, который принимает
источник данных в качестве параметра и сохраняет его в
защищенном или закрытом свойстве. Как его обрабатывать - решать вам.
Если вы когда-либо использовали SPL-интерфейс
Countable,
то знаете, для чего используется метод count(). В
Zend_Paginator он возвращает общее количество
элементов в наборе данных.
Метод getItems() ненамного сложнее. Он должен принимать
смещение и количество элементов на странице и возвращать
соответствующий кусок данных. В случае массива он мог бы выглядеть
следующим образом:
_array, $offset, $itemCountPerPage);]]>
Посмотрите, как реализованы адаптеры, входящие в поставку
Zend Framework (все они реализуют
Zend_Paginator_Adapter_Interface), чтобы понять, как
реализовать свой адаптер.
Создание своих стилей прокрутки
При создании своего стиля прокрутки требуется, чтобы он
реализовывал интерфейс
Zend_Paginator_ScrollingStyle_Interface, который
определяет единственный метод, getPages():
Этот метод должен вычислять верхний и нижний пределы номеров
страниц в ряде так называемых "локальных" страниц (т.е. страниц,
которые находятся рядом с текущей страницей).
Если только ваш стиль прокрутки не наследует от уже существующего
(для примера смотрите
Zend_Paginator_ScrollingStyle_Elastic), то этот метод
должен заканчиваться чем-то вроде следующего кода:
getPagesInRange($lowerBound, $upperBound);]]>
Этим вызовом не делается ничего специального, данный метод просто
для удобства. Он проверяет на корректность верхний и нижний пределы
и возвращает массив номеров страниц для постраничной навигации.
Для того, чтобы использовать новый стиль прокрутки,
следует указать Zend_Paginator-у, в какой директории
он находится. Для этого сделайте следующее: