El sistema de paginación

Cuando un bucle devuelvle varias decenas de artículos (o, para una petición, varios miles de firmas), no es deseable — e incluso puede ser imposible — mostrarlos todos en una sola página. En tal caso, en general se quiere mostrar sólo algunos resultados, con un sistema de navegación de una página a otra. Aunque sea posible construirlo a partir de otros bucles SPIP, la tarea se vuelve en general relativamente compleja.

Por eso [SPIP 1.9] introduce un sistema simplificado de paginación de resultados de un bucle.

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í:

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

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.

Notas

[1En francés début significa inicio.

Voluntariamente este sistema es muy simple; en una próxima versión de SPIP probablemente será posible elegir la presentación de páginas (por ejemplo numeradas 1, 2, 3... en vez de 0, 10, 20..., o especificando el código que sirve de separación entre números).

Atención: mucho más simple, este mecanismo de paginación también es incompatible con el de SPIP-Contrib’, que le sirvió de matriz. Si utilizas la contribución, tendrás que revisar los esqueletos correspondientes.

Autor o autora dani Publicado el: Actualizado: 21/03/23

Traducciones: català, English, Español, français, italiano, Nederlands