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


CREACIÓN DE UN MÓDULO EN PRESTASHOP

Continuaremos con la creación del módulo para lograr el objetivo que habíamos propuesto:
- 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.



Si has seguido las instrucciones de la Parte I de este artículo, ya tendrás un módulo que puede instalarse y desinstalarse, que además crea la tabla en la base de datos cuando instalas el módulo y la elimina cuando lo desinstalas.  Además, puedes entrar a la pantalla de tu módulo, la cual no hace nada, solamente muestra un ‘1’.  ¿Porqué muestra un ‘1’? Porque en la función getContent() como única instrucción hemos puesto return true; y 1 es el valor correspondiente a ‘true’. 

Ahora vayamos al tema.

LISTA INICIAL


Queremos que al abrirse nuestro módulo, nos muestre un listado con los registros que ya tenemos creados.  Si no tenemos ningún dato capturado, queremos tener un botón ‘Añadir’ que nos permita crear un nuevo registro en nuestra tabla.

Para mostrar un listado, vamos a utilizar una HelperList de Prestashop, lo que automatiza la creación de la lista.  Vamos a crear la lista desde la función getContent(), pues es la función que se utiliza para mostrar el contenido del módulo.

Iniciaremos poniendo el siguiente código en nuestra función getContent().  Usaremos una función dentro de la clase para que el código dentro de nuestra función principal no quede demasiado largo al final.

función getContent()

Generar la lista: función generaLista()

Cargar los datos de la base de datos

Dentro de esta función generaremos nuestra lista inicial.  Primeramente deberemos traer los datos de la base de datos:


sentencia SQL para buscar datos


Mediante una sentencia SQL, traemos los datos de nuestra base de datos.  Para facilitar la lectura de los datos en la lista, traemos el nombre del proveedor asociado desde la tabla Supplier de Prestashop.
Guardamos los datos en una variable ($resultados).  Si nuestra búsqueda está vacía, le daremos el valor null a nuestra variable.

Declaración de los campos de la lista

A continuación, haremos la declaración de los campos que van a componer nuestra lista.


fields_list, campos de la lista HelperList


En primer lugar, para indicar que se trata de los campos que van a formar la lista, utilizamos la instrucción $this->fields_list. Dentro de ella, definiremos cada campo que queremos que forme nuestra lista.  Los campos aquí definidos formarán las columnas de la tabla que se mostrará en la lista de la pantalla inicial del módulo.

1.  Nombre del campo.  Debe coincidir con el nombre que tiene nuestro campo en la base de datos (si te das cuenta, coincide con el nombre que traemos en nuestra sentencia SQL).


Explicación de nombre de campo de lista HelperList


2.  title:  es el nombre que aparecerá como título de la columna correspondiente en la lista.
3.  type:  indicamos el tipo de dato que corresponde a la columna.
4.  orderby:  lo incluimos para que los datos de la lista puedan ordenarse en base a la columna correspondiente.
5.  search:  lo incluimos para que puedan hacerse búsquedas en la columna correspondiente.

Creación de la lista (HelperList)

Ahora crearemos nuestra lista:


creación de HelperList

