¡Esta es una revisión vieja del documento!
Tabla de Contenidos
Crear un módulo
Introducción
A continuación se explicará la forma de crear un módulo instalable para prestashop. No se entrará en detalles técnicos, ni en funcionalidades, sino que se expondrá el código mínimo para la creación del módulo. La funcionalidad del mismo dependerá de la labor del programador. Como fuente se ha usado la página de desarrollo oficial de prestashop. Las normas de edición de código para prestashop pueden verse en la página de convenciones para prestashop.
Sistema de archivos
El módulo debe contenerse en una carpeta (directorio) con el nombre del módulo. Esta carpeta debe estar en el directorio: ../directorio_raiz_de_prestashop/modulos/ En la carpeta del módulo deben encontrarse los archivos y directorios necesarios para el funcionamiento del módulo. Como mínimo es necesario disponer de los siguientes archivos:
- nombre_del_modulo.php: Archivo principal de funcionamiento del módulo
- config.xml: Archivo de configuración de caché. Si no existe, la crea prestashop de forma automática.
- logo.png: Icono del módulo. Debe tener un tamaño de 32×32 píxeles.
Puede verse una tabla con un sistema de archivos y directorios más completo en la sección de estructura de un módulo para prestashop.
A continuación se explicará el mínimo código necesario que debe existir en el archivo principal del módulo nombre_del_modulo.php
Definición del módulo
En primer lugar hay que comprobar que existe una instalación de prestashop. Para ello lee la “constante de Prestashop” que es su número de versión. Si no existe el módulo no continúa la carga.Previene que visitantes maliciosos carguen este archivo directamente. Para ello:
if (!defined('_PS_VERSION_')) exit;
En segundo lugar hay que definir el módulo. Debemos crear la clase que instanciará al módulo como un objeto PHP. Además debe de heredar de la clase “padre” de prestashop Module para poder disponer de las características básicas de cualquier módulo de prestashop:
class MiModulo extends Module { // Cuerpo del módulo }
Estructura interna del módulo
El módulo tiene que tener al menos tres funciones básicas:
- Constructor
- Función de instalación
- Función de desinstalación
class MiModulo extends Module { public function __construct() { // Contenido de la función //constructor// que instanciará el objeto que será el módulo } public function install() { // Contenido de la función de instalación del módulo. Hace uso de la función de instalación de la clase //Module// } public function uninstall() { // Contenido de la función de desinstalación del módulo. Hace uso de la función de desinstalación de la clase //Module// } }
Constructor
Para ampliar la información se puede recurrir a la página de desarrollo de prestashop, de donde se extrajo esta información. En el constructor se especifican los parámetros de la clase Module, además de lo que sea necesario para el correcto funcionamiento del módulo.
$this->name = 'mymodule'; // Sirve como identificador. Debe tener el mismo nombre que el directorio del módulo $this->tab = 'front_office_features'; // Sección de prestashop en que aparecerá el módulo. $this->version = '1.0'; // Versión del módulo $this->author = 'Firstname Lastname'; // Autor del módulo $this->need_instance = 0; // Si necesita mostrar un mensaje de warning en la página de módulos $this->ps_versions_compliancy = array('min' => '1.6', 'max' => _PS_VERSION_); // Indica las versiones de Prestashop con las que es compatible el módulo $this->bootstrap = true; // Indica si los archivos de plantilla han sido construidos con bootstrap tools
Las posibles secciones en las que puede aparecer el módulo pueden verse en la tabla de la página de desarrollo de prestashop.
Ahora debemos llamar a la clase constructor del método padre:
parent::__construct();
Lo siguiente definir literales a mostrar en diferentes partes del módulo:
$this->displayName = $this->l('My module'); // Nombre del módulo que se mostrará en el backoffice $this->description = $this->l('Description of my module.'); //Descripción del módulo que será mostrada en el backoffice $this->confirmUninstall = $this->l('Are you sure you want to uninstall?'); // Mensaje que se muestra cuando se va a desinstalar el módulo if (!Configuration::get('MYMODULE_NAME')) $this->warning = $this->l('No name provided.'); // Se produce un warning si el módulo no tiene el valor MYMODULE_NAME establecido en la base de datos
Instalador
Para ampliar información, ver la página de desarrollo de prestashop. Esta función hereda todo lo necesario de la clase padre. Es en esta función donde deberemos realizar operaciones necesarias al instalar el módulo, como por ejemplo: chequear determinadas características de la tienda, crear tablas SQL, copiar archivos, crear variables de configuración, etc.
// Función mínima de instalación public function install() { if (!parent::install()) return false; return true; }
Desinstalador
Para ampliar información ver la página de desarrollo de prestashop. Esta función hereda todo lo necesario de la clase padre. Es en esta función donde deberemos realizar operaciones necesarias al desinstalar el módulo, para dejar el sistema limpio: borrar tablas SQL, borrar variables de configuración, etc..
// Función mínima de desinstalación public function uninstall() { if (!parent ::uninstall()) return false; return true; }
Objeto Configuration
Ampliar información en la página de desarrollo de prestashop. Este objeto tiene como finalidad ayudar a los desarrolladores a administrar las opciones del módulo, sin necesidad de usar SQL querys (API de prestashop). Algunos ejemplos de funciones útiles para recuperar información de configuración de prestashop las siguientes:
Configuration::get('myVariable') Configuration::getMultiple(array('myFirstVariable', 'mySecondVariable', 'myThirdVariable')) Configuration::updateValue('myVariable', $value) Configuration::deleteByName('myVariable')
Hay cientos de opciones de configuración posibles, disponibles en la tabla ps_configuration de la base de datos SQL de nuestro prestashop.
Algunos ejemplos:
Configuration::get('PS_LANG_DEFAULT') Configuration::get('PS_TIMEZONE') Configuration::get('PS_DISTANCE_UNIT') Configuration::get('PS_SHOP_EMAIL') Configuration::get('PS_NB_DAYS_NEW_PRODUCT')
En el caso de que tengamos activada la multitienda, estos métodos dependerán del contexto en el que nos encontremos. Sin embargo es posible especificar a la tienda a la que nos referimos con los parámetros id_lang, id_shop y id_shop_group. Más información en el cuadro gris de la página de desarrollo de prestashop.
Objeto Shop
Ampliar información en la página de desarrollo de prestashop. Este objeto sirve para administrar las opción multitienda de prestashop. Para saber si esta característica está activada podemos usar el siguiente código:
if (Shop::isFeatureActive()) Shop::setContext(Shop::CONTEXT_ALL);
Información más detallada en la página de desarrollo.
Módulo básico completo
En el siguiente código se muestra la estructura básica del archivo principal de un módulo, según lo expuesto hasta ahora:
<?php /** \brief Este es el archivo mymodule.php que hace referencia al módulo del mismo nombre. Es un módulo de prueba cuya única función es aprender a hacer módulos para prestashop. */ /** Comprueba que existe una instalación de prestashop. Para ello lee la "constante de Prestashop" que es su número de versión Si no existe el módulo no continúa la carga.Previene que visitantes maliciosos carguen este archivo directamente. */ if (!defined('_PS_VERSION_')) exit; /** \class MyModule Esta es la clase que define la instanciación del módulo y que se ejecuta cuando se carga. Es una clase extendida de la clase 'module' de Prestashop. Hereda todos sus métodos y atributos. */ class MyModule extends Module { /** Constructor Se especifican diversos parámetros propios de la clase 'Module' Además de lo que sea necesario para el correcto funcionamiento del módulo */ public function __construct() { /** \var string name Sirve como identificador. Debe tener el mismo nombre que el directorio del módulo */ /** \var string tab Sección que contendrá el módulo "Tab" attribute | Module section --------------- | -------------- Administration | Administration advertising_marketing | Advertising & Marketing analytics_stats | Analytics & Stats billing_invoicing | Billing & Invoices checkout | Checkout content_management | Content Management dashboard | Dashboard emailing | E-mailing */ /** \var string version Versión del módulo */ /** \var string author Autor del módulo */ /** \var boolean need_instance Si necesita mostrar un mensaje de warning en la página de módulos */ /** \var array ps_versions_compliancy Indica las versiones de Prestashop con las que es compatible el módulo */ /** \var boolean bootstrap Indica si los archivos de plantilla han sido construidos con bootstrap tools */ $this->name = 'mymodule'; $this->tab = 'front_office_features'; $this->version = '1.0'; $this->author = 'Firstname Lastname'; $this->need_instance = 0; $this->ps_versions_compliancy = array('min' => '1.6', 'max' => _PS_VERSION_); $this->bootstrap = true; /** Llamamos al método constructor de la clase padre */ parent::__construct(); /** En el siguiente bloque de código se utiliza el método de traducción l() */ /** \var string displayName Nombre del módulo que se mostrará en el backoffice */ /** \var string description Descripción del módulo que será mostrada en el backoffice */ $this->displayName = $this->l('My module'); $this->description = $this->l('Description of my module.'); /** \var string confirmUninstall Mensaje que se muestra cuando se va a desinstalar el módulo */ $this->confirmUninstall = $this->l('Are you sure you want to uninstall?'); /** Se produce un warning si el módulo no tiene el valor MYMODULE_NAME establecido en la base de datos */ if (!Configuration::get('MYMODULE_NAME')) $this->warning = $this->l('No name provided'); } /** Función básica de instalación Muy útil si es necesario realizar operaciones al instalar el módulo, como por ejemplo: chequear determinadas características de la tienda, crear tablas SQL, copiar archivos, crear variables de configuración, etc. */ public function install() { if (!parent::install()) return false; return true; } /** Función básica de desinstalación Necesaria si hay que llevar a cabo acciones para dejar el sistema limpio al desinstalar: borrar tablas SQL, borrar variables de configuración, etc. */ public function uninstall() { if (!parent ::uninstall()) return false; return true; } } ?>
