Volver al portfolio
Mesogeiako — Centro de Formación Profesional y CMS a Medida

Mesogeiako — Centro de Formación Profesional y CMS a Medida

Mesogeiako es un centro acreditado de aprendizaje permanente y formación profesional en Salónica, y su web había crecido sobre WordPress y el maquetador de BeTheme. La reconstrucción conserva todo el contenido y nada de la plataforma. Es PHP 8.5 puro sobre MySQL — un controlador frontal, un autoloader de quince líneas, sin framework, sin Composer y sin paso de build — unas cinco mil líneas de código y dos mil de plantillas. El griego es el idioma por defecto y el inglés vive bajo /en/, y la paridad es estructural, no añadida: cada proyecto, noticia y página es una fila con una fila de traducción por idioma, los slugs pertenecen a la traducción para que las páginas griegas conserven URL derivadas del griego, y un tercer idioma no exigiría ningún cambio de esquema. La migración es código, no una exportación puntual. Veintiún pasos ordenados y repetibles reconstruyen el sitio entero desde el origen WordPress — leen el contenido del Muffin Builder, eliminan textos repetitivos, normalizan los encabezados, fusionan noticias duplicadas y extraen a archivos las imágenes incrustadas como data-URI — y trasladan 33 proyectos, 90 noticias y 20 páginas en ambos idiomas, con 798 redirecciones para que los enlaces antiguos lleguen a sus páginas nuevas. Cada imagen de la biblioteca es un WebP de menos de 200 KB: la calidad baja de 82 a 40, después las dimensiones se reducen hasta que cabe, y el original se descarta. El panel da al centro sus proyectos, noticias y páginas en ambos idiomas con TinyMCE, una biblioteca de medios, los datos de contacto, y los contadores y bloques de la portada. Los datos estructurados incluyen la dirección postal, el número de registro mercantil y el horario — tres datos que la web antigua publicaba en un widget del pie de página del tema, donde ninguna entrada ni ningún importador podía verlos.

Tecnologías

PHP 8.5 MySQL Vanilla JS GSAP TinyMCE 7 WebP pipeline (GD) i18n (EL/EN) SEO WordPress migration

Retos

WordPress había escondido algunos datos. La dirección postal, el número de registro mercantil y el horario estaban en un widget del pie de página del tema y no en ninguna entrada, así que una exportación de contenido nunca los veía, y el segundo teléfono se contradecía en tres lugares de la web antigua. Las URL griegas rompían además el diseño obvio de la base de datos: codificadas con porcentajes, superan a menudo los 191 caracteres compartiendo prefijos largos, de modo que un índice de prefijo rechaza como duplicadas direcciones realmente distintas. Y un editor bilingüe tiene un modo de fallo silencioso: un guardado que omite un idioma es indistinguible de alguien que lo vacía a propósito.

Soluciones

Cada corrección es su propio paso de migración numerado, de modo que una reconstrucción desde cero a partir de WordPress reproduce el teléfono confirmado por el cliente y la dirección recuperada en lugar de volver a importar los errores antiguos. Las redirecciones son únicas sobre un hash SHA-256 de la ruta antigua, no sobre un prefijo. Cada segmento de archivo solo se resuelve en su propio idioma, para que un elemento no viva en dos URL repartiendo su propio posicionamiento. Cada formulario de traducción envía un marcador de presencia por idioma — es lo que permite que un idioma ausente signifique «sin cambios» y no «borrar» —, y la batería de pruebas del panel incluye una prueba de regresión para ello. Los nombres de archivo se normalizan a NFC antes de la transliteración, porque macOS y Linux guardan el mismo nombre griego con bytes distintos.