Creación de un módulo CRUD con acceso a base de datos - Parte I



 CREACIÓN DE UN MÓDULO EN PRESTASHOP


Mientras el material de repaso de lengua de 5° de Primaria está en proceso (vamos haciendo y l@s chic@s resolviendo, así que no podemos darlo por terminado por ahora 😀), ha surgido la necesidad de crear un módulo Prestashop con acceso a base de datos.

Este es un módulo que funciona en el área de Administración de la tienda para que el dueño de la misma pueda asignar ciertos datos a sus proveedores. 





El Administrador de la tienda desea, para algunos proveedores de sus productos, poder actualizar las existencias y el precio de acuerdo a archivos que tiene en formato CSV (Comma Separated Values – Archivo Separado por Comas). 

En esta ocasión (en varias entregas) explicaremos la creación básica del módulo, es decir, que pueda:
  • Crear las opciones de cada proveedor: dónde está el archivo CSV, dónde leer el precio, dónde leer las existencias, qué margen añadir al precio del producto.
  • Modificar los datos registrados para cada proveedor.
  • Eliminar los datos registrados de un proveedor.


Es decir, vamos a crear un módulo CRUD con una tabla propia en la base de datos y con todo el código necesario para tener todas las acciones básicas listas. 

EXPLICACIÓN DEL MÓDULO

Vamos a tomar ventaja de los Helper para el área de Administración que Prestashop tiene incluidos. 


Al entrar al módulo, se verá una lista con las configuraciones creadas.  Desde ahí, podremos añadir una nueva configuración, modificar una configuración existente o eliminar una configuración que ya no deseemos.  Por lo tanto, nuestra primera pantalla será una lista (HelperList) y la pantalla para agregar y la pantalla para modificar serán formularios (HelperForm).

El ingreso a la base de datos lo realizaremos preferentemente mediante los objetos incorporados en Prestashop, por lo que crearemos una clase con la estructura de la tabla que vamos a necesitar tener en la base de datos.  En el módulo incorporaremos el código para crear la tabla realmente en la base de datos, al momento de instalarlo. 

Estamos usando Prestashop1.7.6.0 (última versión estable), con MySQL versión 5.7.14, PHP 7.0.10 y Apache 2.4.23.  Como IDE estamos usando NetBeans.

En internet puedes encontrar amplia documentación sobre la instalación de Prestashop, de servidores locales y de configuración de servidores en producción.

COMPATIBILIDAD


A partir de la versión 1.7.6, se incorporan más funcionalidades de Doctrine (motor de base de datos de Symfony) que facilitan mucho las operaciones con la base de datos (puedes cargar una tabla en un array de objetos, buscar un objeto, actualizar, guardar, eliminar, etc) sin tener que poner las sentencias SQL en el código.  Aunque en este ejemplo estamos utilizando dicha versión de Prestashop, por compatibilidad con versiones anteriores no vamos a hacer uso de todas las opciones de Doctrine, más que una vez para mostrar su uso.

En internet puedes encontrar amplísima información sobre Symfony y Doctrine, especialmente en la web oficial de Symfony:https://symfony.es/

AVISO

Si vas a hacerlo en tu tienda, recuerda hacer todo el desarrollo y pruebas primero en una página de prueba idéntica a tu página en producción, NUNCA lo hagas en tu página en producción. 


ESTRUCTURA DE ARCHIVOS 


Primeramente, dentro de la carpeta ‘modules’ de tu instalación de Prestashop, crea una carpeta llamada modulo_proveedores.  Dentro de ella, crea otra carpeta llamada Classes.

Dentro de la carpeta modulo_proveedores, crea un archivo .PHP llamado modulo_proveedores.php.  Es súper importante que este archivo tenga el mismo nombre que la carpeta.  Este archivo será la clase principal de nuestro módulo. 

En la misma carpeta modulo_proveedores, incluye el logo de tu módulo: de 32x32 pixeles, con nombre ‘logo’ y en los formatos .GIF y .PNG.  Este es el logo que se va a mostrar en el administrador de módulos del área de Administración de Prestashop.

Dentro de la carpeta Classes, crea un archivo .PHP llamado proveedoresClass. 

Tu estructura inicial de carpetas y archivos deberá verse de esta manera:

Estructura de archivos del módulo


LA CLASE


En el archivo modulo_proveedores.php, tendrás que escribir el código que explicamos a continuación.  En la última parte de esta serie, publicaremos la dirección donde podrás descargar el proyecto que estamos explicando, comprimidoen una carpeta .zip.

Iniciamos declarando la clase (fíjate que el nombre de la clase tiene el mismo nombre del archivo) y que debe extender de ObjectModel.  Con esto vamos a tener acceso a todas las propiedades de Clases de Prestashop.

Declaración de la clase del módulo

  
Ahora declaramos los campos que forman nuestra clase (deben coincidir con los campos de la tabla que crearemos después, tanto en nombre como en tipo).

Declaración de los campos de la clase


Crearemos los siguientes campos:
  • id: identificador numérico que se calculará automáticamente (AUTO_INCREMENT de mySQL).
  • id_proveedor: id del proveedor para el cual se configurarán las opciones.
  • ruta: ruta del archivo CSV con los datos del proveedor.
  • stock: columna del archivo CSV que guarda las existencias del producto.
  • precio: columna del archivo CSV que guarda el precio del producto.
  • margen: margen que el dueño de la tienda quiere aplicar a los productos de este archivo CSV.

Ahora pasaremos a la definición de la clase:
definición de la clase del módulo






  • En el punto 1, table, se indica el nombre de la tabla en la base de datos.
  • En el punto 2, primary, se indica cuál de los campos de la tabla es la clave primaria.
  • En el punto 3, multilang, le decimos a la tabla si va a manejar varios idiomas.
  • En el punto 4, fields, incluimos los campos de la tabla (excepto la clave primaria).  Para cada campo, debes incluir un renglón que lleve el tipo de dato (TYPE_INT, TYPE_STRING, TYPE_FLOAT, etc.).  Aquí puedes también incluir opciones de validación de los datos del campo, si lo deseas.


Finalmente, se pasa a los ‘setters’ y ‘getters’.  Es decir, para cada campo, indicamos la acción que nuestra clase va a realizar cuando recibe un dato para incluir (set) o cuando le solicitan el valor de un dato (get).  Para la clave primaria, solamente se utiliza el método get, pues el valor no lo podemos establecer porque será AUTO_INCREMENT.  En las siguientes pantallas verás la definición de los métodos set y get de cada variable.

id:
Función Get para variable Id


id_proveedor:
Funciones Set y Get para variable Id_Proveedor


ruta:
Funciones Set y Get para variable Ruta


stock:
Funciones Set y Get para variable Stock


precio:
Funciones Set y Get para variable Precio


margen:

Funciones Set y Get para variable Margen



De esta manera, terminamos con la creación de nuestra Clase.

EL MÓDULO

Ahora trabajaremos sobre el módulo en sí.  Primeramente explicaremos las funciones básicas para cargar un módulo a Prestashop y después explicaremos ya las funciones que necesitamos para que nuestro módulo haga lo que queremos.

FUNCIONES BÁSICAS DEL MÓDULO

Primero crearemos la clase del módulo junto con las funciones para construirlo (construct), instalarlo (install), desinstalarlo (unistall) y para mostrar la pantalla inicial (getContent).

Estas cuatro funciones son las funciones básicas de todo módulo.  Recuerda que en la última parte de esta serie, publicaremos la dirección donde podrás descargar el proyecto explicado, comprimido en una carpeta .zip. 

Deberás crear las siguientes funciones en el archivo modulo_proveedores.php. 

Inicio y declaración de la Clase
Declaración de la clase principal del módulo


Tenemos tres cosas importantes aquí:
  • incluimos la clase que creamos anteriormente, para poderla utilizar en nuestro código, para eso utilizamos el renglón include_once
  • revisamos si tenemos definida una versión de Prestashop para asegurarnos de que es un acceso permitido a nuestro módulo
  • creamos la clase, fíjate que el nombre de la clase debe ser igual al nombre la carpeta que la contiene y que extiende a Module, para tener acceso a todas las funcionalidades de la clase Module de Prestashop


Función construct
Función __construct()

Aquí definimos datos de nuestro módulo:
  • name: igual al nombre de la clase
  • version: versión de tu módulo
  • author: autor del módulo
  • bootstrap: se pone a true para utilizar las opciones de bootstrap incluidas en Prestashop
  • tab: pestaña en la que aparecerá
  • ps_versions_compliancy: en forma de array, le indicamos la versión mínima y la versión máxima de Prestashop en la que puede funcionar nuestro módulo
  • displayName: nombre del módulo, tal como aparecerá en el Administrador de Módulos de Prestashop
  • description: descripción de la funcionalidad del módulo, que aparecerá en el Administrador de Módulos de Prestashop

Finalmente, llamamos al método __construct() del padre de nuestro Módulo (clase Module).

Función install
En la función install, realizaremos la instalación del módulo en la tienda Prestashop y además crearemos nuestra tabla en la base de datos:
Función install()

En esta función, debemos llamar a la función install() del padre de nuestro Módulo (clase Module).  Si el proceso de instalación falla o si hay algún error al crear la tabla en la base de datos, nuestra función regresará un error y el módulo no será instalado.

Función uninstall
En la función uninstall, realizaremos la desinstalación del módulo en la tienda Prestashop y además eliminaremos nuestra tabla de la base de datos:
Función uninstall()


En esta función, debemos llamar a la función uninstall() del padre de nuestro Módulo (clase Module).  Si el proceso de desinstalación falla o si hay algún error al eliminar la tabla en la base de datos, nuestra función regresará un error y el módulo no será desinstalado.

La última función para que nuestro módulo pueda cargarse en Prestashop, es la función getContent:

Función getContent
En esta función, por ahora, no haremos nada, simplemente crearla para que el módulo funcione. 

En la siguiente entrega comenzaremos a trabajar (y mucho) en esta función.  Esta es la función que se llama cuando abres el módulo desde el Administrador de Módulos de Prestashop.
Función getContent()
🎈 🎈 🎈 🎈 🎈 🎈 🎈 🎈 🎈 🎈 🎈 🎈 🎈 🎈 🎈 🎈 🎈 🎈 🎈 🎈 🎈 🎈 🎈 🎈 🎈 🎈 🎈 🎈 🎈 🎈 🎈 

Ahora ya podemos abrir nuestra tienda en el navegador, y desde Módulos – Catálogo de Módulos, buscar nuestro módulo:
Módulo en el Catálogo de Módulos



Si vemos nuestro módulo, tiene incluido el botón Instalar:

Módulo listo para instalar


Prueba a instalar y desinstalar el módulo, comprueba la creación y eliminación de la tabla en la base de datos.

¡¡Nos vemos en la próxima entrega!!

Ir a la Parte II - Ir a la Parte III

Mi trabajo está protegido por derechos de autor, por lo que no debes compartirlo libremente, puedes imprimirlo cuantas veces necesites, pero no debes compartirlo con otr@s.  ¡Mejor recomiéndame!!


Cualquier duda o comentario, por favor ¡¡contacta y/o comenta!!

Gracias!



Comentarios