Zend_Paginator-Advanced.xml 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <sect1 id="zend.paginator.advanced">
  2. <title>Продвинутое использование</title>
  3. <sect2 id="zend.paginator.advanced.adapters">
  4. <title>Создание собственных адаптеров к источникам данных</title>
  5. <para>
  6. Вы можете столкнуться с таким типом данных, для которого
  7. не предусмотрено адаптера. В этом случае нужно создать
  8. собственный адаптер.
  9. </para>
  10. <para>
  11. Для этого нужно реализовать интерфейс
  12. <code>Zend_Paginator_Adapter_Interface</code>. Он включает в себя
  13. два метода:
  14. </para>
  15. <itemizedlist>
  16. <listitem>
  17. <para>count()</para>
  18. </listitem>
  19. <listitem>
  20. <para>getItems($offset, $itemCountPerPage)</para>
  21. </listitem>
  22. </itemizedlist>
  23. <para>
  24. Кроме того, нужно реализовать конструктор, который принимает
  25. источник данных в качестве параметра и сохраняет его в
  26. защищенном или закрытом свойстве. Как его обрабатывать - решать вам.
  27. </para>
  28. <para>
  29. Если вы когда-либо использовали SPL-интерфейс
  30. <ulink url="http://www.php.net/~helly/php/ext/spl/interfaceCountable.html"><code>Countable</code></ulink>,
  31. то знаете, для чего используется метод <code>count()</code>. В
  32. <code>Zend_Paginator</code> он возвращает общее количество
  33. элементов в наборе данных.
  34. </para>
  35. <para>
  36. Метод <code>getItems()</code> ненамного сложнее. Он должен принимать
  37. смещение и количество элементов на странице и возвращать
  38. соответствующий кусок данных. В случае массива он мог бы выглядеть
  39. следующим образом:
  40. </para>
  41. <para>
  42. <programlisting language="php"><![CDATA[return array_slice($this->_array, $offset, $itemCountPerPage);]]>
  43. </programlisting>
  44. </para>
  45. <para>
  46. Посмотрите, как реализованы адаптеры, входящие в поставку
  47. Zend Framework (все они реализуют
  48. <code>Zend_Paginator_Adapter_Interface</code>), чтобы понять, как
  49. реализовать свой адаптер.
  50. </para>
  51. </sect2>
  52. <sect2 id="zend.paginator.advanced.scrolling-styles">
  53. <title>Создание своих стилей прокрутки</title>
  54. <para>
  55. При создании своего стиля прокрутки требуется, чтобы он
  56. реализовывал интерфейс
  57. <code>Zend_Paginator_ScrollingStyle_Interface</code>, который
  58. определяет единственный метод, <code>getPages()</code>:
  59. </para>
  60. <para>
  61. <programlisting language="php"><![CDATA[public function getPages(Zend_Paginator $paginator, $pageRange = null);]]>
  62. </programlisting>
  63. </para>
  64. <para>
  65. Этот метод должен вычислять верхний и нижний пределы номеров
  66. страниц в ряде так называемых "локальных" страниц (т.е. страниц,
  67. которые находятся рядом с текущей страницей).
  68. </para>
  69. <para>
  70. Если только ваш стиль прокрутки не наследует от уже существующего
  71. (для примера смотрите
  72. <code>Zend_Paginator_ScrollingStyle_Elastic</code>), то этот метод
  73. должен заканчиваться чем-то вроде следующего кода:
  74. </para>
  75. <para>
  76. <programlisting language="php"><![CDATA[return $paginator->getPagesInRange($lowerBound, $upperBound);]]>
  77. </programlisting>
  78. </para>
  79. <para>
  80. Этим вызовом не делается ничего специального, данный метод просто
  81. для удобства. Он проверяет на корректность верхний и нижний пределы
  82. и возвращает массив номеров страниц для постраничной навигации.
  83. </para>
  84. <para>
  85. Для того, чтобы использовать новый стиль прокрутки,
  86. следует указать <code>Zend_Paginator</code>-у, в какой директории
  87. он находится. Для этого сделайте следующее:
  88. </para>
  89. <para>
  90. <programlisting language="php"><![CDATA[// Префикс нового класса стиля прокрутки
  91. $prefix = 'My_Paginator_ScrollingStyle';
  92. // Путь к новому стилю прокрутки
  93. $path = 'My/Paginator/ScrollingStyle/';
  94. // Установка префикса и пути для нового стиля прокрутки
  95. Zend_Paginator::addScrollingStylePrefixPath($prefix, $path);]]>
  96. </programlisting>
  97. </para>
  98. </sect2>
  99. </sect1>
  100. <!--
  101. vim:se ts=4 sw=4 et:
  102. -->