Blog
¿Que es y para qué sirve el archivo de configuración system.xml en Magento 2?
- enero 23, 2025
- Publicado por: admin
- Categoría: Uncategorized

Para poder entender que es el archivo de configuración system.xml, primero te explicaré cuál es el objetivo de que exista y porque lo necesitaríamos en nuestro proyecto, lo primero es saber que este archivo XML, es una archivo de configuración que exclusivamente se utilizará en el área de Administración, pensemos que nosotros como desarrolladores necesitamos pasar parámetros a nuestros módulos de forma dinámica, pero que probablemente esa información no necesariamente necesitamos definirla nosotros como desarrolladores, si no puede ser un administrador de la plataforma o cualquiera que operar la plataforma en el área de administración, por ejemplo el porcentaje de descuento que aplicaremos a un módulo que verifica una lista de clientes y si cumplen una característica se le asignaría un porcentaje de descuento, ese sería un parámetro que definiría un administrador, o bien pensemos en una aplicación exter
na que estamos implementando y que esta requiere de un indicativo para poder funcionar, probablemente una bandera de encendido y apagado como lo hacen muchos módulos del backend, para aún tenerlo más claro mira esta imagen:

Área de administración

Área de configuraciones
Como podrás ver, la imagen representa el área de administración de una instalación de Magento 2.4.7, y dentro de esta área se pueden localizar todos los módulos de administración, así como secciones de configuración que mediante parámetros se definirían ciertos comportamientos del proyecto en línea así como valores que se almacenan en base de datos o tablas específicas.
Pues el archivo system.xml es la forma que encontró Magento para que mediante este archivo XML pudiéramos indicarle a nuestros desarrollos una forma de comunicar valores de inicialización configuración o para cualquier propósito que necesites utilizar dentro de nuestros desarrollos en cierta forma desde mi punto de vista es la forma más sencilla que expone Magento para mantener una comunicación sencilla entre los operadores de la plataforma y los módulos desarrollados en la misma.
Mediante una serie de nodos ya definidos podemos indicar la pestaña donde se mostrara esa configuración, la sesión, incluso la posición y orden, así como el grupo en donde se colocaría. Esta es la estructura básica de un archivo system.xml en Magento 2.4.x que se localizarían en la ruta de un modulo en etc/adminhtml/system.xmlEstructura inicial
<?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>
</system>
</config>
Estructura Pestañas tab
<?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="{identificador unico}" translate="label" class="a-custom-css-class-to-style-this-tab" sortOrder="10">
<label>{nombre en la pestaña}</label>
</tab>
</system>
</config>

Estructura de Secciones section
<?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="{identificador unico}" translate="label" class="a-custom-css-class-to-style-this-tab" sortOrder="10">
<label>{nombre en la pestaña}</label>
</tab>
<section id="{identificador unico}" showInDefault="1" showInWebsite="0" showInStore="1" sortOrder="10" translate="label">
<label>A meaningful section label</label>
<tab>{identificador tab}</tab>
<resource>VENDOR_MODULE::path_to_the_acl_resource</resource>
</section>
</system>
</config>

Estructura de Grupos group:
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
<system>
<tab id="{valor unico}" translate="label" class="a-custom-css-class-to-style-this-tab" sortOrder="10">
<label>A meaningful label</label>
</tab>
<section id="{valor unico}" showInDefault="1" showInWebsite="0" showInStore="1" sortOrder="10" translate="label">
<label>A meaningful section label</label>
<tab>{valor unico}</tab>
<resource>VENDOR_MODULE::path_to_the_acl_resource</resource>
<group id="{valor unico dentro del nodo section}" translate="label comment" sortOrder="10" showInDefault="1" showInWebsite="0" showInStore="1">
<label>A meaningful group label</label>
<comment>An additional comment helping users to understand the effect when configuring the fields defined in this group.</comment>
<!-- Add your fields here. -->
</group>
</section>
</system>
</config>

Estructura de campos field:
<field id="export" translate="label" type="text" sortOrder="1" showInDefault="1" showInWebsite="1" showInStore="1">
<label>Campo de Texto</label>
</field>

Dentro del nodo field se pueden integrar nodos para ayudar a que el campo contenga elementos específicos como a continuación se muestra:
<field id="field_test" translate="label" type="text" sortOrder="5" showInDefault="0" showInWebsite="1" showInStore="0">
<label>Prueba Field</label>
<comment>Agregando un comentario al campo</comment>
<tooltip>Un cuadro similar al comentario par aauidar a epxlicar el campo</tooltip>
<hint>Muestra información adicional pero solo se puede usar cuando se presenta el nodo frontend_model</hint>
<frontend_class>Agregar una clase CSS definida al elemento HTML de la sección que se está procesando</frontend_class>
<frontend_model>Especifica un modelo de frontend diferente para cambiar el procesamiento del dato y modifcar la salida</frontend_model>
<backend_model>Especifica un modelo de origne diferente que proporciona un conjunto de valores especificos</backend_model>
<config_path>se puede utilizar para sobrescribir la ruta de configuración genérica de un campo</config_path>
<validate>Mediante este nodo se definen las diferentes validaciones que se pueden aplicar a un campo, medinat eunas reglas de validación ya disponibles</validate>
<can_be_empty>Se usa cuando type es multiselect para especificar que un campo puede estar vacío</can_be_empty>
<if_module_enabled>Se utiliza para mostrar un campo solo cuando un módulo determinado está habilitado</if_module_enabled>
<base_url>Se utiliza en combinación con upload_dir para cargas de archivos</base_url>
<upload_dir>Especifique un directorio de destino para las cargas. Este nodo tiene atributos y nodos adicionales. Búsquelos antes de usar esto</upload_dir>
<button_url>Muestra un botón si se especifican button_url y button_label. Normalmente se utiliza en combinación con un modelo de front-end personalizado</button_url>
<button_label>Muestra un botón si se especifican button_label y button_url. Normalmente se utiliza en combinación con un modelo de front-end personalizado</button_label>
<more_url>No extensible. Consulte a continuación</more_url>
<demo_url>No extensible. Consulte a continuación</demo_url>
<hide_in_single_store_mode>Si el grupo debe ser visible en el modo de tienda única. 1 oculta el grupo; 0 muestra el grupo</hide_in_single_store_mode>
<options>No se usa. Potencialmente obsoleto</options>
<depends>Se puede utilizar para declarar dependencias en otros campos. Se usa para mostrar únicamente campos/grupos específicos cuando un campo determinado tiene un valor de 1. Este nodo espera una cadena de section/group/field</depends>
<attribute> Los modelos de front-end pueden utilizar atributos personalizados. Normalmente se utiliza para hacer que un modelo de front-end determinado sea más dinámico</attribute>
</field>