En este artículo, te explicaré cómo crear un módulo propio en Magento 2. Los módulos de Magento 2 son básicamente elementos estructurales.
Paso 1: Crear la carpeta del módulo
En Magento 2, podemos tener la carpeta del nuevo módulo en dos sitios. El primero es en el directorio app/code/ y el segundo en el directorio vendor/. En este caso, vamos a crear el plugin en la primera ruta primera es decir, app/code/.
Ahora crea tu carpeta: app/code/<nombre_del_vendor>/<nombre_del_módulo>
Donde el <nombre_del_vendor> es el nombre del proveedor, de la empresa creadora del módulo o tu nombre. En este ejemplo le vamos a poner Devenapuros.
<nombre_del_módulo> es el nombre del módulo. En mi caso será HolaMundo.
Por lo tanto, mi estructura de carpetas queda así:
app/code/Devenapuros/HolaMundo/
Paso 2: Crear el archivo registration.php
El fichero registration.php es necesario para registrar nuestro nuevo módulo en el sistema Magento. Después de registrar el módulo con éxito, podrás verlo en el archivo app/etc/config.php.
A continuación, voy a añadir el archivo registration.php a la carpeta app/code/Devenapuros/HolaMundo/. Contiene lo siguiente:
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Devenapuros_HolaMundo',
__DIR__
);
Paso 3: Crear el archivo etc/module.xml
Aquí, hay que añadir el archivo module.xml dentro de app/code/Devenapuros/HolaMundo/
Con este contenido:
<?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="Devenapuros_HolaMundo" setup_version="1.0.0" active="true"></module>
</config>
<config> : Nodo raíz para la configuración del módulo de Magento.
<module>: Aquí va la información básica sobre el módulo de Magento.
Atributo name en <module>: Namespace_Nombremodulo.
Setup_version en <module>: Version del módulo.
Paso 3: Comprobar el estado del módulo de Magento
Después de seguir los pasos anteriores, habremos creado un módulo sencillo (y que, de momento, no hace nada). Ahora vamos a comprobar el estado del módulo y si está habilitado o deshabilitado utilizando la siguiente línea de comandos en la raíz de la instalación de Magento:
php bin/magento module:status
Si tu módulo está en la lista de módulos deshabilitados, entonces tienes que habilitarlo usando el siguiente comando:
php bin/magento module:enable Devenapuros_HolaMundo
Una vez que has habilitado el módulo por primera vez, hay que actualizar la base de datos del módulo utilizando este comando:
php bin/magento setup:upgrade
Después de habilitar el módulo, vuelve a comprobar el estado de los módulos con la línea de comandos que se mencionó anteriormente para ver si se ha activado correctamente.
Paso 4: Añadir funcionalidad
Por ejemplo, mostrar el enlace del módulo en el footer de nuestra página.

Para ello, creamos el archivo default.xml en la ruta: app/code/Devenapuros/HolaMundo/view/frontend/layout/default.xml
y añadimos el siguiente código en él:
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceBlock name="footer_links">
<block class="Magento\Framework\View\Element\Html\Link\Current" name="holamundo-link">
<arguments>
<argument name="label" xsi:type="string" translate="true">Hola Mundo</argument>
<argument name="path" xsi:type="string">holamundo</argument>
</arguments>
</block>
</referenceBlock>
</body>
</page>
Guardar el archivo y comprueba en la web que se muestra nuestro enlace en el pie de página.
Paso 5: Activar/desactivar módulo en función de la configuración del admin
Es hora de añadir la funcionalidad de habilitar y deshabilitar nuestro módulo personalizado desde el panel de administración para que cualquiera que tenga acceso pueda cambiarlo. Para ello, creamos el archivo system.xml en la ruta app/code/Devenapuros/HolaMundo/etc/adminhtml
El contenido sería:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
<system>
<tab id="devenapuros" translate="label" sortOrder="200">
<label>Devenapuros</label>
</tab>
<section id="devenapuros" translate="label" sortOrder="150" showInDefault="1" showInWebsite="1" showInStore="1">
<class>separator-top</class>
<label>Hola Mundo</label>
<tab>devenapuros</tab>
<resource>Devenapuros_HolaMundo::configuration</resource>
<group id="general" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="0" showInStore="0">
<label>General Configuration</label>
<field id="enable" translate="label" type="select" sortOrder="1" showInDefault="1" showInWebsite="0" showInStore="0">
<label>Enable Module</label>
<source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
</field>
</group>
</section>
</system>
</config>
Después de añadir este código, vacía la caché. A continuación, ve al panel de administración Stores->Configuration y comprueba la configuración de nuestro nuevo módulo.

Ahora hay que añadir la línea «ifconfig=»section_id/group_id/field_id»» en el bloque de la referencia «footer_links» en el archivo app/code/Devenapuros/HolaMundo/view/frontend/layout/default.xml así:
<block class="Magento\Framework\View\Element\Html\Link\Current" ifconfig="devenapuros/general/enable" name="holamundo-link">
Que pasa si queremos habilitar este módulo por defecto cuando instalemos este módulo, para ello creamos el archivo config.xml en la ruta app/code/Devenapuros/HolaMundo/etc.
Y el contenido sería :
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
<default>
<devenapuros>
<general>
<enable>1</enable>
</general>
</devenapuros>
</default>
</config>
Ahora, borra caché
php bin/magento cache:flush
Y listo! Hemos terminado, tenemos nuestro módulo personalizado creado y operativo.