Override en Prestashop 1.6

En esta entrada quiero detallar qué es eso de “override” y que pasos hay que seguir para hacerlo.

¿Qué es override?

Es el sistema que tiene Prestashop para proteger aquellos archivos considerados “importantes”, tales como una clase, un controlador, etc. Los archivos .php que se encuentran en las carpetas como controllers o classes son de los que más “override” se suele hacer. ¿Por qué? Pues por un simple motivo. Si añades o modificas alguna función en el fichero original y se te ocurre actualizar Prestashop… ¡adiós! Todos los cambios que hayas realizado en ese archivo se borrarán.

¿Cómo hacer override?

Si queremos modificar algún controller o class, Prestashop pone a nuestra disposición una carpeta dentro del directorio raíz llamada “override”, dentro tendrá subcarpetas, como por ejemplo, “classes”. Debemos hacer override en la carpeta que corresponda.

Para que se entienda esto, vamos con un ejemplo práctico, quiero modificar la función getProducts de la clase Cart.php. ¿Qué debo hacer?

Primeramente nos situaríamos en classes/Cart.php y copiaríamos el archivo en la carpeta override/classes/Cart.php.

Una vez copiado, modificamos el archivo de la carpeta override. En el caso de modificar alguna función existente en el archivo original se debe dejar únicamente la función a modificar. Por ejemplo, en el caso que nos atañe dejaríamos únicamente en el archivo Cart.php de la carpeta override la función getProducts.

También debemos hacer que nuestra nueva clase (en la carpeta override) extienda de la clase original (en la carpeta classes). Para entender los cambios os voy a mostrar el archivo en la carpeta original y el archivo en la carpeta override:

Archivo original:

  1. class CartCore extends ObjectModel
  2. {
  3.     //Aquí todas las funciones originales
  4. }

Archivo en la carpeta override:

  1. class Cart extends CartCore
  2. {
  3.     public function getProducts($refresh = false, $id_product = false, $id_country = null)
  4.     {
  5.         //Aquí tu funcion getProducts con tu modificación
  6.     }
  7. }

Como veis, en el archivo original se indica lo siguiente: “class CartCore extends ObjectModel” pero al hacer override, lo que tenemos que hacer, es que nuestra nueva clase en override herede de la CartCore, y lo haremos de la siguiente forma: “class Cart extends CartCore”.

Por lo tanto, sólo debemos tener en cuenta dos cosas:

  1. Cambiar de quién hereda la clase.
  2. En la clase Cart.php de override únicamente se deben indicar las nuevas funciones o funciones ya existentes en el archivo original (classes/Cart.php) pero que tienen modificaciones.

Último paso: Borrar la caché

Una vez finalizada la nueva clase Cart.php debemos borrar la cache para ver los cambios. Para ello únicamente debemos ir a la carpeta cache (dentro del directorio raíz) y borrar el archivo class_index.php.

Más info en la documentación oficial de Prestashop