Blog
Creando un Módulo básico en Magento 2
- diciembre 11, 2023
- Publicado por: admin
- Categoría: Magento 2
En este artículo voy a mostrarte la forma más sencilla de crear un módulo básico el más simple para Magento 2, la finalidad es mostrar lo sencillo que es lograrlo y que con un par de archivos se consigue hacerlo.
Antes daré una explicación de cuál es su finalidad, Magento 2 es un CMS de comercio electrónico está por demás repetirlo pero lo volver a decir que es un CMS pues de la forma más sencilla es ver una herramienta que permite crear un sitio web en el caso de Magento este un sitio web que está completamente orientado a comercio electrónico, Administrador de contenidos, su significado es claro pero de fondo contienen mucho más que eso, ya que si puedes crear un sitio de comercio electrónico completamente sin necesidad de crear una línea de código, así que cualquier persona que tenga la plataforma ya montada en un sitio de Internet puede comenzar a generar productos, categorías de productos, configuración de métodos de pago, de entrega tipos de monedas regiones de venta y un sinfín de posibilidades que necesitaríamos para empezar a vender en línea, e incluso páginas de información contenidos personalizados y todo eso sin haber generado ninguna línea de programación.
Pero a donde quiero llegar con eso que todo lo dicho ya es maravilloso o suena genial, pero yo que llevo bastante tiempo en este mundo de la implementación de proyectos de comercio electrónico sé que la realidad no es así, hay muchos casos en los que he llegado solo a necesitar de implementar módulos ya existentes, pero al final termina un cliente requiriendo de integrar sus tecnologías en la plataforma de Magento pero eso no es un problema bueno si detrás del negocio hay quien sabe hacerlo.
Para eso esta este articulo para comentar que Magento permite no solo trabajar con lo que la plataforma tiene si no se adaptar perfectamente a soportar nuevos agregados no importa lo sencillo y complicados que sean, más aun permite extender sus funcionalidades y capacidades, está completamente bien definido que con respecto a su versión anterior esta versión lo hace de la mejor forma posible que cuando un nuevo desarrollador y que venía de la versión anterior se encuentra con este tipo de integraciones da gracias por lo fácil y sencillo que es por el orden, esa mejora potencial que se puede ver al integrar un módulo personal.
Perdón por la explicación pero si podrán notarlo siempre me gusta hablarles las cosas a modo de charla, no soy un experto en hacer artículos ni mucho menos un buen escritor pero no me preocupa por que si esto le sirve a alguien para mi está bien al final me sirve muchísimo más a mí porque me hago más fino en lo que hago lo aprendo más a la perfección.
Mi primer módulo básico en Magento 2
Solo necesitaremos de 2 archivos para que este módulo exista en mi proyecto de Magento 2.
- registration.php: este archivo php es para poder registrar el modulo en el proyecto, su definición le dice a Magento que registrara el siguiente componente de tipo MODULE con el nombre que se pase en la definición y un PATH relativo para saber cómo mantener una estructura de directorios internos en cada archivo y carpeta creada.
- module.xml: este archivo XML por lo general se encargan de las configuraciones que le indican a Magento el nombre de cómo se llamara el Modulo dado por la etiqueta name y la versión con la que se inicia este módulo dado por la etiqueta setup_version, estos dos atributos son importantes ya que son exactamente los que se registran en la tabla nativa de Magento llamada setup_module.
Crear un archivo llamado registration.php en la ruta app/code/Marcgento/Mimodulo/registration.php donde Marcgento representa el espacio de nombres o bien el nombre significativo como empresa que indicara el contenedor del resto de módulos desarrollados a mediada para que mi proyecto pueda funcionar con respecto a mis propios módulos personalizados, dentro del espacio de nombres una carpeta llamada con el nombre del módulo en este caso llamada Mimodulo que contendrá toda la estructura de carpetas necesaria para la existencia de un módulo en Magento 2.
<?php
MagentoFrameworkComponentComponentRegistrar::register(
MagentoFrameworkComponentComponentRegistrar::MODULE,
'Marcgento_Mimodulo',
__DIR__
);
Crear un archivo XML module.xml en la ruta app/code/Marcgento/Mimodulo/etc/module.xml a diferencia del archivo anterior este debe crearse dentro de una carpeta llamada etc en la estructura del módulo y dentro el archivo XML de configuración.
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nonamespaceschemalocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Marcgento_Mimodulo" setup_version="1.0.0">
</module>
</config>
Esta es la estructura del ejemplo del módulo personalizado en un proyecto de Magento 2.
Una vez teniendo los dos archivos listos en la estructura mencionada hay que ejecutar estos dos comandos:
- php bin/magento setup:upgrade Este comando será para validar si existe un nuevo módulo para poder darlo de alta en la plataforma de Magento, si todo es correcto se agregara un nuevo registro en la tabla setup_module donde registra el nombre del módulo dado en el archivo module.xml del atributo name y la versión dada por el atributo setup_version una vez ejecutado el comando te podrás dar cuenta que dinamicamente se ha actualizado el archivo config.php localizado en la ruta app/etc/config.php archivo donde se localizando todos los módulos del proyecto tanto nativos de Magento como los propios en una definición de array.
- El segundo comando no es parte de la creación del módulo pero afectara ya que nos permite volver a reconstruir el proyecto nuevamente con sus correspondientes estilos. php bin/magento setup:static-content:deploy -f
Después de ejecutar los comandos, muestro como al realizar una consulta a la tabla setup_module ya existe un nuevo registro con el nombre del módulo recién creado.
Buenas prácticas para aplicar
Tengo algunas cosas importantes que no está por demás comentarlo y es tener en cuenta estas indicaciones o bien recomendaciones que Magento nos pide hagamos al crear nuestros módulos y que si tú las aplicas será mucho mejor en el futuro, al final es una buena práctica y como desarrolladores es lo que necesitamos ir practicando:
Cuál es la recomendación que debemos seguir para nombra a nuestro modulo
Esto es importante y es justo el identificador que le hemos dado tanto en el archivo registration.php como el archivo module.xml “Marcgento_Mimodulo” este nombre debe contener solo letras mayúsculas o minúsculas de la A-Z o a-z incluso número del 0-9 y guion bajo, el nombre nos permite aplicar cualquier combinación de lo ya mencionado pero claro está que hay una recomendación que deberíamos aplicar y es aplicar dos palabras una para el nombre de nuestra empresa o instancia, en este caso el mío es Marcgento y la segunda palabra será el nombre del módulo esto debería ser una palabra que identifique de forma general al módulo que estaríamos desarrollando en mi caso es Mimodulo ya que estoy explicando como iniciar un primer módulo estas dos palabras deberían estar separadas por un símbolo guion bajo al final conseguiríamos tener Marcgento_Mimodulo es notorio ver como he aplicado camel case en las palabras dando a la primer letra de cada palabra en mayúscula, esto será la mejor practica para nombrar a nuestros nuevos módulos.
Como debe estar compuesto el attributo setup_version
Este atributo solo puede contener números separados por puntos, esto es un indicativo importante ya que define la versión con la que iniciamos nuestro modulo si en el futuro este módulo aplica nuevos cambios o mejoras este valor debe ir incrementando en número de versión es un orden histórico para Magento para que pueda entender cómo va sufriendo cambios cada módulo de Magento.
La ultima indicación para módulos no la detallare en este artículo ya que estamos hablando de un módulo básico pero la menciono para aquellos que ya conocen del tema y piense que no es que se me ha pasado sino más bien como es un tema intermedio en posteriores artículos ya lo analizaremos y me refiero al nodo <sequence> del archivo module.xml que va dentro del nodo <module> es el que hace referencia a la dependencia de módulos, ya que podemos crear un modulo que dependa de funcionalidad nativa de Magento como módulos de clientes, productos, categorías etc, Magento nos pone las cosas mas fáciles mediante este agregado podríamos conectar y utilizar módulos nativos dentro de nuestros propios módulos ya sea para colocar un agregado expandiendo la funcionalidad o bien reutilizando acciones ya existentes aplicándolas en nuestros propios módulos.