Вы можете столкнуться с таким типом данных, для которого не предусмотрено адаптера. В этом случае нужно создать собственный адаптер.
Для этого нужно реализовать интерфейс
Zend_Paginator_Adapter_Interface. Он включает в себя
два метода:
count()
getItems($offset, $itemCountPerPage)
Кроме того, нужно реализовать конструктор, который принимает источник данных в качестве параметра и сохраняет его в защищенном или закрытом свойстве. Как его обрабатывать - решать вам.
Если вы когда-либо использовали SPL-интерфейс
Countable,
то знаете, для чего используется метод count(). В
Zend_Paginator он возвращает общее количество
элементов в наборе данных.
Метод getItems() ненамного сложнее. Он должен принимать
смещение и количество элементов на странице и возвращать
соответствующий кусок данных. В случае массива он мог бы выглядеть
следующим образом:
return array_slice($this->_array, $offset, $itemCountPerPage);
Посмотрите, как реализованы адаптеры, входящие в поставку
Zend Framework (все они реализуют
Zend_Paginator_Adapter_Interface), чтобы понять, как
реализовать свой адаптер.
При создании своего стиля прокрутки требуется, чтобы он
реализовывал интерфейс
Zend_Paginator_ScrollingStyle_Interface, который
определяет единственный метод, getPages():
public function getPages(Zend_Paginator $paginator, $pageRange = null);
Этот метод должен вычислять верхний и нижний пределы номеров страниц в ряде так называемых "локальных" страниц (т.е. страниц, которые находятся рядом с текущей страницей).
Если только ваш стиль прокрутки не наследует от уже существующего
(для примера смотрите
Zend_Paginator_ScrollingStyle_Elastic), то этот метод
должен заканчиваться чем-то вроде следующего кода:
return $paginator->getPagesInRange($lowerBound, $upperBound);
Этим вызовом не делается ничего специального, данный метод просто для удобства. Он проверяет на корректность верхний и нижний пределы и возвращает массив номеров страниц для постраничной навигации.
Для того, чтобы использовать новый стиль прокрутки,
следует указать Zend_Paginator-у, в какой директории
он находится. Для этого сделайте следующее:
// Префикс нового класса стиля прокрутки
$prefix = 'My_Paginator_ScrollingStyle';
// Путь к новому стилю прокрутки
$path = 'My/Paginator/ScrollingStyle/';
// Установка префикса и пути для нового стиля прокрутки
Zend_Paginator::addScrollingStylePrefixPath($prefix, $path);


