35.4. Продвинутое использование

35.4.1. Создание собственных адаптеров к источникам данных

Вы можете столкнуться с таким типом данных, для которого не предусмотрено адаптера. В этом случае нужно создать собственный адаптер.

Для этого нужно реализовать интерфейс 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), чтобы понять, как реализовать свой адаптер.

35.4.2. Создание своих стилей прокрутки

При создании своего стиля прокрутки требуется, чтобы он реализовывал интерфейс 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);