La paginazione tra gli articoli in una categoria di Joomla! Scorrere con "Precedente" e "Successivo" in maniera corretta

La paginazione del core di Joomla!, tra gli articoli appartenenti ad una Categoria, ha rappresentato spesso un problema per quanto riflottandoleguarda lo scorrere con i pulsanti "Precedente" e "Successivo", quando si vuol passare da un articolo all'altro.

L'organizzazione della paginazione sembra che scorra "all'opposto" rispetto all'ordine decrescente degli articoli. Mi spiego meglio.

Creata una categoria ed una voce di menu, ed assegnando "Articoli Categoria Blog" quale "Tipo di voce di menu", possiamo creare innumerevoli articoli nella suddetta Categoria. Se tra le impostazioni del pannello di controllo si è scelto di visualizzare "Prima gli articoli più recenti", come credo sia normale in un qualsiasi blog, la paginazione sembra che scorra al contrario quando si preme il pulsante "Successivo". Essa va a richiamare l'articolo "Precedente". Esempio:

Poniamo il caso che si stia leggendo l'articolo con ID=100. Se volessimo leggere l'articolo precedente, la paginazione di Joomla! ci prospetta il link "Successivo", al posto di "Precedente", al termine dell'articolo. Effettivamente va a richiamare l'ID=99. Però credo ci sia una discrasia tra il link e l'ID. Perchè appare "Successivo", se sto leggendo l'articolo più recente? Sarebbe più corretto che apparisse il link "Precedente". Non è un rompicapo, ma succede questo. Qualcosa non torna.

Forse non abbiamo fatto caso a questa modalità di scorrere gli articoli, perchè lo facciamo fare in automatico a Joomla!. Personalmente non la trovo molto corretta. Vediamo come poter risolvere il tutto.

Il file pagenavigation.php

Il file che assolve al compito della paginazione, al termine di un articolo, si chiama pagenavigation.php ed è situato al seguente percorso:

root/plugins/content/pagenavigation/pagenavigation.php

Con un programma FTP si porti tale file sul desktop e lo si apra con un text-editor. A partire dal rigo 174, circa, abbiamo il seguente codice php:

