Overrides en PrestaShop: qué son y qué pasa si dos módulos chocan
Un override modifica cómo funciona PrestaShop por dentro. Te explicamos de forma sencilla cómo actúan y qué hacer cuando dos módulos intentan cambiar lo mismo.
Un override es una pieza de código que sustituye el comportamiento original de PrestaShop por otro distinto sin tocar los archivos originales del núcleo. Sirve para que un módulo pueda alterar funciones profundas de la tienda, pero también es el origen habitual de fallos graves cuando dos módulos intentan modificar exactamente lo mismo.
En el día a día de una tienda online, la palabra suele aparecer cuando algo se rompe: una pantalla blanca tras pulsar el botón de compra, un módulo que no se instala o un aviso técnico que habla de métodos duplicados. Para entender por qué ocurre, conviene ver primero cómo interactúa un módulo normal con la tienda.
La diferencia entre usar un enganche y cambiar una pieza del motor
Para entender qué hace un override en PrestaShop, imagina que compras un accesorio para el coche, como un soporte para el móvil con cargador. Lo normal es conectarlo a la toma de corriente del salpicadero: el coche ya viene preparado con ese conector, enchufas el cable y todo funciona sin alterar la mecánica. En PrestaShop, esos enchufes preparados se llaman hooks.
Un hook es un punto concreto donde el sistema permite que los módulos muestren información o reaccionen a eventos. Por ejemplo, displayHome permite enseñar cosas en la portada, displayProductAdditionalInfo añade elementos junto al botón de compra en la ficha de producto, y actionValidateOrder avisa cuando entra un pedido nuevo. Varios módulos pueden conectarse al mismo hook de forma ordenada desde el panel, en Diseño > Posiciones.
Un override no se conecta a un enchufe: levanta el capó y cambia una pieza interna del motor. Si un módulo necesita alterar cómo se calcula el precio final dentro del carrito o cómo se procesan las direcciones de la web, y PrestaShop no tiene un hook justo en ese paso exacto, el desarrollador recurre a un override para reescribir esa parte del núcleo.
| Característica | Módulo mediante hooks | Módulo mediante overrides |
|---|---|---|
| Punto de acción | Se conecta a lugares previstos por PrestaShop | Sustituye código del núcleo (clases o controladores) |
| Convivencia | Varios módulos comparten el mismo hook sin problemas | Si dos módulos tocan el mismo método, hay conflicto |
| Desinstalación | Limpia y directa al borrar el módulo | Requiere comprobar que el archivo modificado se retira bien |
| Actualizaciones | No suele interferir con cambios de versión menores | Puede quedarse desactualizado si el núcleo cambia |
Dónde se guardan: la carpeta override en PrestaShop
Cuando descargas PrestaShop, verás una estructura limpia con carpetas como /classes/ o /controllers/, que contienen la lógica interna de la plataforma. Justo al lado existe la carpeta /override/, organizada con la misma estructura interna.
Cuando instalas un módulo que necesita modificar el funcionamiento base, el instalador copia automáticamente un archivo PHP dentro de la carpeta override en PrestaShop. A partir de ese instante, cada vez que la tienda necesita ejecutar esa tarea, comprueba primero si existe una versión propia en esa carpeta. Si existe, ignora el código original del núcleo y ejecuta el override.
El problema no es que exista esta función, ya que permite adaptar tiendas muy complejas sin modificar los archivos de serie de PrestaShop. El problema surge cuando instalas un segundo módulo que también necesita meter mano en esa misma función.
Qué ocurre cuando dos módulos entran en conflicto
Imagina que tienes un módulo para aplicar descuentos avanzados según el código postal del cliente. Para funcionar, ese módulo necesita alterar el cálculo de importes dentro de la clase que gestiona el carrito. Instala su override y todo funciona bien.
Más adelante, instalas otro módulo para gestionar regalos automáticos o recuperar carritos en PrestaShop con condiciones especiales. Este segundo módulo también necesita cambiar el cálculo de importes dentro de la misma clase del carrito. En ese momento se produce un conflicto de módulos en PrestaShop.
PrestaShop no puede ejecutar dos instrucciones contradictorias para la misma tarea al mismo tiempo. Cuando esto ocurre, suele pasar una de estas tres cosas:
- Error durante la instalación: El gestor de módulos detecta que el método ya está modificado por otro archivo y detiene la instalación con un aviso de error.
- Fallo de funcionamiento en uno de los dos: El segundo módulo sobreescribe el archivo del primero, haciendo que el primero deje de funcionar sin que te des cuenta de inmediato.
- Error 500 o pantalla en blanco: Si el sistema intenta combinar ambos trozos de código de forma automática y las llamadas son incompatibles, la tienda se interrumpe por completo y deja de cargar.
En nuestra tienda de Joyería HAGO, donde usamos PrestaShop 8 y tenemos muchas funciones hechas a medida, nos ha tocado lidiar con esto en varias ocasiones. Tuvimos overrides compartidos en la clase encargada del carrito y en el despachador de URLs. En esos casos no hay atajos automáticos: tuvimos que abrir los archivos y fusionar el código a mano para que ambas necesidades convivieran sin pisarse.
El problema oculto de las actualizaciones
Hay un detalle técnico que despista a muchos comerciantes: PrestaShop copia los overrides del módulo únicamente en el momento en que se pulsa Instalar. Si más adelante el desarrollador del módulo lanza una actualización que corrige un fallo en ese override, la actualización normal del módulo no siempre sustituye el archivo que ya estaba copiado en /override/.
Esto provoca situaciones muy confusas en las que actualizas un módulo, el panel indica que la versión es la nueva, pero el error antiguo sigue ocurriendo porque la tienda continúa ejecutando el archivo viejo que se quedó guardado en la carpeta de overrides. Cuando se actualiza un módulo de este tipo, siempre conviene revisar por FTP si el archivo de la carpeta /override/ ha cambiado o si necesita actualizarse manualmente.
Además, cada vez que se añade, modifica o borra un archivo en esa zona, es obligatorio limpiar la caché. PrestaShop guarda un archivo temporal con el índice de todas las clases disponibles. Si modificas un archivo a mano y no vacías la caché desde Parámetros avanzados > Rendimiento, la tienda seguirá buscando las funciones en las líneas antiguas y dará fallos intermitentes.
Qué hacer si la tienda falla tras instalar un módulo
Si acabas de instalar o actualizar un módulo y la tienda se queda en blanco o muestra un error 500, no intentes adivinar qué ha pasado. Sigue estos pasos para recuperar el control:
1. Activa el modo depuración
Ve a Parámetros avanzados > Rendimiento y busca la opción de modo depuración. Al activarla, la pantalla blanca se sustituye por un informe detallado con las rutas exactas de los archivos que han fallado. Si el fallo viene de un override, el mensaje indicará claramente la ruta dentro de /override/classes/ o /override/controllers/, mostrándote qué archivo y qué método han provocado el bloqueo.
2. Desactiva el módulo por FTP si no puedes entrar al panel
Si el error te impide acceder al panel de administración de PrestaShop, entra a los archivos de tu servidor mediante FTP o el gestor de archivos de tu hosting. Ve a la carpeta /modules/ y cambia el nombre de la carpeta del módulo conflictivo (por ejemplo, añadiendo un guion bajo al principio). PrestaShop dejará de cargarlo al instante y podrás volver a entrar al panel para revisar la situación.
3. Borra la caché de la tienda
Una vez resuelto el conflicto o retirado el archivo problemático, ve a Parámetros avanzados > Rendimiento y pulsa el botón de borrar caché. Esto reconstruye el índice interno de clases y asegura que PrestaShop vuelva a leer los archivos limpios del núcleo.
Lo que recomendamos hacer antes de tocar nada
Los overrides son una herramienta técnica válida, pero añaden fragilidad al mantenimiento de la tienda. Si estás buscando módulos para añadir funciones a tu catálogo o mejorar el proceso de compra, ten en cuenta estas precauciones:
- Prioriza siempre módulos que usen hooks: Un módulo basado exclusivamente en hooks es más fácil de instalar, actualizar o desinstalar. En la tienda de Joyería HAGO intentamos siempre que nuestros desarrollos utilicen enganches del sistema para no tocar el núcleo si no es imprescindible. Si notas caídas de velocidad tras añadir extensiones, conviene comprobar qué módulo hace que PrestaShop vaya lento mediante las herramientas de análisis del propio sistema.
- Haz copia de seguridad completa: Antes de pulsar el botón de subir módulo, asegúrate de tener una copia reciente tanto de la base de datos como de los ficheros del servidor.
- Utiliza un entorno de pruebas: Nunca pruebes un módulo desconocido directamente en tu tienda abierta al público. Lo más seguro es montar una réplica de tu tienda en un subdominio cerrado para comprobar si el nuevo módulo choca con los que ya tienes instalados.
Saber si un módulo lleva overrides es tan sencillo como descomprimir el archivo ZIP en tu ordenador antes de subirlo a la tienda. Si dentro ves una carpeta llamada override, ya sabes que ese módulo va a alterar piezas internas del sistema y que debes instalarlo con especial atención.