Il sistema di paginazione

Quando un ciclo estrae diverse decine di articoli (o, nel caso di una petizione, migliaia di firme) non è desiderabile - né possibile - visualizzare tutto su una sola pagina. Per tale motivo si vorrà visualizzarne solo un certo numero e avere un sistema di navigazione da una pagina di risultati a un’altra. Benché ciò sia possibile farlo con i cicli normali di SPIP normales, tale procedura sarebbe comunque abbastanza complessa.

Con questo obiettivo [SPIP 1.9] introduce un sistema semplificato per la paginazione dei risultati di un ciclo.

Esempio

Nella sua forma più semplice, questo sistema è composto da un criterio e da un segnaposto:

  • il criterio {pagination} va aggiunto al ciclo da impaginare;
  • il segnaposto #PAGINATION va messo in una delle parti opzionali del ciclo («prima» o «dopo»).
<B_pagina>
    #PAGINATION
    <ul>
<BOUCLE_pagina(ARTICLES) {par date} {pagination}>
    <li>#TITRE</li>
</BOUCLE_pagina>
    </ul>
</B_pagina>

Se il sito ha 90 articoli pubblicati questo ciclo mostrerà l’elenco dei dieci articoli più vecchi, sovrastata di link che portano verso la pagina che mostra i dieci seguenti, i dieci precedenti, ecc. Questi link sono numerati nella maniera seguente:

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

Il numero dal quale si inizia a mostrare i risultati viene passato nell’URL mediante un parametro debut_page=x che ha lo stesso nome (in questo caso, «pagina») del ciclo in questione. (Questo parametro può essere utilizzato in un altro ciclo attraverso il criterio classico {debut_page,10}.)

Da notare: il numero totale di link mostrati è limitato; dei punti di sospensione permettono di andare direttamente alla fine dell’elenco o di tornare all’inizio dell’elenco se lo si desidera.

Ancore di paginazione

Il segnaposto #PAGINATION comporta un’ancoraggio HTML che permette a chi naviga di mostrare direttamente la parte della pagina che è impaginata; tuttavia, se si desidera mettere dei link di paginazione sotto l’elenco degli articoli si deve poter mettere l’ancora al di sopra dell’elenco.

Per questo scopo è utile il segnaposto #ANCRE_PAGINATION, che ritorna l’ancora in questione, e impedisce al segnaposto #PAGINATION che segue di visualizzare il suo ancoraggio.

<B_pagina>
#ANCRE_PAGINATION
  <ul>
<BOUCLE_pagina(ARTICLES) {par date} {pagination}>
   <li>#TITRE</li>
</BOUCLE_pagina>
   </ul>
#PAGINATION
</B_pagina>

Il numero totale dei risultati

Per un ciclo con il criterio {pagination}, il segnaposto #TOTAL_BOUCLE mostra il numero di elementi effettivamente trovati, ovvero 10 sulle pagine piene e 10 o meno sull’ultima pagina dei risultati.

Per visualizzare il numero di elementi che dovrebbero essere trovati se il criterio {pagination} non era presente, si utilizza il segnaposto #GRAND_TOTAL.

<B_paginazione>
#ANCRE_PAGINATION
<BOUCLE_paginazione (ARTICLES) {pagination}>
#TITRE <br />
</BOUCLE_paginazione>
In totale vi sono #GRAND_TOTAL articoli, e questa pagina ne mostra #TOTAL_BOUCLE
</B_paginazione>

farà visualizzare la frase: « In totale vi sono 1578 articoli, e questa pagina ne mostra 10. »

Cambiare l’intervallo del criterio {pagination}

Il numero predefinito di 10 elementi per pagina può essere modificato con un parametro supplementare del criterio.

Quindi:

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

darà i titoli di cinque articoli a partire da debut_page.

Il parametro in questione può essere composto secondo i propri desideri, ottenendolo anche da altri segnaposti, in particolare con #ENV{xx}, il che permette di ottenere una visualizzazione personalizzata molto completa.

La paginazione nei modelli inclusi

Se la propria paginazione deve funzionare in un modello di layout incluso si è obbligati a passare come parametro del comando INCLUDE la formula {self=#SELF}; ciò permette al modello incluso di calcolarsi il valore corretto del parametro debut_xxx, e si giustifica anche in quanto è più sicuro (il segnaposto #PAGINATION viene in effetti calcolato partendo dall’URL completo della pagina).

Stili della paginazione

Nell’elenco delle pagine, SPIP applica la classe « .on » alla pagina attuale e non mette nessuno stile sui link verso le altre pagine. La classe « .on » è la stessa del segnaposto #EXPOSE; generalmente essa mette in grassetto l’elemento a cui si applica.

Scegliere il modulo di paginazione

Dalla versione SPIP 1.9.1, il segnaposto #PAGINATION accetta un parametro {modele}, che consente di modificare il risultato del segnaposto.

Quindi #PAGINATION{precedent_suivant} mostrerà i collegamenti verso le pagine precedente e successiva. I collegamenti saranno i seguenti

pagina precedente | pagina successiva

#PAGINATION{page} mosterà quanche cosa del tipo

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

#PAGINATION{page_precedent_suivant} mostrerà qualcosa come

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

E’ possibile definire altri moduli di paginazione, che dovranno chiamarsi pagination_modele. Per ulteriori informazioni leggere la documentatione su i moduli.

Questo sistema è volutamente molto semplice; in una versione futura di SPIP sara forse possibile scegliere la presentazione delle pagine (numerate 1, 2, 3... invede di 0, 10, 20..., o di precisare il codice che serve a separare i numeri).

Attenzione: essendo molto più semplice, questo meccanismo di paginazione è anche incompatibile con quello scaricabile su SPIP-Contrib’, da cui ha preso spunto. Se si sta usando tale contributo si dovranno rivedere i modelli che ne fanno uso.

Autore Fausto Barbarito Publié le : Mis à jour : 21/03/23

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