Prestashop: Como modificar clases y controladores

Uno de los errores más comunes cuando se empieza a trabajar con cualquier herramienta de software libre a nivel de desarrollo es la modificación del kernel / core / núcleo o como lo queramos llamar. Al tocarlo perdemos la posibilidad de realizar actualizaciones y por tanto perdemos una gran ventaja de este tipo de software, ya que si actualizáramos perderíamos todos nuestros cambios.
Pero no es necesario tocar el núcleo de las aplicaciones, con cualquiera de ellas tenemos la posibilidad de realizar extensiones de clases y controladores que nos permitan modificaciones. En este caso veremos como realizar este tipo de cambios en prestashop.

Prestashop cuenta con un directorio override que nos permite realizar extensiones de clases y controladores. Veamos un ejemplo práctico muy sencillo para hacernos una idea de lo que implica: Queremos saber si es el cumpleaños del cliente para felicitarlo en la página de mi cuenta (my-account) Para conseguir el dato necesitamos crear una función extra en la clase Customer.php que nos calcule si es el cumpleaños del cliente y nmodificar el controlador de Mi cuenta (MyAccountController.php) para mostrarlo.
La clase, creamos el archivo /override/classes/Customer.php que extiende la clase padre con la nueva función (importante definir la función como “static”:

  1. <?php
  2. class Customer extends CustomerCore
  3. {
  4.     public static function isBirthday($id_customer){
  5.     //Función que nos devuelve booleano para informar si es el cumpleaños o no del cliente
  6.     }
  7. }
  8. ?>

Siguiente paso, el controlador, creamos el archivo /override/controllers/MyAccountController.php. Importante, reescribimos la función process, si no queremos perder el original debemos llamar al parent::process() :

  1. <?php
  2. class MyAccountController extends MyAccountControllerCore
  3. {
  4. public function process()
  5.     {
  6.         parent::process();
  7.        
  8.         $customerBirthday = Customer::isBirthday((int)(self::$cookie->id_customer));
  9.         self::$smarty->assign('isBirthday',$customerBirthday );
  10.        
  11.     }
  12. }
  13. ?>

Ya solo nos quedaría modificar el tpl para tener lista la modificación.

Un caso especial son las clases del admin que se encuentran en /admin/tabs (útil cuando necesitas añadir campos en una clase por ejemplo) La única forma que he encontrado es reescribir la clase completamente, metiendo la nueva clase en un módulo y cambiando la definición en “Empleados” / “Pestañas”, en la ficha nos permite definir el nombre de la clase y el módulo donde se encuentra (si lo dejamos en blanco lo cogerá del directorio /admin/tabs):
Pestañas en prestashop

nota: En la versión 1.5 el directorio override es algo más complejo pero el funcionamiento es similar, de hecho permite también modificar clases de módulos.

La documentación la podemos encontrar en:

Autor: Juan Castells

Compártelo!!


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *