Cómo crear un módulo personalizado en Magento 2

Publicado: 2018-03-19

¿Qué es el Módulo Magento?

Como sabe, el módulo es un directorio que contiene bloques , controladores , modelos , asistentes , etc., que están relacionados con una característica comercial específica.

De acuerdo con el compromiso de Magento con la modularidad óptima, un módulo encapsula una función y tiene dependencias mínimas de otros módulos.

Los módulos brindan funciones comerciales, con lógica de soporte, mientras que los temas influyen fuertemente en la experiencia del usuario y la apariencia del escaparate.

Propósito del módulo

El propósito de cada módulo es proporcionar funciones específicas del producto mediante la implementación de nuevas funciones o la ampliación de las funciones de otros módulos. Cada módulo está diseñado para funcionar de forma independiente, por lo que la inclusión o exclusión de un módulo en particular normalmente no afecta la funcionalidad de otros módulos.

En Magento 2, los módulos estarán activos en el directorio app/code de una instalación de Magento, con este formato: app/code/<Vendor>/<ModuleName>. Ahora seguiremos estos pasos para crear un módulo simple que funcione en Magento 2.

Crear un módulo Magento 2

  1. Cree la carpeta del módulo.
  2. Cree el archivo etc/module.xml.
  3. Cree el archivo de registro.php.
  4. Ejecute el script bin/magento setup:upgrade para instalar el nuevo módulo.
  5. Compruebe que el módulo está funcionando.

Veamos cada uno de estos pasos en detalle.

Paso 1: crea la carpeta del módulo

  • Hay dos ubicaciones posibles para los módulos en Magento 2: la carpeta de la aplicación/código y la carpeta del proveedor

Dependiendo de cómo se haya instalado Magento 2, los módulos principales pueden ubicarse en las carpetas vendor/magento/magento-* (para la instalación del compositor) o en la carpeta app/code/Magento/ (para clonar github).

  • ¿Cuál de estas ubicaciones debería elegir para su nuevo módulo?

Si crea un módulo para un proyecto específico, es mejor elegir la carpeta de aplicación/código y confirmar con el repositorio del proyecto.

Si crea una extensión para reutilizarla, es mejor usar Composer para crearla y colocar su módulo en la carpeta proveedor/<SU_VENDEDOR>/módulo-algo.

Cada nombre de módulo en Magento 2 consta de dos partes: el proveedor y el módulo en sí, por lo que debe definir los nombres del proveedor y del módulo. Para este ejemplo, llamemos al proveedor "Learning" y al módulo "FirstUnit".

Creamos la carpeta app/code/Learning y dentro de esta carpeta colocamos otra carpeta: FirstUnit. Si está utilizando la línea de comando, el código sería:

  1. cd a la carpeta raíz
  2. aplicación mkdir/código/aprendizaje
  3. mkdirapp/code/Learning/Primera Unidad

Asegúrese de tener permiso para crear archivos y carpetas en su instalación.

Paso 2: Cree el archivo etc/module.xml

Este archivo es necesario para que exista el módulo y contiene la siguiente información:

  • Nombre del módulo
  • Versión del módulo
  • dependencias

El nombre del módulo está definido por las carpetas que acabamos de crear, porque en Magento 2, los nombres de las clases deben seguir la estructura de carpetas. Debido a que creamos las carpetas Learning/FirstUnit, el nombre de nuestro módulo será Learning_FirstUnit y todas las clases que pertenecen a este módulo comenzarán con Learning\FirstUnit, por ejemplo: Learning\FirstUnit\Observer\Test.

La versión del módulo indica la versión actual del esquema y los datos de la base de datos, y se utiliza en la actualización. Por ejemplo, suponga que decide modificar el esquema de una tabla en su módulo. ¿Cómo puede estar seguro de que este cambio ocurrirá en todas las instancias donde se implementa el código? La alteración de la base de datos mediante consultas SQL directas no funcionará. En cambio, Magento 2 tiene scripts de instalación y actualización en cada módulo (opcionalmente). Estos scripts contienen comandos para modificar el esquema o los datos de la base de datos. Para rastrear si ejecutar un script o no, Magento 2 usa versiones de módulos. Cada vez que implementa un nuevo cambio en la base de datos, implementa una nueva versión de un módulo y cambia el module.xml correspondiente. Magento guarda la versión actual del módulo en una base de datos, y si el valor de la base de datos y el del módulo.xml no coinciden, ejecutará el código de actualización.

dependencias. Si un módulo depende de otro, el archivo module.xml tendrá una declaración especial que define una lista de módulos de los que depende el módulo actual. Para este ejemplo, haremos que nuestro módulo dependa de Magento_Catalog.

Con el siguiente código de línea de comandos, cree la carpeta app/code/Learning/FirstUnit/etc :

 mkdir app/code/Learning/FirstUnit/etc

A continuación, cree un archivo XML con el siguiente contenido:

 <?xml versión="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Learning_FirstUnit" setup_version="0.0.1">
        <secuencia>
            <nombre del módulo="Magento_Catalog" />
        </secuencia>
    </módulo>
</config>

Tenga en cuenta que en el archivo XML especificamos:

  • Nombre del módulo: Learning_FirstUnit (basado en las carpetas que creamos)
  • Versión: 0.0.1 (versión inicial de nuestro módulo)
  • Dependencia: Magento_Catalog. Podríamos tener varias dependencias. En este caso, colocaríamos los nodos <module name=”..” /> debajo del nodo de secuencia.

Paso 3: Crea el archivo registration.php

Cada módulo debe tener este archivo, que le dice a Magento cómo ubicar el módulo. Continuando con nuestro ejemplo, cree el archivo app/code/Learning/FirstUnit/registration.php . Luego pon el siguiente contenido en él:

 <?php \Magento\Framework\Component\ComponentRegistrar::register(\Magento\Framework\Component\ComponentRegistrar::MODULE, 'Learning_FirstUnit', __DIR__);

El registration.php es un archivo estandarizado que sigue el mismo patrón para todos los módulos.

Lo único que varía es el nombre del módulo, que en nuestro caso es Learning_FirstUnit .

Paso 4: Ejecute el comando "setup:upgrade"

Ejecutar este comando activa su nuevo módulo, notificando a Magento de su presencia.

 Configuración de php bin/magento: actualizar

Debería hacer eco de una gran cantidad de resultados, una línea de la cual debería ser Learning_FirstUnit . Verifique que esta línea de código esté allí.

Paso 5: Comprueba que el nuevo módulo está activo

Hasta ahora, no hemos agregado ningún código útil a nuestro módulo; aún está vacío (y por lo tanto invisible). Para verificar que ha sido reconocido, verifique el archivo app/etc/config.php . Tiene una lista de módulos generados automáticamente que están activos.

¡Nunca cambie esta lista manualmente!

 aplicación gato/etc/env.php | grep Learning_FirstUnit

Empleando estos pasos, puede crear con éxito un nuevo módulo en Magento 2.


Lee mas:
Cómo implementar contenido estático en Magento 2