Como sobreescribir y personalizar un módulo en Prestashop
Todos queremos algo personal, con una función específica, que todos los módulos, por muy perfectos que sean, siempre acabamos echando en falta. Aun así, hay un método que existe para que podamos seguir teniendo actualizaciones y mejoras de ese modulo pero a la vez cumplan con la función que nosotros queremos.
En prestashop, utilizamos una carpeta llamada OVERRIDE para sobreescribir código de Prestashop y rehacerlo a nuestro gusto y antojo.
Si queremos modificar una clase de Prestashop, como por ejemplo, la clase Product, o la clase Cart, pues debemos hacerlo siempre dentro de esa carpeta y no tocar nunca la funcionalidad BASE de Prestashop.
Ocurre lo mismo con los controladores de Prestashop, si queremos que el controlador funciona de una forma personalizada, tendremos que sobreescribir el código del controlador BASE en la carpeta OVERRIDE.
Pues para los módulos nos pasa lo mismo, tal vez vayamos a comprar un modulo que funciona de una determinada manera, y queremos darle alguna funcionalidad extra desarrollada por nosotros. De igual forma que sobreescribimos el código de una clase o un controlador, debemos hacerlo con los módulos.
A continuación os cuento como.
Modificar la Funcionalidad de un modulo de PHP
Supongamos que queremos sobreescribir el módulo de «mailalerts» para que cuando un cliente se agregue a la alerta de stock de un producto a nosotros nos mande un correo.
- Creamos una carpeta dentro de /override/modules llamada «mailalerts»
- Localizamos el lugar donde hay que hacer la modificación, en este caso es el lugar donde mailalerts añade al usuario el producto favorito. Esto está localizado en:
modules/mailalerts/controllers/front/actions.php en la función processAdd(). - Creamos dicho fichero en OVERRIDE:
override/modules/mailalerts/controllers/front/actions.php - La clase que queremos sobreescribir vemos que se llama «MailalertsActionsModuleFrontController» y extiende de «ModuleFrontController», en este caso a nuestra clase hay que llamarle:
MailalertsActionsModuleFrontController + Override, y extender de MailalertsActionsModuleFrontController.
Nos quedaría así:
class MailalertsActionsModuleFrontControllerOverride extends MailalertsActionsModuleFrontController - Ahora ya podemos añadir el método processAdd() y hacer nuestra funcionalidad.
Siempre que añadamos cualquier fichero de override teneis que borrar el fichero classes.php ubicado en /cache/classes.php, este se generará automáticamente.
Modificar la funcionalidad de un modulo del tpl, css y js
Si queremos modificar los TPL, JS y CSS de un modulo hay que hacerlo desde el template.
Para los TPL
/themes/vuestroTheme/modules/
Para los JS
/themes/vuestroTheme/js/modules/[nombre del modulo]
Para los CSS
/themes/vuestroTheme/css/modules/[nombre del css]
Nota: Para permitir al Dispatcher, poder buscar un controlador de un modulo, hay que sobreescribir el Dispacher de prestashop añadiendo las siguientes lineas:
if (file_exists(_PS_OVERRIDE_DIR_ . 'modules/' . $module_name . '/controllers/front/' . $this->controller . '.php')) { include_once(_PS_OVERRIDE_DIR_ . 'modules/' . $module_name . '/controllers/front/' . $this->controller . '.php'); $controller_class = $module_name . $this->controller . 'ModuleFrontControllerOverride'; } else { $controller_class = $module_name . $this->controller . 'ModuleFrontController'; }
Es un poco complicado, pero si necesitáis que os eche un cable, no dudéis en contactar.