Nuevo en Prestashop 1.4: Cómo funciona el Override

Prestashop, una de las herramientas para crear tiendas online más utilizadas en la actualidad (quizás la más utilizada junto a Magento, al menos en Europa), presenta en su nueva versión 1.4 una gran cantidad de mejoras sobre sus versiones anteriores que intentaremos ir recogiendo en este blog, pero una mejora que nos va a hacer la vida mucho más facil a los que creamos nuevos temas para Prestashop es el “override” (sustitución) de los archivos que vamos a modificar fuera de nuestro tema. Pero ¿qué significa “override“?

El significado de Override

Hasta ahora si queríamos modificar un archivo fuera de nuestro tema necesitábamos editar el archivo original. Esto suponía un gran problema cada vez que había que actualizar la versión de Prestashop. Si habías modificado una gran cantidad de archivos y no lo habías documentado bien el problema que se presentaba al actualizar a una nueva versión era importante, hasta tal punto que hay muchas tiendas online que se han quedado en versiones antiguas de Prestashop y que no se atreven a actualizar su tienda online a nuevas versiones, con el problema que eso supone no sólo desde el punto de vista funcional sino también de seguridad.

El override significa que no hace falta modificar el archivo original. Prestashop nos propone una carpeta alternativa donde podemos grabar la nueva versión del archivo modificado, dejando intacto el original. Prestashop entonces buscará primero en esa carpeta el archivo en cuestión, y si no lo encuentra usará el original.

Esto ya lo usaban la práctica totalidad de herramientas para crear tiendas online, y era una carencia grave de Prestashop que ahora queda de alguna manera solucionada (aunque no de manera completa, como luego veremos).

¿Para qué archivos podemos usar override?

Los archivos para los cuales vamos a poder crear una versión alternativa son:

Classes y Controllers: Aquí está la “lógica” de Prestashop, las clases y controladores que dan el funcionamiento lógico de nuestra tienda online. Veréis que cada uno tiene su carpeta en el directorio raíz: “classes” y “controllers“.

Veréis también que hay una carpeta en el directorio raiz que se llama”override” que tiene en su interior dos subcarpetas llamadas igualmente “classes” y “controllers“.

Vamos a suponer que cambiamos algo en la clase Address.php. Antes teníamos que cambiar el archivo original. Ahora grabamos la nueva versión dentro de override/classes

Override en Prestashop: Clases

Prestashop buscará primero el archivo Address.php en “override/classes” para ver las modificaciones introducidas.

Tened en cuenta que para realizar el “override” de un controlador o de una clase necesitaréis “extender” el original (los que sepáis de PHP por objetos no tendréis problema). Es decir, no hay que copiar el archivo entero en la nueva versión, simplemente incluimos los métodos y propiedades de la clase padre, la extendemos e incluimos lo nuevo que queramos incluir. Por ejemplo, si queremos hacer una modificación en el controllador categorycontroller.php:

Podéis ver esto más en detalle en este post del foro de Prestashop.

Módulos: Otra parte importante del funcionamiento de nuestra tienda online creada con Prestashop son los módulos. Como veréis en el tema que viene por defecto en Prestashop 1.4 ahora los archivos de estilo (CSS) de los módulos están dentro de nuestro tema, lo cual tiene bastante sentido. Dentro de la carpeta “css” veréis una carpeta que se llama “modulos” donde están uno a uno todos los módulos representados. Cuando tengas un nuevo módulo puedes traer aquí su archivo .css creando una carpeta que llamaréis igual que la del propio módulo dentro de la carpeta modules.

Igualmente podemos sobreescribir cualquier archivo .tpl de un módulo. Normalmente los archivos .tpl tienen código html y usa variables (al usar smarty están entre corchetes) y php. Normalmente es la parte “presentacional”, no lógica, del módulo. ¿Como lo sobreescribimos? Primero creamos en nuestro tema una carpeta que se llame “modules”. Luego, dentro de esta, creamos una subcarpeta con el mismo nombre que la carpeta original del módulo. Dentro de esa subcarpeta grabamos en archivo .tpl nuevo.

Por ejemplo, si quiero cambiar el archivo blocksearch-top.tpl, guardo la nueva versión en la nueva carpeta que he creado, donde Prestashop la buscará antes de ir a la carpeta original del módulo. De esta manera el archivo original queda intacto.

Override de los módulos en Prestashop

Como veis Prestashop incluye también cambios que hagamos en la traducción del módulo.

Aquí veo una limitación y es que no se puede hacer un “override” de los archivos .php de los temas, con lo que en ese aspecto estamos igual que siempre….

4 comentarios en “Nuevo en Prestashop 1.4: Cómo funciona el Override

  1. Bufff, muchas gracias por explicar el asunto del Override….llevaba 2 días volviendome loco intentando cambiar archivos tpl y css y los cambios que realizaba no hacían ningún efecto…y no entendía nada hasta que he encontrado tu explicación…

  2. Hola Juan:

    Lo que intento es introducir código HTML o script en el Header o en el Footer para la portada de la web.

    Ahora bien, en que carpeta están los ficheros anteriores, y sin son .PHP o .TPL.

    he modificado ya varios, en la carpeta /themes/prestashop, en la raiz de la instalacion de prestashop, etc y en ninguno me hace cambios.

    Espero tu respuesta, agredeciendo de antemano la misma y el tiempo que le dedicas a los que no estamos muy puestos en estos temas.

    Mi versión es 1.4.4.0

  3. Gran articulo muchas gracias por compartirlo, de verdad q esta muy bien el tema del override; y como a ti la mayor limitación es la de como hacer el override de los archivos .php de los temas.
    Saludos

Deja un comentario

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

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">