<?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>
