Icono del sitio Daniel Ruiz

Prestashop: clases, controladores y overrides (i)

Hola clases, hola controladores y hola overrides xD

Un tiempo después (y gracias a los comentarios de ánimo) me decido a revisar y publicar este post que lo tenía en el tintero. El anterior post. Vamos a hablar sobre las clases, los controladores y, finalmente, los overrides (o sobrecargas) para modificar el comportamiento por defecto de este gestor.

Hoy hablaremos un poquitín (porque este tema es central en el desarollo de módulos y temas en PS y da para muchos artículos) sobre las clases, los controladores, las llamadas funciones hooks y el sistema de override que tiene PS.

Las clases

Las clases en PS, son como las clases en cualquier otro ámbito de la programación, describen un parte del sistema que se quiere modelar.  Estas clases están en los ficheros que encontrarás en la carpeta classes de la raiz de tu Prestashop. Por ejemplo, tenemos la class CartCategoryCMS, Product ¿os suenan estos conceptos a verlos «por la tienda»?

Cada una de ellas extienden la clase genérica ObjectModel y tienen los parámetros básicos/iniciales de dicha entidad de PS, así como las funciones CRUD (entre otras específicas según sea el caso) para su manejo en la base de datos. Como estaréis suponiendo pueden ser modificadas según las necesidades… ¿te imaginas poder tener un campo twitter y facebook en tus «productos» (que son virtuales y «personas» para que le sean contratadas unos servicios)?

Los controladores

Estos son clases que responden a la ejecución de las distintas partes de Prestashop. Es decir, reciben datos de la bd o de la vista, los transforman y validan, y preparan la siguiente vista a mostrar al usuario. Como digo también son clases, programáticamente hablando, pero no son las «clases» que prestashop llama classes.

Estas son las capas de Prestashop:

  1. 1.- las classes que modelan los datos y los agrupan en definiciones naturales de tu tienda,
  2. 2.- a continuación, como hemos explicado antes, los controladores que instancian las classes y las «envían» para la vista
  3. 3.- y por último, nuestra plantilla escrita con smarty que escribe el html final

Estos se encuentran en la carpeta controllers. Existen los de la parte administrativa de nuestra tienda (backend, carpeta admin) y la parte pública (carpeta front). Tenemos el controlador de la home (IndexController), el de la ficha de producto (ProductController), mi cuenta (MyAccountController), historial de pedidos (HistoryController) y muchos más. Echadle un vistazo y os iréis enterando de lo que hablo.

Overrides

¿Y dónde entran los overrides o «sobrecargas» en PS? ¿cómo podemos modificar el funcionamiento (añadiendo o ampliando una funcionalidad) de forma segura en nuestra tienda?

Digo de forma segura, porque ahí está el quid de la cuestión: los desarrolladores de PS han ideado esta manera de poder modificar el comportamiento original «sin miedo» a las actualizaciones del core… (ojo, el core, no me meto con los módulos :)).

Los overrides se «declaran» creando ficheros dentro de la carpeta override de tu raíz. Los hay de tres clases: de módulos, de clases y de controladores xD ¿fácil no?

Sobre los controladores, podemos modificar tanto los de la parte pública de tu tienda como la del administrador para, por ejemplo, añadir dos nuevas columna a la lista de productos y que corresponde a los campos twitter y facebook de nuestra anterior modificación de la entidad Producto.

A partir de aquí viene lo difícil y es juzgar qué es lo que queremos hacer en nuestra tienda y qué partes de PS debemos tocar para conseguir ese objetivo. Prestashop tiene muy poquita documentación en general y no es fácil/trivial»tocarlo» por ello yo recomiendo no tener miedo a abrir y leer las clases y controladores del core para ver si son esas las que estamos buscando para nuestras intenciones. En mi experiencia con este ¿framework? (no es estrictamente un framework pero…) he aprendido más depurando el código del core que leyendo o pidiendo ayuda por foros…

La cosa es así: ¿qué pantalla quiero modificar? ¿lo que quiero modificar es solo de aspecto o se trata de añadir algún tipo de información y/o tratamiento de algún tipo de datos que no viene por defecto en PS? ¿los datos relativos a tu cambio/objetivo no están originalmente el modelo por defecto?

Lo que quiero transmitir con las preguntas anteriores es la metodología que yo más o menos utilizo para saber y detectar qué partes tengo que modificar de una tienda.

Vamos un poco a la práctica: declaración de un override. Lo primero es saber qué ficheros queremos sobrecargar. Supongamos que queremos añadir dos campos twitter y facebook a nuestros productos y queremos mostrar estos campos en la ficha de producto.

 

¿Qué clase tenemos que extender y qué controlador?

En el próximo post os lo muestro xD

Un saludo y gracias!!!!

Salir de la versión móvil