JoeCMS
El CMS en PHP sobre el que funcionan los demás proyectos: un motor de código abierto parado durante años, recuperado en PHP 8 y convertido en un paquete que se instala desde el navegador.
El problema
Cada proyecto nuevo empezaba por los mismos cimientos: usuarios, permisos, correo, idiomas, caché, panel de administración. El motor con el que trabajaba desde hacía años, VGallery, se había quedado en PHP 7 y en PHP 8 ni siquiera arrancaba: construcciones eliminadas del lenguaje y cientos de llamadas sobre valores nulos convertidas en errores fatales.
Las alternativas eran un CMS genérico adaptado a la fuerza a cada proyecto o un framework sobre el que reconstruirlo todo. Elegí recuperar el motor: una migración conservadora, que reproduce el comportamiento de PHP 7 en lugar de reescribirlo, y un instalador que convierte un archivo ZIP en un sitio que funciona.
Cómo funciona
Estructura
Los contenidos son nodos tipados con campos dinámicos: no hay una tabla por tipo de contenido, y añadir uno es configuración, no código. Alrededor hay enrutamiento declarativo en XML, plantillas con marcadores y bloques, y un panel con tablas y formularios generados a partir de la base de datos.
Flujo de uso
Se descomprime el ZIP en la carpeta del sitio y se abre el navegador. Un asistente de diez pasos comprueba los requisitos, crea la base de datos, prueba el envío de correo, recoge los datos de la empresa y deja un sitio multilingüe ya poblado, con páginas legales, robots.txt y reglas de Apache ligadas al dominio real.
Decisiones técnicas
Correcciones conservadoras en lugar de reescrituras, sobre un código sin tests: conversiones de tipo y comprobaciones, y un lint después de cada cambio masivo. El instalador es independiente del framework, porque tiene que funcionar cuando el CMS todavía no arranca. Un error fatal se convierte en una página 500 con un código para buscar en los registros, nunca en archivo y línea en pantalla.
Límites conocidos
Es un motor con casi veinte años de historia: convive con algunas clases duplicadas del framework y con partes heredadas que se han dejado inertes. La nueva área de gestión de contenidos sigue en desarrollo, y falta completar la validación en alojamientos distintos del mío.
Números
| Archivos PHP en el punto de partida, aprox. | 14.400 |
|---|---|
| Archivos corregidos en la migración a PHP 8 | 913 |
| Tablas en el esquema | 218 |
| Pasos del asistente de instalación | 10 |
| Integraciones de terceros configurables | 31 |
| Idiomas en el paquete base | 4 |
Stack
- PHP 8
- MySQL / MariaDB
- Apache
- SCSS
- JavaScript
- Linux
JoeCMS deriva de VGallery (GPL-3) de Alessandro Stucchi.