Explicaremos línea por línea:
  • ·         $helper = new HelperList(): creamos la variable $helper con una nueva lista    
  • ·         $helper->shopLinkType = '';   
  • ·         $helper->simple_header = false: para tener el encabezado completo
  • ·         $helper->actions = array('view', 'delete'):  acciones que se van a mostrar en cada renglón de la lista.  En este caso, usaremos las opciones para editar y para borrar renglones de la tabla.
  • ·         $helper->identifier = 'id_csv': identificador de cada renglón de la lista, es el valor que se enviará como POST en las acciones indicadas en la línea anterior para que podamos identificar el registro sobre el que debemos trabajar.          
  • ·         $helper->show_toolbar = true: mostrar la barra de herramientas.
  • ·         $helper->toolbar_scroll = true;
  • ·         $helper->toolbar_btn ['new'] = array('href' => AdminController::$currentIndex.'&configure='.$this->name.'&add'.$this->name.'&token='.Tools::getAdminTokenLite('AdminModules'),'desc' => $this->l('Añadir nuevo')): Botón para añadir un nuevo registro a nuestra tabla.  Con href indicamos el enlace que será enviado.  Si te das cuenta, en la parte marcada en rojo tenemos el nombre con el que identificaremos en nuestro código que el usuario está pidiendo añadir un nuevo registro.  Con desc indicamos el texto que queremos que aparezca cuando el ratón pase sobre el botón.
  • ·         $helper->listTotal = count($resultados): para mostrar en el encabezado de la tabla el total de registros.
  • ·         $helper->module = $this;
  • ·         $helper->title = $this->l('Actualización mediante CSV'): título de la tabla.
  • ·         $helper->pagination = array(10, 20, 50, 100, 200): opciones de paginación.
  • ·         $helper->table = _DB_PREFIX_.'mod_proveedores': nombre de la tabla en la base de datos. Debe coincidir con el nombre que dimos a la tabla en la Clase.
  • ·         $helper->token = Tools::getAdminTokenLite('AdminModules');
  • ·         $helper->currentIndex = AdminController::$currentIndex.'&configure='.$this->name;  
  • ·         return $helper->generateList($resultados, $this->fields_list): con esta instrucción se generará y mostrará nuestra lista en la pantalla inicial de nuestro módulo.

Recuerda que con la instrucción $this->(‘Texto’), le estás diciendo a Prestashop que incluya el texto en las opciones de traducción de tu módulo.

Ver nuestra lista

Ahora ejecuta el módulo usando el botón Configurar desde el Gestor de Módulos en la Administración de tu tienda en Prestashop y verás la pantalla con la lista.

botón para configurar módulo

Pantalla inicial del módulo con lista HelperList


Puedes ver ya la estructura de la lista, con el botón para añadir registros y todas las opciones de configuración de incluimos en nuestra función generaLista().

Por ahora no podemos hacer nada con nuestro módulo.  Así que pasaremos a añadir la funcionalidad para poder agregar registros a nuestra tabla (y a la base de datos).

AÑADIR DATOS A NUESTRA TABLA


Si pasas el ratón sobre el botón para agregar un nuevo registro, verás que la liga tiene la siguiente información:

http://.....index.php?controller=AdminModules&configure=Modulo_Proveedores&addModulo_Proveedores&token=716576972c14509718305502b9c24110

Como puedes ver, se ha generado el enlace para que podamos identificar la acción a realizar.  Deberemos modificar nuestra función getContent() para poder tomar los datos que nos vienen de la pantalla inicial:


función generaFormulario()


Mediante la instrucción Tools::isSubmit(‘opción’), validamos si necesitamos añadir un nuevo registro.  Si es así, llamaremos a una función que llamaremos generaFormulario(), que analizaremos a continuación.
El nombre que nos ha enviado el enlace para la tarea ‘new’, lo usamos como parámetro en la función Tools::isSubmit:

explicación parámetros Tools::isSubmit


Generar el formulario de captura: función generaFormulario()

En este formulario tendremos campos de texto para registrar la ruta del archivo, las columnas donde tenemos el precio y el stock y el margen a añadir a los productos.  Para el proveedor, usaremos un campo de tipo select para poder elegir en una lista desplegable al proveedor que deseemos utilizar.

Traer los datos de los proveedores

Para poder usar un campo de tipo select, primeramente necesitaremos traer de la base de datos de Prestashop, los datos de los Proveedores registrados.


declaración función generaFormulario


En el primer renglón declaramos nuestra función generaFormulario().

A continuación, en la variable $proveedores traemos (mediante Doctrine) los datos de la tabla Supplier de Prestashop. 

En este caso hemos usado Doctrine para que puedas ver la diferencia entre utilizar Doctrine y utilizar sentencias SQL directamente.

Declaración de los campos del formulario

Al igual que en las listas, debemos declarar los campos que van a componer nuestro formulario.

declaración de campos de formulario

La declaración de los campos del formulario inicia con las siguientes líneas:


declaración de fields_form


