UtilisationPaginer des collections de données
Afin de pouvoir paginer des éléments, Zend_Paginator doit
posséder une manière générique d'accéder aux sources de données. De ce fait, tous les
accès aux données se font via des adaptateurs de sources. Plusieurs adaptateurs existent
par défaut :
Adaptateurs pour Zend_PaginatorAdaptateurDescriptionArrayUtilise un tableau PHPDbSelectUtilise une instance de Zend_Db_Select
qui retourne un tableauDbTableSelectUtilise une instance Zend_Db_Table_Select,
qui retournera une instance de
Zend_Db_Table_Rowset_Abstract. Ceci fournit aussi
des informations supplémentaires sur le jeu de résultats, tel que les
noms de colonne.IteratorUtilise une instance implémentant IteratorNullN'utilise pas Zend_Paginator pour la
pagination. En revanche, les options et capacités de contrôle de la
pagination restent disponibles.
Plutôt que de sélectionner chaque ligne correspondant à une requête fournie,
les adaptateurs DbSelect et DbTableSelect récupèrent
seulement la quantité de données nécessaire pour l'affichage de la page
courante.
A cause de ceci, une seconde requête est générée dynamiquement pour déterminer
le nombre total de lignes correspondantes. Cependant, il est possible de directement
fournir un nombre ou un requête de dénombrement vous-même. Regardez la méthode
setRowCount() de l'adaptateur DbSelect pour de plus amples
informations.
Pour créer une instance de Zend_Paginator, vous devez
spécifier un adaptateur à son constructeur:
Pour une meilleure intégration, vous pouvez utiliser la fabrique
factory():
Pour l'adaptateur Null, il faut spécifier un chiffre à son
constructeur en lieu et place de la collection de données.
Bien que l'instance soit techniquement utilisable dans l'état, dans votre
contrôleur d'action vous devrez informer le paginateur du numéro de page demandé par
l'utilisateur. Ceci lui permet d'avancer à travers les données paginées.
setCurrentPageNumber($page);
]]>
La manière la plus simple de suivre et scruter cette valeur est via l'URL. Nous
recommandons l'utilisation d'un routeur compatible avec
Zend_Controller_Router_Interface, mais ceci n'est pas
nécessaire.
Voici une route que vous pourriez définir dans un fichier de configuration
INI:
Avec une telle route (et en utilisant les composants MVC de Zend Framework), vous
pourriez spécifier le numéro de la page de cette manière :
setCurrentPageNumber($this->_getParam('page'));
]]>
Il y a d'autres options disponibles, voyez la configuration pour plus de
détails.
Enfin, il faut passer l'instance du paginateur à votre vue. Si vous utilisez
Zend_View avec l'aide d'action ViewRenderer, ceci
fonctionnera :
view->paginator = $paginator;
]]>Rendre des pages avec les scripts de vue
Le script de vue va être utilisé pour rendre les éléments de la page (bien sûr si
Zend_Paginator est utilisé à cet effet), et pour afficher les
éléments relatifs au contrôle de la pagination.
Comme Zend_Paginator implémente l'interface SPL IteratorAggregate,
boucler sur les éléments et les afficher est très simple.