Ejemplo
En su versión más simple, este sistema se compone de un criterio y de una baliza:
- el criterio
{pagination}
se agrega al bucle por paginar; - la baliza
#PAGINATION
viene en una de las partes opcionales («antes» o « después») del bucle.
<B_pagina>
#PAGINATION
<ul>
<BOUCLE_pagina(ARTICLES) {par date} {pagination}>
<li>#TITRE</li>
</BOUCLE_pagina>
</ul>
</B_pagina>
Si el sitio comporta 90 artículos publicados, este bucle devolverá la lista de los diez artículos más antiguos, agregando por encima enlaces que llevan hacia la página que muestra los diez siguientes, los diez subsiguientes, etc. Estos enlaces están numerados así:
El número a partir del cual se muestran los resultados se pasa en la URL por un parámetro debut_pagina=x que empieza por debut_ y termina por el mismo nombre (aquí, «pagina») que el bucle referente [1]. (Y bien se puede usar luego este parámetro en otros bucles con un criterio clásico {debut_page,10}
.)
Nótese: se limita el número total de enlaces devultos; si fuera necesario puntos de suspensión permiten ir al final de toda la lista o de volver completamente al principio.
Anclas de paginación
La baliza #PAGINATION
comporta un ancla html que permite al navegador mostrar directamente la pate de la página que está paginada; sin embargo, si se desean poner los enlaces de paginación por debajo de la lista de artículos, hay que poder poner el ancla por encima de ésta.
Es a eso que sirve la baliza #ANCRE_PAGINATION
, que devuelve dicha ancla, y prohibe a la baliza #PAGINATION
suivante generar la suya.
<B_pagina>
#ANCRE_PAGINATION
<ul>
<BOUCLE_pagina(ARTICLES) {par date} {pagination}>
<li>#TITRE</li>
</BOUCLE_pagina>
</ul>
#PAGINATION
</B_pagina>
El número total de resultados
Para un bucle con el criterio {pagination}
, #TOTAL_BOUCLE
informa del número de elementos efectivamente devueltos, es decir 10 en las páginas plenas, y 10 o menos en la última página de resultados.
Para obtener el número de elementos que hubieran sido devueltos sin el criterio {pagination}
en el bucle, se utiliza la baliza #GRAND_TOTAL
.
<B_paginacion>
#ANCRE_PAGINATION
<BOUCLE_paginacion (ARTICLES) {pagination}>
#TITRE <br />
</BOUCLE_paginacion>
Hay en total #GRAND_TOTAL artículos, esta página muestra #TOTAL_BOUCLE de ellos.
</B_paginacion>
indicará : «Hay en total 1578 articles, artículos, esta página muestra 10 de ellos.»
Cambiar el «paso» de la paginación
La cantidad estándar de 10 elementos por página puede ser modificada or un parámetro adicional en el criterio.
Así:
<BOUCLE_pagina (ARTICLES) {pagination 5}>
#TITRE <br />
</BOUCLE_pagina>
devuelve los títulos de cinco artículos a partir de debut_pagina.
El parámetro en cuestión puede a su vez estar compuesto a voluntad a partir de otras balizas, en particular #ENV{xx}
, lo que permite hacer una presentación a pedido muy completa.
La paginación en esqueletos incluídos
Si tu paginación debe funcionar en un esqueleto incluído debes pasar en parámetro a la función INCLURE
la formulación {self=#SELF}
; esto permite al esqueleto incluído calcularse con el buen valor del parámetro debut_xxx, y además se justifica por una necesidad de seguridad (en efecto, la baliza #PAGINATION se calcula a partir de la URL completa de la página).
Estilos de la paginación
En la lista de páginas, SPIP aplica la clase « .on » a la página corriente, y no pone ningún estilo en los enlaces hacia otras páginas. La clase « .on » es la misma que la de la baliza #EXPOSE; que en los estilos de la distribución pone el elemento en negrilla.