1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="learning.paginator.simple">
<title>Exemples simples</title>
<para>
Dans ce premier exemple nous n'allons rien faire de magnifique, mais ça donnera une
bonne idée de l'utilité de <classname>Zend_Paginator</classname>.
Imaginons un tableau $data qui contient les chiffres de 1 à 100, nous voulons le
diviser en un nombre de pages. Nous pouvons utiliser la méthode statique
<methodname>factory()</methodname> de <classname>Zend_Paginator</classname> pour
récupérer un objet <classname>Zend_Paginator</classname> avec notre tableau à
l'intérieur.
</para>
<programlisting language="php"><![CDATA[
// Créer un tableau contenant les chiffres de 1 à 100
$data = range(1, 100);
// Récupérons un objet Paginator grâce à la fabrique.
$paginator = Zend_Paginator::factory($data);
]]></programlisting>
<para>
C'est presque terminé! La variable $paginator contient une référence vers l'objet
Paginator. Par défaut il servira 10 entités par page. Pour afficher les données sur
la page, il suffit d'itérer sur l'objet Paginator dans une boucle foreach. La page
en cours est par défaut la première, nous verrons comment choisir une page après.
Le code ci-après affiche une liste qui contient les chiffres de 1 à 10, ce sont
les chiffres de la première page.
</para>
<programlisting language="php"><![CDATA[
// Créer un tableau contenant les chiffres de 1 à 100
$data = range(1, 100);
// Récupérons un objet Paginator grâce à la fabrique.
$paginator = Zend_Paginator::factory($data);
?><ul><?php
// Rendu de chaque donnée dans une liste
foreach ($paginator as $item) {
echo '<li>' . $item . '</li>';
}
?></ul>
]]></programlisting>
<para>
Essayons maintenant de récupérer les données de la deuxième page. Vous pouvez utiliser
la méthode <methodname>setCurrentPageNumber()</methodname> pour choisir la page.
</para>
<programlisting language="php"><![CDATA[
// Créer un tableau contenant les chiffres de 1 à 100
$data = range(1, 100);
// Récupérons un objet Paginator grâce à la fabrique.
$paginator = Zend_Paginator::factory($data);
// Selection de la page 2
$paginator->setCurrentPageNumber(2);
?><ul><?php
// Rendu de chaque donnée dans une liste
foreach ($paginator as $item) {
echo '<li>' . $item . '</li>';
}
?></ul>
]]></programlisting>
<para>
Bien sûr ici, ce sont les chiffres 1 à 20 qui s'affichent.
</para>
<para>
Ces quelques exemples simplifiés sont loin de tout montrer sur
<classname>Zend_Paginator</classname>. Une application réelle ne lit pas ses données depuis
un tableau c'est pourquoi la section suivante montre comment utiliser le Paginator avec des
résultats d'une requête sql. Au besoin, familiarisez vous avec
<classname>Zend_Db_Select</classname>.
</para>
<para>
Dans l'exemple utilisant une base de données, nous chercherons des billets de blog appelés
'posts'. La table des 'posts' a quatre colonnes: id, title, body, date_created.
Voyons un exemple simple.
</para>
<programlisting language="php"><![CDATA[
// Créons un objet select qui récupère des billets et les range par date de création descendante
$select = $db->select()->from('posts')->sort('date_created DESC');
// Créons un paginateur pour cette requête
$paginator = Zend_Paginator::factory($select);
// Selection de la page 2
$paginator->setCurrentPageNumber(2);
?><ul><?php
// Affichage du titre de chaque billet pour la page en cours
foreach ($paginator as $item) {
echo '<li>' . $item->title . '</li>';
}
?></ul>
]]></programlisting>
<para>
Comme vous le voyez, cet exemple n'est pas très différent du précédent. La seule différence
est <classname>Zend_Db_Select</classname> qui est passé à la méthode
<methodname>factory()</methodname> à la place d'un tableau.
Pour plus de détails notamment sur l'optimisation de la requête de l'objet select,
lisez le chapitre sur les adaptateurs DbSelect et DbTableSelect de la documentation de
<classname>Zend_Paginator</classname>.
</para>
</sect1>
|