Crear módulo Prestashop

logotipo prestashop

Prestashop pone a disposición de los desarrolladores un formulario que genera los archivos necesarios para la creación de un módulo, incluyendo opciones como para compatibilidad de versiones, hooks a los que se anclará el módulo, uso de posible tabla propia en la base de datos…

La siguiente dirección nos permitirá generar los archivos necesarios para comenzar con la creación de cualquier módulo:

https://validator.prestashop.com/generator

A partir de las instrucciones de la documentación de Prestashop, hemos seguido un «tutorial» para crea un módulo muy básico, disponible ya en mi repositorio a través de esta dirección:

https://github.com/JorgeGolo/first-upload-module

Este es el enlace a la documentación oficial:

Voy a listar unas notas que me han parecido bastante esclarecedoras sobre la forma que tiene Prestashop de estructurar sus módulos, y de cómo seguir sus estándares. Algunas ya las conocía de otras versiones:

  • Todo módulo generado con el formulario que hemos comentado, llamado «Nombredelmodulo», tiene un archivo principal llamado nombredelmodulo.php, con una estructura de carpetas similar a todos los demás módulos
  • Si tiene una sección de «Configuración» en el BackOffice tiene una función llamada getContent() en el archivo nombredelmodulo.php
  • Tools::isSubmit() es un método específico de Prestashop que comprueba si un formulario ha sido ejecutado.
  • Tools::getValue() es otro método específico que lee el parámetro desde POST o GET. En el ejemplo, Tools::getValue(‘MYMODULE_CONFIG’), donde MYMODULE_CONFIG es el name que le hemos dado al input del formulario.
  • updateValue(‘MYMODULE_CONFIG’, $nombrevariable) actualizará el texto del campo del formulario.
  • El objeto Validate contiene muchos métodos de validación, uno de ellos es isGenericName(), que ayuda a validar una string con «formato Prestashop válido», es decir, sin caracteres especiales.
  • displayError() muestra un mensaje de error
  • Hay algunos otros métodos explicados en el ejemplo que son fáciles de seguir.

En el tutorial también se habla de HelperForm. En el contexto de programación web y sistemas de gestión de contenido como PrestaShop, HelperForm es una función o clase utilizada para simplificar la creación de formularios en el back office de PrestaShop. Estos formularios suelen ser parte de módulos o extensiones que se integran en el panel de administración de PrestaShop. Aquí tienes una lista de ventajas del uso de los estándares con HelperForm:

  1. Facilita el Desarrollo:
    • Un helperform podría proporcionar métodos y funciones listas para usar que simplifican la creación de elementos comunes de formularios, como campos de entrada, botones, selectores, etc.
    • La estandarización facilita el desarrollo, ya que los desarrolladores pueden utilizar la misma interfaz y estructura para crear formularios en diferentes partes del back office.
  2. Consistencia Visual:
    • Al utilizar una clase o función común para la creación de formularios, se promueve la consistencia visual en la interfaz de administración de PrestaShop.
    • Los elementos del formulario generados por el helperform seguirían un estilo y diseño coherentes, lo que mejora la experiencia del usuario y la apariencia general del back office.
  3. Reutilización de Código:
    • La función o clase «helperform» podría contener métodos que encapsulen la lógica comúnmente utilizada en la manipulación y validación de datos de formularios.
    • Esto permite a los desarrolladores reutilizar código, evitando la duplicación y reduciendo la probabilidad de errores.
  4. Adaptabilidad a Futuras Actualizaciones:
    • Al seguir una interfaz estandarizada proporcionada por el helperform, los módulos y extensiones desarrollados con esta clase pueden ser más adaptables a futuras actualizaciones de PrestaShop.
    • Cambios en la implementación interna de PrestaShop podrían ser manejados dentro de la clase helperform, minimizando el impacto en los módulos existentes.
  5. Documentación Clara:
    • Una función o clase dedicada simplifica la documentación para los desarrolladores. Pueden entender rápidamente cómo crear formularios y qué métodos están disponibles, facilitando la adopción y el mantenimiento.
  6. Aumento de la Productividad:
    • Al reducir la complejidad y la cantidad de código necesario para crear formularios, los desarrolladores pueden ser más productivos y centrarse en la lógica específica de sus módulos en lugar de la implementación de formularios.
  • Para generar un formulario, usamos un array multinivel y luego se lo pasamos como parámetro a la clase HelperForm
  • Se crea una instancia de la clase y se le pasan parámetros a sus métodos.
  • Luego se usa el método generateForm() pasándole como variable el array que hemos creado anteriormente.
  • Todo esto dentro de una función displayForm() que tendrá este return:        
return $helper->generateForm([$form]);
  • La función displayForm la pasamos a su vez al return de getContent(), junto con otras variables (si queremos):      
return $output . $this->displayForm();

Prestashop pone a disposición de los desarrolladores otros helpers como HelperList. En esta entrada se hace uso de HelperList:

https://www.prestashop.com/forums/topic/334228-solved-helperlist-not-generating-the-list/

Correos Express – Integración con Prestashop

Para la integración de nuestra tienda online con la empresa de transportes Correos Express, hemos elaborado un módulo que genera un documento compatible con su software, una plataforma llamada AlerEti. Este documento debe cumplir las especificaciones que el transportista indica a la hora de hacer la integración, como el número de campos y la longitud y caracteres permitidos en los mismos.

correos express

Para ello hemos elaborado un módulo en Prestashop que permite generar este fichero (en formato CSV) relleno con los datos de los pedidos que le indiquemos.

Algunas normas sobre el fichero a generar:

  • El fichero debe ser un CSV separado por espacios, aunque se permite elegir el carácter separador (usaremos el delimitado por punto y coma).
  • Pueden fijarse campos que siempre tengan el mismo valor en la plataforma.
  • El nombre del fichero y la ruta no pueden contener espacios.
  • Otras especificaciones indicadas por la empresa de transportes, específicas de los servicios prestados a cada empresa.
  • Si la dirección del destinatario excede los caracteres que el campo requiere (40), hay un campo «observaciones» que se puede utilizar para completar la dirección.

Si estás interesado/a en el módulo y necesitas ayuda, deja un comentario o escríbenos un mail y solucionaremos tus dudas.

Módulo Prestashop Ruralvia – Cajarural

En este enlace sigo la discusión sobre el módulo de pasarela TPV para la entidad Cajarural que utilizo en una de mis tiendas en producción: http://www.prestashop.com/forums/topic/37938-modulo-pago-caja-rural-ruralvia-beta/

En el siguiente enlace se explica cómo corregir algunos fallos de escritura en el módulo de usuario del foro de Prestashop naveto, al que agradezco que nos donara este módulo a la comunidad: http://www.prestashop.com/forums/topic/156202-solucionado-fallo-menor-con-modulo-ruralvia-08/

Módulo para etiquetas de direcciones Prestahop

Este módulo lo he encontrado en el foro de Prestashop, se llama printlabel y he tenido que modificarlo para que se ajuste al tamaño de mis etiquetas, incluya el logotipo de la empresa, y la posición dentro del folio.

http://www.prestashop.com/forums/topic/24031-module-print-delivery-label/

Imprimimos las direcciones en folios adhesivos A4 divididos en 4 adhesivos, con lo que el módulo permitirme ubicar la etiqueta en cada esquina del folio. De esta forma podemos aprovechar más los folios adhesivos, que son algo caros.

Captura del B.O., en la página de pedido aparecen 4 opciones para sacar la etiqueta.

Si alguno de vosotros usa Prestashop 1.4 y necesita este módulo con mis modificaciones, puede dejar un comentario y/o escribirme un mail y le atenderé personalmente. Para quien se atreva: es necesario modificar download-label.php y printlabel.php para conseguir cambios similares.