SPIP

[ar] [bg] [ca] [cpf] [cs] [da] [de] [en] [eo] [es] [eu] [fa] [fon] [fr] [gl] [id] [it] [ja] [lb] [nl] [oc] [pl] [pt] [ro] [sv] [tr] [vi] [zh] Espace de traduction

Télécharger la dernière version de SPIP

SPIP 1.9.2 SPIP 1.9.2

Le système de pagination

Juillet 2006 — maj : 7 mai

Toutes les versions de cet article :

Lorsqu’une boucle renvoie plusieurs dizaines d’articles (ou, pour une pétition, plusieurs milliers de signatures), il n’est pas souhaitable, voire impossible, de tout afficher sur une seule page.


On préférera alors répartir les résultats en plusieurs pages, avec un système de navigation page à page. S’il est possible de réaliser cela avec des boucles SPIP ordinaires, c’est tout de même relativement complexe.

Aussi SPIP 1.9 introduit-il un système simplifié de pagination des résultats d’une boucle.

Exemple

Au plus simple, ce système est composé d’un critère et d’une balise :

  • le critère {pagination} s’ajoute sur la boucle à paginer ;
  • la balise #PAGINATION, placée dans une des parties optionnelles (« avant » ou « après ») de la boucle, affiche la « pagination ».

Si le site comporte 90 articles publiés, cette boucle affichera la liste des dix plus anciens articles, surplombée de liens conduisant vers la page qui affiche les dix suivants, les dix d’après, etc. Ces liens sont numérotés comme suit :

0 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | ...

Le numéro à partir duquel les résultats sont affichés est passé dans l’url via un paramètre {debut_page=x} portant le même nom (ici, « page ») que la boucle concernée. (Ce paramètre est exploitable dans une autre boucle via le critère classique {debut_page,10}.)

A noter : le nombre total de liens affichés est limité ; des points de suspension permettent, le cas échéant, d’aller directement à la toute fin de la liste, ou de revenir au tout-début.

Ancres de pagination

La balise #PAGINATION comporte une ancre html qui permet au navigateur d’afficher directement la partie de la page qui est paginée ; toutefois si l’on veut mettre les liens de pagination en dessous de la liste des articles, il faut pouvoir placer l’ancre au-dessus de la liste.

C’est à cela que sert la balise #ANCRE_PAGINATION, qui retourne l’ancre en question, et interdit à la balise #PAGINATION suivante d’afficher son ancre.

Le nombre total de résultats

Dans une boucle avec le critère {pagination}, #TOTAL_BOUCLE affiche le nombre d’éléments effectivement retournés, c’est-à-dire 10 sur les pages pleines, et 10 ou moins sur la dernière page de résultats.

Pour afficher le nombre d’éléments qui auraient été retournés si le critère {pagination} n’avait pas été là, utilisez la balise #GRAND_TOTAL.

indiquera : « Il y a au total 1578 articles, cette page en affiche 10. »

Changer le pas de la {pagination}

Le nombre standard de 10 éléments par page peut être modifié par un paramètre supplémentaire dans le critère.

Ainsi

<BOUCLE_page (ARTICLES) {pagination 5}>
#TITRE <br />
</BOUCLE_page>

retournera les titres de cinq articles à partir de debut_page.

Le paramètre en question peut lui-même être composé comme on le souhaite à partir d’autres balises, notamment #ENV{xx}, ce qui permet de faire un affichage à la demande très complet.

La pagination dans les squelettes inclus

Si votre pagination doit fonctionner dans un squelette inclus, vous devez passer en paramètre de la commande INCLURE la formulation {self=#SELF} ; ceci permet au squelette inclus de se calculer avec la bonne valeur du paramètre debut_xxx, et se justifie qui plus est par un besoin de sécurité (la balise #PAGINATION est en effet calculée à partir de l’URL complète de la page).

Styles de la pagination

La pagination est constituée d’une série de liens, et d’un numéro de page correspondant à la page actuelle doté de la class « .on » : on définira donc les styles pour a et .on pour en personnaliser l’apparence.

Choisir le modèle de pagination

Depuis SPIP 1.9.1, la balise #PAGINATION accepte un paramètre {modele}, qui permet de modifier le résultat de la balise.

Ainsi #PAGINATION{precedent_suivant} affichera des liens vers les pages précédentes et suivantes. Les liens seront les suivants

page précédente | page suivante

#PAGINATION{page} affichera quelque chose de la forme suivante

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ...

#PAGINATION{page_precedent_suivant} affichera quelquechose comme

< 1 | 2 | 3 | 4 | 5 | 6 | >

Il est possible de définir d’autres modèles de pagination, qui devront s’appeler pagination_modele. Pour plus d’info, lire la documentation sur les modèles.

P.-S.

Attention : beaucoup plus simple, ce mécanisme de pagination est aussi incompatible avec celui SPIP-Contrib’, qui lui a servi de matrice. Si vous utilisiez la contrib, il vous faudra revoir les squelettes concernés.


Voir le squelette de cette page Site réalisé avec SPIP | Espace de traduction | Espace privé