Preferirem llavors repartir els resultats en diverses pàgines, amb un sistema de navegació pàgina a pàgina. Si bé és possible fer-ho amb bucles SPIP normals, és no obstant relativament complicat.
També SPIP 1.9 introdueix un sistema simplificat de paginació dels resultats d’un bucle.
Exemple
De forma simple, aquest sistema es compon d’un criteri i d’una etiqueta:
- el criteri
{pagination}
s’afegeix en el bucle per paginar; - l’etiqueta
#PAGINATION
, situada enuna de les parts opcionals («abans» o « després») del bucle, mostra la «paginació»..
<B_page>
#PAGINATION
<ul>
<BOUCLE_page(ARTICLES) {par date} {pagination}>
<li>#TITRE</li>
</BOUCLE_page>
</ul>
</B_page>
Si el lloc té 90 articles publicats, aquest bucle mostrarà la llista dels deu articles més antics, amb enllaços que condueixen cap a la pàgina que mostra els deu següents, els altres deu, etc. Aquests enllaços estan enumerats tal i com segueix:
El número a partir del que els resultats es mostren es passa a l’url per mitjà d’un paràmetre {debut_page=x}
portant el mateix nom (aquí, «page») que el bucle al que fa referència. (Aquest paràmetre és utilitzable en un altre bucle per mitjà del criteri clàssic {debut_page,10}
.)
A tenir en compte: el número total d’enllaços mostrats és limitat; uns punts supensius permeten, si s’escau, anar directament al final de la llista, ou de retornar al començament.
Àncores de paginació
L’etiqueta #PAGINATION comporta una àncora html que permet al navegador mostrar directament la part de la pàgina que està paginada; no obstant, si volem posar els enllaços de paginació a sota de la llista d’articles, és necessari poder situar l’àncora a sobre de la llista.
És per això que serveix l’etiqueta #ANCRE_PAGINATION, que retorna l’àncora en qüestió, i impedeix a la següent etiqueta #PAGINATION mostrar la seva àncora.
<B_page>
#ANCRE_PAGINATION
<ul>
<BOUCLE_page(ARTICLES) {par date} {pagination}>
<li>#TITRE</li>
</BOUCLE_page>
</ul>
#PAGINATION
</B_page>
El número total de resultats
A dins d’un bucle amb el criteri {pagination}
, #TOTAL_BOUCLE mostra el número d’elements retornats efectivament, és a dir 10 a les pàgines plenes, i 10 o menys a la darrere pàgina de resultats.
Per mostrar el número d’elements que haurien de ser retornats si el criteri {pagination}
no estigués allà, utilitzeu l’etiqueta #GRAND_TOTAL
.
<B_pagination>
#ANCRE_PAGINATION
<BOUCLE_pagination (ARTICLES) {pagination}>
#TITRE <br />
</BOUCLE_pagination>
Il y a au total #GRAND_TOTAL articles, cette page en affiche #TOTAL_BOUCLE
</B_pagination>
indicarà: «Hi ha un total de 1578 articles, aquesta pàgina en mostra 10.»
Canviar el pas de la {pagination}
El número estàndard de 10 elements per pàgina es pot modificar mitjançant un paràmetre suplementari a dins del criteri.
D’aquesta manera
<BOUCLE_page (ARTICLES) {pagination 5}>
#TITRE <br />
</BOUCLE_page>
retornarà els títols de cinc articles a partir de debut_page.
El paràmetre en qüestió pot estar compost ell mateix tal i com ho desitgem a partir d’altres etiquetes, sobretot #ENV{xx}
, el que permet fer una presentació a la carta molt complerta.
La paginació a dins dels esquelets inclosos
Si la vostra paginació ha de funcionar en un esquelet inclós, heu de passar en paràmetre de l’ordre INCLURE
la formulació {self=#SELF}
; això permet a l’esquelet inclós calcular-se amb el valor correcte del paràmetre debut_xxx, i es justifica el que a més és per una necessitat de seguretat (l’etiqueta #PAGINATION és en efecte calculada a partir del URL complet de la pàgina).
A partir d’SPIP 1.9 el criteri {self=#SELF}
serà avantatjosament substituït per la parella {env} {ajax}
. [1].
Nnomenar el criteri de paginació
Quan s’utilitza esquelets inclus diverses vegades a dins la mateixa pàgina com:
<BOUCLE_incluse(ARTICLES) {id_rubrique} {par titre}>
<INCLURE{fond=motsgroupe5} {id_article} {ajax} {env}>
</BOUCLE_incluse>
i aquest INCLURE posseeix una paginació (d’aquí l’ús del criteri {env}
), quan fareu clic damunt d’una paginació, veureu que es modifiquen totes les paginacions al mateix temps.
Per evitar això, n’hi ha prou en nomenar el criteri pagination a l’interior del fitxer inclu per un nom que serà diferent a cada inclusió:
<B_groupe5>
#ANCRE_PAGINATION
<BOUCLE_groupe5(MOTS) {id_groupe=5} {pagination 15 #ID_ARTICLE}>
#TITRE
</BOUCLE_groupe5>
<p class="pagination">#PAGINATION</p>
</B_groupe5>
També podem voler especificar des de la crida l’INCLURE el nom que volem donar al criteri paginació:
<INCLURE{fond=page_paginee, env, nom_p=_abc}>
<INCLURE{fond=page_paginee, env, nom_p=_def}>
a dins de page_paginee.html :
<B_a>
#ANCRE_PAGINATION
<BOUCLE_a(ARTICLES) {pagination 25 #ENV{nom_p}}>
#TITRE<br />
</BOUCLE_a>
#PAGINATION
</B_a>
Estils de la paginació
La paginació està formada per una sèrie d’enllaços, i el número de pàgina corresponent a la pàgina actual dotada de la class «.on»: es definirà per tant els estils per a i .on si es vol personalitzar l’aparença.
Escollir el model de paginació
A partir d’SPIP 1.9, l’etiqueta #PAGINATION accepta un paràmetre {modele}
, que ens permet modificar el resultat de l’etiqueta.
D’aquesta manera #PAGINATION{precedent_suivant}
mostrarà enllaços cap a les pàgines anteriors i següents. Els enllaços seran els següents
#PAGINATION{page}
mostrarà qualsevol cosa de la següent manera
#PAGINATION{page_precedent_suivant}
mostrarà quelcom com
És possible definir altres models de paginació, que s’hauran d’anomenar pagination_modele. Podrem, per crear-los, inspirar-nos amb els que són lliurats de base amb SPIP i que es troben situats a dins del directori prive/modeles/
(fins a la versió 1.9.2 d’SPIP estaven situats a dist/modeles/
) . Per a més informació, llegiu la documentació sobre els models.