Previous Next

Utilisation

Paginer 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_Paginator
Adaptateur Description
Array Utilise un tableau PHP
DbSelect Utilise une instance de Zend_Db_Select qui retourne un tableau
DbTableSelect Utilise 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.
Iterator Utilise une instance implémentant » Iterator
Null N'utilise pas Zend_Paginator pour la pagination. En revanche, les options et capacités de contrôle de la pagination restent disponibles.

Note:

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:

$paginator = new Zend_Paginator(new Zend_Paginator_Adapter_Array($array));

Pour une meilleure intégration, vous pouvez utiliser la fabrique factory():

$paginator = Zend_Paginator::factory($array);

Note:

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.

$paginator->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:

routes.example.route = articles/:articleName/:page
routes.example.defaults.controller = articles
routes.example.defaults.action = view
routes.example.defaults.page = 1
routes.example.reqs.articleName = \w+
routes.example.reqs.page = \d+

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 :

$paginator->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 :

$this->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.



Example

paginator)): ?>
    paginator as $item): ?>
paginationControl($this->paginator, 'Sliding', 'my_pagination_control.phtml'); ?>

Notez l'appel à l'aide de vue en fin de script. PaginationControl accepte jusqu'à quatre paramètres : l'instance du paginateur, un type de défilement (optionnel), un partial de vue (optionnel) et un tableau de paramètres additionnels.

Les second et troisième paramètres sont très importants. Alors que le partial est utiliser pour déterminer comment présenter les données, le type de défilement définira la manière dont ils se comportent. Disons que le partial ressemble à un contrôle de recherche, comme ce qui suit :

zend.paginator.usage.rendering.control.png

Que se passe-t-il lorsque l'utilisateur clique sur le lien "next" quelques fois? Plusieurs choses peuvent arriver. Le numéro de la page courante pourrait rester au milieu (comme c'est le cas sur Yahoo!), ou il pourrait aussi bien avancer à la fin de la fourchette des pages et apparaître encore à gauche lorsque l'utilisateur clique alors sur "next". Le nombre de pages pourrait alors s'étendre ou se comprimer alors que l'utilisateur avance ("scroll") à travers (comme chez Google).

Il existe 4 types de défilement intégrés dans Zend Framework :

Types de défilement pour Zend_Paginator
Type de défilement Description
All Retourne toutes les pages. Très pratique lorsqu'il y a peu de pages totales.
Elastic Un défilement de type Google qui s'étend et se contracte au fur et à mesure que l'utilisateur avance dans les pages de résultats.
Jumping Alors que l'utilisateur défile, le nombre de pages avance à la fin d'une échelle donnée, puis recommence au début de l'échelle suivante.
Sliding Un défilement de type Yahoo! qui positionne la page en cours au centre d'une échelle de pages, le plus justement et près possible. Ce type de défilement est le type par défaut.

Le quatrième et dernier paramètre est réservé pour un tableau associatif optionnel de variables supplémentaires que vous voulez rendre disponible dans vos partiels de vues (disponible via $this). Par exemple, ces valeurs permettent d'inclure des paramètres d'URL supplémentaires pour les liens de pagination.

En spécifiant le partial de vue par défaut, le défilement et l'instance de vue, vous pouvez alors vous affranchir totalement des appels à PaginationControl :

Zend_Paginator::setDefaultScrollingStyle('Sliding');
Zend_View_Helper_PaginationControl::setDefaultViewPartial(
    'my_pagination_control.phtml'
);
$paginator->setView($view);

Utilisez dès lors un simple echo dans le script de vue pour le rendu du paginateur complet:

paginator; ?>

Note:

Bien sûr, il est possible d'utiliser Zend_paginator avec d'autres moteurs de templates. Par exemple, avec Smarty vous pourriez faire ceci :

$smarty->assign('pages', $paginator->getPages());

Vous pouvez ainsi accéder aux valeurs du paginateur grâce à un template comme ceci :

{$pages.pageCount}

Exemples de contrôles de pagination

Voici quelques exemples qui vous aideront à démarrer avec le paginateur:

Pagination de recherche :



pageCount): ?>
previous)): ?> < Previous | < Previous | pagesInRange as $page): ?> current): ?> | | next)): ?> Next > Next >

Pagination d'objets :



pageCount): ?>
firstItemNumber; ?> - lastItemNumber; ?> of totalItemCount; ?> previous)): ?> First | First | previous)): ?> < Previous | < Previous | next)): ?> Next > | Next > | next)): ?> Last Last

Pagination Dropdown :

pageCount): ?>




