← Ecosistema

JoeCMS

cms.giorgiopalermo.com próximamente

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
Captura de JoeCMS

JoeCMS deriva de VGallery (GPL-3) de Alessandro Stucchi.