paginator-simple.xml 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Reviewed: no -->
  3. <sect1 id="learning.paginator.simple">
  4. <title>Simple Examples</title>
  5. <para>
  6. In this first example we won't do anything spectacular, but hopefully it will
  7. give you a good idea of what Zend_Paginator is designed to do.
  8. Let's say we have an array called $data with the numbers 1 to 100 in it, which
  9. we want to divide over a number of pages. We can use the static <methodname>factory()</methodname>
  10. method in the <classname>Zend_Paginator</classname> class to get a <classname>Zend_Paginator</classname>
  11. object with our array in it.
  12. </para>
  13. <programlisting language="php"><![CDATA[
  14. // Create an array with numbers 1 to 100
  15. $data = range(1, 100);
  16. // Get a Paginator object using Zend_Paginator's built-in factory.
  17. $paginator = Zend_Paginator::factory($data);
  18. ]]></programlisting>
  19. <para>
  20. We're already almost done! The $paginator variable now contains a reference to the
  21. Paginator object. By default it is setup to display 10 items per page.
  22. To display the items for the currently active page, all you need to do is iterate
  23. over the Paginator object with a foreach loop. The currently active page defaults
  24. to the first page if it's not explicitly specified. We will see how you can select
  25. a specific page later on. The snippet below will display an unordered list containing the
  26. numbers 1 to 10, which are the numbers on the first page.
  27. </para>
  28. <programlisting language="php"><![CDATA[
  29. // Create an array with numbers 1 to 100
  30. $data = range(1, 100);
  31. // Get a Paginator object using Zend_Paginator's built-in factory.
  32. $paginator = Zend_Paginator::factory($data);
  33. ?><ul><?php
  34. // Render each item for the current page in a list-item
  35. foreach ($paginator as $item) {
  36. echo '<li>' . $item . '</li>';
  37. }
  38. ?></ul>
  39. ]]></programlisting>
  40. <para>
  41. Now let's try and render the items on the second page. You can use the
  42. <methodname>setCurrentPageNumber()</methodname> method to select which page you want to view.
  43. </para>
  44. <programlisting language="php"><![CDATA[
  45. // Create an array with numbers 1 to 100
  46. $data = range(1, 100);
  47. // Get a Paginator object using Zend_Paginator's built-in factory.
  48. $paginator = Zend_Paginator::factory($data);
  49. // Select the second page
  50. $paginator->setCurrentPageNumber(2);
  51. ?><ul><?php
  52. // Render each item for the current page in a list-item
  53. foreach ($paginator as $item) {
  54. echo '<li>' . $item . '</li>';
  55. }
  56. ?></ul>
  57. ]]></programlisting>
  58. <para>
  59. As expected, this little snippet will render an unordered list with the numbers
  60. 11 to 20 in it.
  61. </para>
  62. <para>
  63. These simple examples demonstrate a small portion of what can be achieved with
  64. <classname>Zend_Paginator</classname>. However, a real application rarely reads its data from a plain
  65. array, so the next section is dedicated to showing you how you can use Paginator
  66. to paginate the results of a database query. Before reading on, make sure you're familiar with
  67. the way <classname>Zend_Db_Select</classname> works!
  68. </para>
  69. <para>
  70. In the database examples we will look at a table with blog posts called 'posts'.
  71. The 'posts' table has four columns: id, title, body, date_created.
  72. Let's dive right in and have a look at a simple example.
  73. </para>
  74. <programlisting language="php"><![CDATA[
  75. // Create a select query. $db is a Zend_Db_Adapter object, which we assume
  76. // already exists in your script.
  77. $select = $db->select()->from('posts')->order('date_created DESC');
  78. // Get a Paginator object using Zend_Paginator's built-in factory.
  79. $paginator = Zend_Paginator::factory($select);
  80. // Select the second page
  81. $paginator->setCurrentPageNumber(2);
  82. ?><ul><?php
  83. // Render each the title of each post for the current page in a list-item
  84. foreach ($paginator as $item) {
  85. echo '<li>' . $item->title . '</li>';
  86. }
  87. ?></ul>
  88. ]]></programlisting>
  89. <para>
  90. As you can see, this example is not that different from the previous one.
  91. The only difference is that you pass a <classname>Zend_Db_Select</classname> object to the
  92. Paginator's <methodname>factory()</methodname> method, rather than an array.
  93. For more details on how the database adapter makes sure that your query
  94. is being executed efficiently, see the Zend_Paginator chapter in the reference manual
  95. on the DbSelect and DbTableSelect adapters.
  96. </para>
  97. </sect1>