JoeCMS
Il CMS PHP su cui girano gli altri progetti: un motore open source fermo da anni, riportato in vita su PHP 8 e trasformato in un pacchetto che si installa dal browser.
Il problema
Ogni progetto nuovo ripartiva dalle stesse fondamenta: utenti, permessi, email, lingue, cache, backend. Il motore su cui lavoravo da anni, VGallery, era fermo a PHP 7 e su PHP 8 non si avviava: costrutti rimossi dal linguaggio e centinaia di chiamate su valori nulli diventate errori fatali.
Le alternative erano un CMS generico da piegare a ogni progetto o un framework su cui ricostruire tutto da capo. Ho scelto di recuperare il motore: una migrazione conservativa, che replica il comportamento di PHP 7 invece di riscriverlo, e un installer che da un archivio ZIP tira su un sito funzionante.
Come funziona
Struttura
I contenuti sono nodi tipizzati con campi dinamici: non esiste una tabella per ogni tipo di contenuto, e aggiungerne uno è configurazione, non codice. Intorno ci sono routing dichiarativo in XML, template a segnaposto e blocchi, e un backend con griglie e form generati dal database.
Flusso d'uso
Si scompatta lo ZIP nella cartella del sito e si apre il browser. Un wizard in dieci passi controlla i requisiti, crea il database, prova l'invio email, raccoglie i dati aziendali e lascia un sito multilingua già popolato, con pagine legali, robots.txt e regole Apache legate al dominio vero.
Scelte tecniche
Correzioni conservative invece di riscritture, su una base senza test: cast e controlli, e un lint dopo ogni modifica di massa. L'installer è indipendente dal framework, perché deve funzionare quando il CMS non si avvia ancora. Un errore fatale diventa una pagina 500 con un codice da cercare nei log, mai file e riga a video.
Limiti noti
È un motore con quasi vent'anni di storia: convive con alcune classi duplicate del framework e con parti ereditate lasciate inerti. La nuova area di gestione dei contenuti è ancora in sviluppo, e la validazione completa su hosting diversi dal mio è da chiudere.
Numeri
| File PHP nel punto di partenza, circa | 14.400 |
|---|---|
| File corretti nella migrazione a PHP 8 | 913 |
| Tabelle nello schema | 218 |
| Passi del wizard di installazione | 10 |
| Integrazioni di terze parti configurabili | 31 |
| Lingue nel pacchetto base | 4 |
Stack
- PHP 8
- MySQL / MariaDB
- Apache
- SCSS
- JavaScript
- Linux
JoeCMS deriva da VGallery (GPL-3) di Alessandro Stucchi.