Overrides en PrestaShop: los grandes desconocidos
Si has accedido a la estructura de archivos de PrestaShop alguna vez, habrás visto una carpeta llamada “override”.
Esta carpeta lleva en nuestro PrestaShop desde la Mesopotamia antigua (PrestaShop 1.4) pero ¿sabemos qué son los overrides y cómo funcionan?
Un override (anular, invalidar) básicamente permite “reescribir” el funcionamiento de una clase de PrestaShop. Lo explicaremos mejor con un ejemplo:
Supongamos que queremos hacer que al desactivar un producto, su stock se quede a cero.
Pues podemos hacer un override de la parte de PrestaShop que se encarga de cambiar el estado de un producto y hacer que a parte de cambiar su estado, cambie también el stock.
Simplemente tenemos que crear un fichero con el mismo nombre de la clase a sobreescribir en el mismo directorio que está el original. En nuestro ejemplo:
Tenemos la clase original en: /classes/Product.php
El override estará en: /override/classes/Product.php
El resto ya está en la imaginación de cada uno.
Se pueden hacer overrides de clases, controladores y a partir de la versión 1.6.0.11, de los propios módulos.
En resumen, los overrides sirven para añadir funcionalidades o editar las mismas de una parte de PrestaShop.
Muchos módulos de terceros traen overrides para poder realizar correctamente sus funciones.
¿Por qué overrides en vez de editar directamente los archivos de PrestaShop?
La respuesta es simple: Compatibilidad y escalabilidad.
De esta manera mantenemos la parte del núcleo de PrestaShop intacta, y todas las modificaciones en la carpeta override.
Además, al actualizar PrestaShop, se perderían las modificaciones si estuvieran hechas sobre el propio núcleo.
¿Pueden dos módulos hacer un override sobre la misma clase?
Sí, pero no el mismo método.
Dos módulos pueden instalar un override de Product.php pero todo irá bien solo si no sobreescriben el mismo método. En este caso, PrestaShop dará un error:
Incapaz de instalar con control manual : El método XXX en el grupo YYY ya está en control manual.
Para poder instalar este segundo módulo, serán necesarios conocimientos avanzados de programación.
Tengo el override en su sitio pero no se aplica ¿Por qué?
Si tenemos PrestaShop 1.6 tendremos que ir a Parámetros Avanzados > Rendimiento y comprobar que la opción “Inhabilitar las sobre-cargas” esté desactivada, es decir, que no las esté inhabilitando.
Si este paso está correcto y el override sigue sin realizar su función, debemos desatar nuestra furia en el fichero class_index.php
Este fichero lo podemos encontrar en /cache/class_index.php y se encarga de almacenar qué clase tiene override y cuál no. Con borrar el fichero class_index.php bastaría para que se generase uno nuevo al recargar la página en el navegador.
NOTA: Si usas PrestaShop 1.6.0.9, seguramente no se generará el fichero debido a un bug de esta versión.
Si lo deseas, puedes contactar con nosotros para que te ofrezcamos una solución. Para ello tienes que escribir un ticket accediendo a tu espacio personal en AlabazWeb dentro del apartado “Enviar un ticket”.
Después de todo esto, ya sabemos qué son esos ficheros misteriosos que se meten en nuestro PrestaShop y lo modifican según nuestras necesidades.
Espero que os haya servido de ayuda,
Un saludo.
Escribe un comentario