Liste des propriétés

Les options suivantes sont disponibles pour contrôler la pagination dans les partials de vue :

Propriétés disponibles aux partials de vue
Propriété Type Description
first entier Numéro de la première page
firstItemNumber entier Numéro absolu du premier objet(item) dans cette page
firstPageInRange entier Première page dans l'échelle retournée par le type de défilement
current entier Numéro de la page en cours
currentItemCount entier Nombre d'objets sur cette page
itemCountPerPage integer Nombre d'objets maximum à afficher par page
last entier Numéro de la dernière page
lastItemNumber entier Numéro absolu du dernier objet sur cette page
lastPageInRange entier Dernière page dans l'échelle retournée par le type de défilement
next entier Numéro de la page suivante
pageCount entier Nombre de pages
pagesInRange tableau (array) Tableau des pages retournées par le type de défilement
previous entier Numéro de la page précédente
totalItemCount entier Nombre total d'objets
Previous Next
Introduction to Zend Framework
Présentation
Installation
Zend_Acl
Introduction
Affiner les Contrôles d'Accès
Utilisation avancée
Zend_Amf
Introduction
Zend_Amf_Server
Zend_Auth
Introduction
Authentification avec une table de base de données
Authentification "Digest"
Adaptateur d'authentification HTTP
LDAP Authentication
Authentification OpenID
Zend_Cache
Introduction
Aspect théorique
Les frontends Zend_Cache
Les backends Zend_Cache
Zend_Captcha
Introduction
Opération Captcha
Adaptateurs Captcha
Zend_Config
Introduction
Aspect théorique
Zend_Config_Ini
Zend_Config_Xml
Zend_Config_Writer
Zend_Config_Writer
Zend_Console_Getopt
Introduction à Getopt
Déclarer les règles Getopt
Extraire les options et les arguments
Configurer Zend_Console_Getopt
Zend_Controller
Zend_Controller - Démarrage rapide
Fondations de Zend_Controller
Le contrôleur frontal (Front Controller)
L'objet Requête
Routeur Standard
Le dispatcheur
Contrôleurs d'action
Aides d'action (Helper)
Objet de réponse
Plugins
Utilisation de conventions de dossiers modulaires
Exceptions avec MVC
Migrer depuis des versions précédentes
Zend_Currency
Introduction à Zend_Currency
How to work with currencies
Migrer depuis des versions antérieures
Zend_Date
Introduction
Aspect théorique
Méthodes de base
Zend_Date API Overview
Créer des dates
Constants for General Date Functions
Exemples concrets
Zend_Db
Zend_Db_Adapter
Zend_Db_Statement
Zend_Db_Profiler
Zend_Db_Select
Zend_Db_Table
Zend_Db_Table_Row
Zend_Db_Table_Rowset
Relations Zend_Db_Table
Zend_Debug
Afficher des informations
Zend_Dojo
Introduction
Zend_Dojo_Data: dojo.data Envelopes
Les aides de vues Dojo
Les éléments de formulaire et les décorateurs Dojo
Zend_Dom
Introduction
Zend_Dom_Query
Zend_Exception
Utiliser les exceptions
Zend_Feed
Introduction
Importer des flux
Obtenir des flux à partir de pages Web
Consommer un flux RSS
Consommer un flux Atom
Consommer une entrée Atom particulière
Modifier la structure du flux ou des entrées
Classes personnalisées pour les flux et entrées
Zend_File
Zend_File_Transfer
Validateurs pour Zend_File_Transfer
Filtres pour Zend_File_Transfer
Migrer à partir des versions précédentes
Zend_Filter
Introduction
Classes de filtre standards
Chaînes de filtrage
Écriture de filtres
Zend_Filter_Input
Zend_Filter_Inflector
Zend_Form
Zend_Form
Zend_Form Quick Start
Creating Form Elements Using Zend_Form_Element
Creating Forms Using Zend_Form
Creating Custom Form Markup Using Zend_Form_Decorator
Standard Form Elements Shipped With Zend Framework
Standard Form Decorators Shipped With Zend Framework
Internationalization of Zend_Form
Advanced Zend_Form Usage
Zend_Gdata
Introduction to Gdata
Authentification par procédé AuthSub
Using the Book Search Data API
Authentification avec ClientLogin
Using Google Calendar
Using Google Documents List Data API
Using Google Health
Using Google Spreadsheets
Using Google Apps Provisioning
Using Google Base
Utilisation des albums Web Picasa
Using the YouTube Data API
Attraper les exceptions Gdata
Zend_Http
Zend_Http_Client - Introduction
Zend_Http_Client - Utilisation avancée
Zend_Http_Client - Adaptateurs de connexion
Zend_Http_Cookie and Zend_Http_CookieJar
Zend_Http_Response
Zend_InfoCard
Introduction
Zend_Json
Introduction
Utilisation de base
Objets JSON
XML to JSON conversion
Zend_Json_Server - JSON-RPC server
Zend_Layout
Introduction
Zend_Layout - Démarrage rapide
Zend_Layout options de configuration
Zend_Layout, utilisation avancée
Zend_Ldap
Introduction
Zend_Loader
Charger les fichiers et les classes dynamiquement
Chargeur de Plugins
Zend_Locale
Introduction
Using Zend_Locale
Normalization and Localization
Working with Dates and Times
Supported locales
Migrer à partir des versions précédentes
Zend_Log
Présentation
Rédacteurs (Writers)
Formateurs (mise en forme)
Filtres
Zend_Mail
Introduction
Envoyer des émail en utilisant SMTP
Envoyer plusieurs émail par connexion SMTP
Utiliser différents transports
Émail HTML
Fichiers joints
Ajouter des destinataires
Contrôler les limites MIME
Entêtes additionnelles
Jeux de caractères
Encodage
Authentification SMTP
Sécuriser les transports SMTP
Lire des émail
Zend_Measure
Introduction
Création d'une mesure
Récupérer des mesures
Manipuler des mesures
Types de mesures
Zend_Memory
Présentation
Manager de mémoire
Objet mémoire
Zend_Mime
Zend_Mime
Zend_Mime_Message
Zend_Mime_Part
Zend_OpenId
Introduction
Zend_OpenId_Consumer Basics
Zend_OpenId_Provider
Zend_Paginator
Introduction
Utilisation
Configuration
Utilisation avancée
Zend_Pdf
Introduction.
Créer et charger des documents PDF
Sauvegarder les changement dans un document PDF
Les pages d'un document
Dessiner
Informations du document et métadonnées.
Exemple d'utilisation du module Zend_Pdf
Zend_ProgressBar
Zend_ProgressBar
Zend_Registry
Utiliser le registre
Zend_Rest
Introduction
Zend_Rest_Client
Zend_Rest_Server
Zend_Search_Lucene
Overview
Building Indexes
Searching an Index
Query Language
Query Construction API
Jeu de caractères
Extensibility
Agir avec Lucene Java
Avancé
Best Practices
Zend_Server
Introduction
Zend_Server_Reflection
Zend_Service
Introduction
Zend_Service_Akismet
Zend_Service_Amazon
Zend_Service_Audioscrobbler
Zend_Service_Delicious
Zend_Service_Flickr
Zend_Service_Nirvanix
Zend_Service_ReCaptcha
Zend_Service_Simpy
Introduction
Zend_Service_StrikeIron
Zend_Service_StrikeIron: Bundled Services
Zend_Service_StrikeIron: Advanced Uses
Zend_Service_Technorati
Zend_Service_Twitter
Zend_Service_Yahoo
Zend_Session
Introduction
Usage basique
Utilisation avancée
Gestion générale de la session
Zend_Session_SaveHandler_DbTable
Zend_Soap
Zend_Soap_Server
Zend_Soap_Client
WSDL
Auto découverte
Zend_Test
Introduction
Zend_Test_PHPUnit
Zend_Text
Zend_Text_Figlet
Zend_Text_Table
Zend_TimeSync
Introduction
Utiliser Zend_TimeSync
Zend_Translate
Introduction
Adaptateurs pour Zend_Translate
Utiliser les adaptateurs de traduction
Migrer à partir des versions précédentes
Zend_Uri
Zend_Uri
Zend_Validate
Introduction
Classes de validation standard
Chaînes de validation
Écrire des validateurs
Zend_Version
Lire la version du Zend Framework
Zend_View
Introduction
Scripts de contrôleur
Scripts de vue
Aides de vue
Zend_View_Abstract
Zend_Wildfire
Zend_Wildfire
Zend_XmlRpc
Introduction
Zend_XmlRpc_Client
Zend_XmlRpc_Server
Configuration système requise par le Zend Framework
Version de PHP requise
Extensions PHP
Les composants du Zend Framework
Dépendances internes du Zend Framework
Convention de codage PHP du Zend Framework
Vue d'ensemble
Formatage des fichiers PHP
Conventions de nommage
Style de codage
Zend Framework Performance Guide
Introduction
Class Loading
Internationalisation (i18n) and Localisation (l10n)
View Rendering
Informations de copyright