En la primera parte, indicamos que se trata de un formulario con la opción ‘form’.  En esta sección incluimos el título de nuestro formulario dentro de la opción ‘legend’ utilizando el atributo ‘title’.

En la segunda parte, listamos las opciones de cada uno de los campos que queremos tener en nuestro formulario usando la opción ‘input’. 


declaración de campo select en sección input


Primeramente analizaremos el campo tipo ‘select’ con el que tendremos la lista desplegable de Proveedores:
  • ·         ‘id_proveedor’: nombre del campo, además debe ser igual al nombre del dato en la tabla de la base de datos (igual que en el caso de los campos para HelperList).
  • ·         ‘type’ => ‘select’:  tipo de campo.  En este caso, para que se muestre una lista desplegable, debemos usar la opción ‘select’.
  • ·         ‘desc’: descripción del campo, ayuda con información adicional sobre la información a ingresar.
  • ·         ‘label’: aparece como etiqueta antes del campo.
  • ·         ‘name’: nombre con el que se hará referencia al campo dentro del formulario.
  • ·         ‘options’: aquí vamos a definir los datos que llenarán la lista desplegable:
o   ‘query’: fuente de los datos, en nuestro caso, la variable $proveedores que llenamos al inicio de la función.
o   ‘id’: campo de los datos que servirá como clave para el campo, es el valor que se guardará al seleccionar algún valor en la lista.
o   ‘name’: campo de los datos que servirá como el dato que se muestra en la lista desplegable.

Para el resto de los campos del formulario, se utilizan las siguientes opciones:

campos de un formulario

  • ·         ‘nombre_del_campo’: debe ser igual al nombre de la columna en la tabla de la base de datos (igual que en el caso de los campos para HelperList).
  • ·         ‘type’=>’text’: tipo de campo.  Lo vamos a usar para introducir texto.
  • ·         ‘label’: aparece como etiqueta antes del campo.
  • ·         ‘desc’: descripción del campo, ayuda con información adicional sobre la información a ingresar.
  • ·         ‘name’: nombre con el que se hará referencia al campo dentro del formulario.

En la tercera parte, indicamos la acción que se llevará a cabo al enviar el formulario, utilizando la opción ‘submit’.


definición de botón submit de formulario


En este caso, utilizamos el atributo ‘title’ para indicar el nombre que se mostrará en el botón del formulario.

De esta manera terminamos la declaración de campos del formulario HelperForm.

Creación del formulario (HelperForm)

Después de declarar los campos que formarán nuestro formulario, debemos crear el formulario.


creación de HelperForm



Explicamos línea por línea:

$helper = new HelperForm():  creamos el formulario.
$helper->title = $this->l('Configurar nuevo archivo CSV'): título que aparecerá en el encabezado del formulario.
$helper->submit_action = 'saveModulo_Proveedores': este es el identificador que será enviado en $POST para que podamos reconocer qué acción debemos llevar a cabo.
$helper->table = _DB_PREFIX_.'mod_proveedores': nombre de la tabla en la base de datos. Debe coincidir con el nombre que dimos a la tabla en la Clase.
$helper->tpl_vars = array(
            'fields_value' =array(
explicación tpl_vars en HelperForm
            'id_proveedor' => '',
            'ruta' => '',
            'stock' => '',
            'precio' => '',
            'margen' => ''
            )
);


$helper->token = Tools::getAdminTokenLite('AdminModules'): token de la acción.
$helper->currentIndex = AdminController::$currentIndex.'&configure='.$this->name: índice para crear el enlace de la respuesta.
return $helper->generateForm(array($this->fields_form)): con este llamado se desplegará el formulario en pantalla.

Con esto terminamos la función para generar nuestro formulario.  Sin embargo, si entramos a nuestro módulo, solamente se mostrará el formulario, pero no hará ninguna acción al presionar el botón ‘Guardar’.


Ejemplo de pantalla generada con HelperForm


Hasta aquí llega esta segunda parte.  En la siguiente, daremos la funcionalidad al botón de Guardar.  También crearemos la funcionalidad para Editar y Eliminar registros existentes.


                                                 Ir a la Parte I -- Ir a la Parte III

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

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