// Output.
    if ($row->prev || $row->next) {
        $html = '
            <ul class="pagenav">'
            ;
                if ($row->prev) {
                  $html .= '
                    <li class="pagenav-prev">
                       <a href="'. $row->prev .'" rel="prev">'
                         . JText::_('JGLOBAL_LT') . $pnSpace . JText::_('JPREV') . '</a>
                    </li>'
                    ;
                }

    if ($row->next) {
        $html .= '
           <li class="pagenav-next">
            <a href="'. $row->next .'" rel="next">'
                . JText::_('JNEXT') . $pnSpace . JText::_('JGLOBAL_GT') .'</a>
                   </li>'
                    ;
                }
                 $html .= '
                 </ul>'
;

Tutto questo codice viene "tradotto" in maniera più "pulita" e lo si può vedere meglio con un web inspector, per esempio quello di Chrome. Il codice HTML diventa:

<ul class="pagenav">
     <li class="pagenav-prev">
       <a href="/notizie/3-il-progetto-joomla" rel="prev">Precedente</a>
     </li>
		
     <li class="pagenav-next">
       <a href="/notizie/1-joomla" rel="next">Successivo></a>
     </li>
</ul>

Il codice appena postato fa riferimento ad un sito Joomla!, con la Categoria "Notizie" così come da installazione di default. Si sta leggendo, nel caso dell'esempio specifico, l'articolo con ID=2, vale a dire:

nomesito.it/notizie/2-come-iniziare

Notare quanto appena messo in evidenza fino ad ora. Se stiamo leggendo l'articolo con ID=2, perchè il link li class="pagenav-prev ci porta all'articolo /notizie/3-il-progetto-joomla?

pagenav-prev dovrebbe essere il precedente, cioè /notizie/1-joomla. Invece avviene il contrario.

Allo stesso modo, se volessi spostarmi all'articolo "Successivo", dovrebbe essere richiamato l'articolo con ID=3. Invece Joomla! richiama l'articolo con ID=1.

Questo accade perchè, come scritto precedentemente, l'ultimo articolo, con ID più alto, è al vertice della piramide, come nell'elenco più su. Possiamo fare in modo, per avere una navigazione più "ordinata", di invertire lo spostamento tra gli articoli, agendo sempre sul file pagenavigation.php.

Premettendo che si tratta di una modifica da apportare ad un file di Joomla!, è consigliabile fare molta attenzione, come sempre, oltre a creare una copia del suddetto file pagenavigation.php. Se qualcosa non dovesse andare per il verso giusto, si rimette tutto al proprio posto.

Modificare l'ordine della navigazione nel file pagenavigation.php

Arrivati a questo punto, non ci resta che "invertire" l'ordine della navigazione. Di seguito il codice modificato:

// Output.
    if ($row->prev || $row->next) {
        $html = '
            <ul class="pagenav">'
				;
                if ($row->prev) {
                  $html .= '
                    <li class="pagenav-next">
                       <a href="'. $row->prev .'" rel="next">'
                         . JText::_('JGLOBAL_LT') . $pnSpace . JText::_('JNEXT') . '</a>
                    </li>'
                    ;
                }

    if ($row->next) {
        $html .= '
           <li class="pagenav-prev">
            <a href="'. $row->next .'" rel="prev">'
                . JText::_('JPREV') . $pnSpace . JText::_('JGLOBAL_GT') .'</a>
                   </li>'
                    ;
                }
                 $html .= '
                 </ul>'
;

Fatto. Apparentemente non è cambiato molto. Ma spostando alcune classi associate agli items li e due variabili del core di Joomla!, abbiamo ottenuto quello che ci si era prefissi. Vediamo nel dettaglio:

     if ($row->prev) {
         $html .= '
           <li class="pagenav-next">
             <a href="'. $row->prev .'" rel="next">'
               . JText::_('JGLOBAL_LT') . $pnSpace . JText::_('JNEXT') . '</a>
                   </li>'
                    ;
                }

Si faccia attenzione alla prima condizione if:

if ($row->prev) {

Se ci sono articoli "precedenti" a quello attuale, l'output HTML deve estrarre un elemento li avente classe pagenav-next (classe invertita). L'url diventa:

<a href="'. $row->prev .'"rel="next">' . JText::_('JGLOBAL_LT') . $pnSpace . JText::_('JNEXT') . '</a>

La variabile che fa apparire la navigazione in maniera corretta è JNEXT. Infatti, osservando meglio, ho scambiato JPREV con JNEXT. L'altra variabile JGLOBAL_LT si occupa di far apparire le freccine verso destra o verso sinistra. Le ho eliminate in quanto non sono di mio gradimento. Per farlo, ho sovrascritto il file di lingua, mediante l'override, che verrà mostrato successivamente. Il tag rel="next" è stato scambiato anch'esso, nonostante sia associato ad una voce di menu con classe prev.

Allo stesso modo, va scambiata l'altra parte del codice php di pagenavigation.php.

    if ($row->next) {
        $html .= '
           <li class="pagenav-prev">
            <a href="'. $row->next .'" rel="prev">'
                . JText::_('JPREV') . $pnSpace . JText::_('JGLOBAL_GT') .'</a>
                   </li>'
                    ;
                }
                 $html .= '
                 </ul>'
;

Fatto il primo "scambio", è intuitivo adattare l'altra parte della navigazione.

if ($row->next) {

Se ci sono articoli "successivi" a quello attuale, l'output HTML deve estrarre un elemento li avente classe pagenav-prev (classe invertita). L'url diventa:

<a href="'. $row->next .'" rel="prev">' . JText::_('JPREV') . $pnSpace . JText::_('JGLOBAL_GT') .'</a>'

Alla stessa stregua del link precedente, il tag rel="prev" è associato alla classe della voce di menu opposta e va scambiata anche l'altra variabile JNEXT con JPREV. Con l'ausilio dei CSS, possiamo formattare come meglio crediamo le voci di menu, lasciandole al centro, oppure flottanti.

Override del file lingua it-IT.ini

Come anticipato in precedenza, si possono eliminare le freccine poste accanto ai link. Invece di mettere mano al core di Joomla!, possiamo farlo attraverso l'override del file lingua it-IT.ini. Nella cartella:

root/language

ne troviamo altre 3:

  1. en-GB
  2. it-IT
  3. overrides

Si scorra la root del sito con un programma FTP. Si individui la cartella it-IT ed al suo interno portarsi fino al file it-IT.ini. Lo si porti su desktop e lo si apra con un text-editor. Con la ricerca veloce, trovare: JGLOBAL_GT e JGLOBAL_LT. Queste 2 variabili fanno apparire le freccine. Possiamo "eliminarle" con il seguente metodo:

JGLOBAL_GT="&gt;" e JGLOBAL_LT="&lt;" diventeranno, rispettivamente:

Ho solo eliminato il contenuto delle due variabili. Salvare il file e rinominarlo it-IT.override.ini. Affinchè le modifiche apportate abbiamo effetto, lo si trasferisca nella cartella root/language/overrides. Aggiornare la pagina del sito in cui è presente la navigazione, e testare se tutto quello che è stato fatto ha avuto effetto positivo.

Conclusioni

Adesso la navigazione ha una corrispondenza nettamente migliore tra i pulsanti "Precedente" e "Successivo" e gli articoli della Categoria. E' bastato poco per poter raggiungere lo scopo. Il tutto è stato provato sulla versione 2.5 di Joomla! Per quanto riguarda Joomla 3.2 il percorso del file pagenavigation.php è identico. Dovrebbe essere valido lo stesso procedimento adottato per l'articolo in oggetto. Controllare prima di apportare qualsiasi modifica.

© www.extrowebsite.com - Grafica, layout, articoli e guide sono di esclusiva proprietà del webmaster - Tutti i diritti riservati