Da Joomla non più supportato a Joomla 6
Aggiornare un sito Joomla di tre versioni maggiori, un gradino alla volta, senza rompere un solo indirizzo né perdere un iscritto alla newsletter: migliaia di articoli di archivio, sei varianti grafiche regionali e pagine che a volte ci mettevano otto secondi ad aprirsi. Il caso: il sito di un'associazione nazionale con delegati in sei regioni, fermo da anni su una versione di Joomla uscita dal supporto.
Il punto di partenza
Joomla 3 su PHP 7.4: due tecnologie che non ricevono più correzioni di sicurezza. Sopra ci girava un template di una software house che aveva chiuso il progetto nel 2019, con sette varianti grafiche — una neutra e sei regionali — che non erano decorazione: reggevano il flusso con cui i delegati pubblicano le notizie del proprio territorio.
Accanto, una quantità di estensioni morte: un sistema di articoli alternativo mai portato su Joomla 4, un componente newsletter di due generazioni prima, gallerie fotografiche di un'installazione WordPress ancora precedente. E un archivio di migliaia di articoli, ciascuno con il suo indirizzo web che Google conosce da anni.
La scelta di rotta
Due strade erano possibili: costruire un sito nuovo e travasarci dentro i contenuti, oppure aggiornare una copia del sito esistente a tappe. È stata scelta la seconda: 3.10 → 4.4 → 5.4 → 6.1, un gradino alla volta.
Il motivo è concreto: ogni contenuto ha un numero interno e un indirizzo web che il sito nuovo deve conservare, altrimenti al momento del cambio si rompono migliaia di collegamenti e la posizione guadagnata su Google va persa. L'aggiornamento a tappe preserva quei riferimenti; il travaso no.
Il lavoro è stato fatto su una copia, su un indirizzo di prova e con un database separato: il sito vero non è stato toccato fino al giorno del trasloco. Prima del salto a Joomla 4 sono state disinstallate tutte le estensioni senza futuro, perché un aggiornamento con dentro componenti incompatibili si pianta a metà.
Il template e le sei regioni
Il nuovo template è un «template figlio» di Cassiopeia, quello di serie di Joomla: eredita tutto dal genitore e ci mette sopra solo le differenze, così gli aggiornamenti futuri non cancellano il lavoro fatto.
Per le sei varianti regionali la soluzione ovvia sarebbe stata sei stili di template. È stata scartata, ed è la scelta tecnica più interessante del progetto. In Joomla uno stile si assegna a una voce di menu: avrebbe colorato le pagine regionali, ma non quelle dei singoli articoli, che una voce di menu propria non ce l'hanno. Un lettore sarebbe entrato dalla pagina della sua regione, colorata, e cliccando una notizia sarebbe finito su una pagina generica.
La variante è stata invece agganciata alla categoria del contenuto: il template calcola a quale regione appartiene la pagina che sta per mostrare e applica la palette giusta, il nastro col nome della regione, le intestazioni. Funziona ovunque, comprese le schede dei singoli articoli.
I permessi dei delegati
Qui il lavoro è stato di regole, non di grafica. Ogni regione ha il suo gruppo di utenti e il suo livello di accesso; ogni gruppo può creare e correggere notizie solo nella propria categoria, e non può pubblicarle: restano in attesa finché la redazione nazionale non le approva.
Controllando l'impianto ereditato sono emersi due difetti veri: i gruppi regionali avevano un permesso generale che di fatto gli consentiva di pubblicare qualunque articolo del sito, e un gruppo aveva permessi anche sulla categoria di un'altra regione. Entrambi corretti, con il diritto di creare articoli tolto alla radice e riassegnato solo dove serve.
La newsletter
Dal vecchio sito sono stati recuperati tutti gli iscritti alla newsletter. Non con un'esportazione in foglio di calcolo, che è il modo semplice e quello che rovina i dati: un CSV perde lo stato di ciascun iscritto, le date e soprattutto la chiave personale che rende valido il link «cancella la mia iscrizione» in fondo alle email.
Si è usata invece la procedura di migrazione interna del componente, estraendo dal database del vecchio sito solo le tabelle necessarie. Verifica finale, iscritto per iscritto: nessun indirizzo perso e nessuno duplicato, tutte le chiavi di disiscrizione conservate, stati e date identici all'origine. Un dettaglio emerso strada facendo: sul vecchio sito la newsletter non era mai partita davvero.
I problemi e la velocità
L'intoppo peggiore è stato silenzioso. Dal giorno in cui è stata fatta la copia, il sito vero e la copia hanno continuato ad assegnare numeri nuovi ai contenuti nuovi, ciascuno per conto proprio: lo stesso numero poteva indicare due cose diverse. Prima del trasloco sono stati confrontati 239 indirizzi presi dal sito vivo: 226 identici, 4 collisioni. Le quattro sono state sistemate una per una, con i relativi reindirizzamenti.
Il motore di ricerca interno, poi, si rifiutava di indicizzare: 280 articoli avevano un indirizzo più lungo di quanto la tabella del database potesse contenere. Allargata la colonna, l'indice è passato dai mille scarsi contenuti di prima all'archivio intero.
Sulla velocità, i numeri misurati prima e dopo: la home è passata da 2,3 secondi a 0,21, la pagina delle notizie in evidenza da 8,2 secondi a 0,46. In più, 1.326 immagini d'archivio ricompresse da 1 gigabyte a 298 megabyte, senza cambiare nomi né estensioni, per non rompere i collegamenti dentro gli articoli.
Risultato: sito su Joomla 6 e PHP 8.3, sei varianti regionali funzionanti fin dentro le schede dei singoli articoli, tutti gli iscritti alla newsletter recuperati senza perdite, pagine servite in un decimo del tempo di prima. Il vecchio sito è stato conservato da parte come via di ritorno, non cancellato.