Limpieza HTML de las descripciones de productos y categorías
Instalar y usar el módulo dfhtmlcleaner: simular, ajustar las 24 reglas, limpiar por lotes y restaurar una ejecución.
Instalación
- Descargue el archivo
dfhtmlcleaner.zipdesde su cuenta de cliente DataFirefly. - En el back office, abra Módulos → Gestor de módulos, haga clic en Subir un módulo y suelte el archivo.
- Una vez instalado, aparece una pestaña HTML Cleaner bajo el menú Catálogo.
La instalación crea la tabla ps_dfhtmlcleaner_backup, que almacena los valores sustituidos. Se elimina al desinstalar.
Haga una copia de seguridad de su base de datos antes de la primera limpieza real. El módulo conserva los valores sobrescritos y sabe restaurarlos, pero una copia completa sigue siendo la red de seguridad de referencia.
Requisitos
- PrestaShop 8.0 a 9.x
- PHP 7.4 a 8.3
- Extensiones PHP
domymbstringactivadas
Primera pasada: simular antes de escribir
Abra Catálogo → HTML Cleaner. El panel Lanzar una limpieza está en la parte superior de la página.
- Marque los contenidos a procesar. Productos y Categorías vienen marcados; puede añadir páginas CMS, marcas y proveedores.
- Elija un idioma o deje Todos los idiomas. En multitienda aparece además un selector de tienda.
- Haga clic en Simular. No se escribe nada en la base de datos.
Al terminar el recorrido obtiene tres datos: cuántos registros se han analizado, cuántos modificaría la limpieza y el peso total ahorrado. Debajo se muestran hasta diez comparaciones antes/después una al lado de la otra, cada una con un enlace directo a la ficha.
Si el número de fichas afectadas le sorprende, abra dos o tres ejemplos y compruebe el resultado antes de seguir. Para eso está este modo.
Limpiar de verdad
Cuando la simulación le convenza, haga clic en Limpiar realmente y confirme. Se repite el mismo recorrido, pero esta vez los valores se escriben.
El procesamiento se hace por lotes sucesivos en AJAX. Una barra de progreso indica el avance, un registro enumera los lotes procesados y el botón Detener interrumpe limpiamente al final del lote en curso. Deje la pestaña abierta mientras se ejecuta.
Tamaño de lote
Por defecto se procesan 50 registros por petición. En alojamiento compartido lento, baje a 10 o 20 en los ajustes generales. En un servidor dedicado puede subir hasta 500.
Las reglas en detalle
Las reglas están agrupadas en cuatro familias más abajo en la página. Cualquier cambio guardado se aplica de inmediato, también en la zona de pruebas.
Marcado antiguo e inseguro
- Código de Microsoft Word / Office: comentarios condicionales, islas XML, etiquetas
<o:p>,<w:WordDocument>,<v:shape>y atributosmso-*. - Comentarios HTML.
- Elementos script, style, object y form. Los gestores de eventos como
onclickse eliminan en todos los casos, sea cual sea esta opción. - Iframes. Tres modos: conservarlo todo, conservar solo los proveedores de confianza (por defecto), eliminarlo todo. La lista por defecto cubre YouTube, Vimeo, Dailymotion, Google Maps, SoundCloud, Spotify y OpenStreetMap. Añada sus propios dominios en el campo previsto, uno por línea o separados por comas. La comprobación se hace sobre el dominio real: una dirección del tipo
youtube.com.ejemplo.tldse rechaza.
Atributos
- Estilos inline: Conservar, Filtrar (por defecto) o Eliminar. El modo Filtrar retira
mso-*,font-family,font-size,line-height,colory algunos más, y conserva lo relacionado con la maquetación. - Clases: Conservar, Retirar las clases de editor (por defecto:
MsoNormal,ql-,gmail_,x_,western) o Eliminar. - Atributos id: desactivado por defecto, ya que puede haber anclas internas que dependan de ellos.
- Atributos data-*: desactivado por defecto, algunos temas y módulos los utilizan.
- Atributos de presentación obsoletos:
align,bgcolor,border,cellpadding,face,valign, etc. - Atributos no reconocidos: solo se conserva una lista segura (
href,src,alt,title,colspan…), ampliada con los atributos propios de los medios eniframe,video,audioysource. - width y height en las imágenes. Desactivado por defecto, porque esos atributos reducen el desplazamiento de la maquetación (CLS).
Estructura
- Desenvolver los span sin atributos y, como opción más agresiva, los div sin atributos.
- Desenvolver las etiquetas font.
- Modernizar las etiquetas obsoletas:
bastrong,iaem,centeradiv,strikeas,ttacode. - Eliminar las etiquetas vacías. Las celdas de tabla, las filas y los elementos de estructura quedan excluidos de esta regla para no deformar la maquetación.
- Lista blanca de etiquetas: desactivada por defecto. Activada, toda etiqueta fuera de la lista se desenvuelve y se conserva su contenido de texto.
Tipografía y medios
- Espacios de no separación: las series se reducen a uno solo.
- Saltos de línea consecutivos: tres
<br>o más pasan a dos, y los<br>pegados a un cierre de bloque se retiran. - Espacios e indentación. El contenido de las etiquetas
pre,codeytextareaescapa a esta normalización. - Asegurar los enlaces: se añade
rel="noopener noreferrer"en los enlaces contarget="_blank"y se eliminan las URLjavascript:. - Atributo alt ausente en las imágenes, y
loading="lazy"como opción.
Copias de seguridad y restauración
Mientras la opción Guardar antes de escribir esté activa, cada valor sustituido se copia en la tabla del módulo con un identificador de ejecución. El panel Copias de seguridad y restauración lista las ejecuciones por fecha y tipo de contenido.
El botón Restaurar devuelve a su sitio todos los campos de una ejecución y después elimina las entradas correspondientes. La retención se ajusta en días en los ajustes generales; deje 0 para conservar el histórico indefinidamente. Las entradas caducadas se purgan al abrir la página.
La limpieza automática al guardar no crea entrada de copia de seguridad, a diferencia del procesamiento por lotes.
Limpieza automática al guardar
La opción Limpiar automáticamente al guardar aplica las mismas reglas cada vez que se guarda un producto o una categoría en el back office, mediante los hooks disparados antes de escribir el objeto. Cubre tanto la página de producto v2 como las páginas antiguas.
Está desactivada por defecto. Valide sus reglas en simulación antes de activarla.
Zona de pruebas
El panel Zona de pruebas aplica las reglas vigentes a un fragmento HTML pegado y muestra el resultado junto con el peso ahorrado. No se lee ni se escribe nada en la base de datos. Es la forma más rápida de comprobar el efecto de un ajuste antes de relanzar una simulación completa.
Después de una limpieza importante
- Vacíe la caché de PrestaShop desde Parámetros avanzados → Rendimiento.
- Si la indexación automática de la búsqueda está activa y su índice incluye las descripciones, reconstrúyalo desde Parámetros de la tienda → Búsqueda.
Resolución de problemas
Los botones Simular y Limpiar no responden
Compruebe primero que está en la versión 1.0.1 o superior, después recargue la página con Ctrl+F5 para vaciar la caché del navegador. Si el problema persiste, abra la consola del navegador: un mensaje dfHtmlCleanerAjaxUrl is not defined indica que el archivo JavaScript del módulo no se ha servido, normalmente por una caché de servidor o por permisos de lectura en modules/dfhtmlcleaner/views/js/.
El procesamiento se detiene tras unos lotes
Reduzca el tamaño de lote a 10 o 20 en los ajustes generales y vuelva a lanzarlo. El recorrido empieza de nuevo desde el principio, pero las fichas ya limpias no se modifican: el motor es idempotente, una segunda pasada no produce escrituras inútiles. El registro muestra el código HTTP devuelto cuando falla un lote, lo que permite distinguir un timeout (504) de un error PHP (500) o de un problema de token (403).
Ha desaparecido un vídeo incrustado
Lo más probable es que el proveedor no esté en la lista de dominios de confianza. Añádalo, restaure la ejecución afectada desde el panel Copias de seguridad y vuelva a lanzarlo.
Una tabla ha perdido su formato
Los atributos width, border y cellpadding de las tablas cuentan como atributos de presentación obsoletos. Si su tema no tiene CSS para las tablas, desactive esa regla y restaure la ejecución.
La limpieza no modifica nada
Es el comportamiento esperado en un catálogo ya limpio. Compruebe con la zona de pruebas que un fragmento que sabe problemático sí se transforma, y que las reglas correspondientes están activas.
Desinstalación
Desinstalar desde el gestor de módulos elimina la tabla de copias de seguridad, las entradas de configuración y la pestaña del menú. Las descripciones ya limpiadas no se restablecen: restaure las ejecuciones que le interesen antes de desinstalar si quiere volver atrás.