Parametriza tus módulos Magento con configuraciones personalizadas

por David Abad
Configuraciones personalizadas

Magento facilita a los desarrolladores la parametrización de los módulos personalizados, permitiendo incluir nuevos parámetros de configuración en el área de administración de forma rápida y sencilla.

Configuración de módulos

Magento incorpora una sección en el administrador destinada a establecer los diferentes parámetros de configuración de los módulos disponibles. 

Esta página es accesible desde el menú Stores -> Configuration y agrupa los diferentes parámetros de configuración en secciones y grupos. Además, esta página incorpora un selector de scope, ya que algunos parámetros admiten valores diferentes para cada website, store, etc.

Magento: Stores - Config

En la imagen anterior puede observarse una sección concreta de la página de configuraciones:

  • Sección: Currency Setup (Tab: General)
  • Grupo: Currency Options
  • Parámetros: Base Currency, Default Display Currency, etc. 

Incluir parámetros configurables en módulos

A la hora de desarrollar un módulo personalizado para Magento, es posible definir parámetros configurables que se incorporarán a la página del administrador mostrada anteriormente.

Para ello, se debe crear un fichero <Modulo>/etc/adminhtml/system.xml donde definir los parámetros configurables. 

<?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>
        <section id="mi_modulo" translate="label" type="text" sortOrder="100" showInDefault="1" showInWebsite="1" showInStore="1">
            <label>Mi módulo</label>
            <tab>general</tab>
            <resource>MiVendor_MiModulo::config</resource>
            <group id="opciones" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">
                <label>Opciones</label>
                <field id="mi_parametro" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">
                    <label>Mi Parámetro</label>
                    <comment>Mi parámetro de configuración</comment>
                </field>
            </group>
        </section>
    </system>
</config>

Este código muestra como añadir un nuevo parámetro de configuración en una nueva sección personalizada:

  • Sección: Mi Módulo (id: mi_modulo)
  • Grupo: Opciones (id: opciones)
  • Parámetro: Mi Parámetro (id: mi_parametro)
Parámetros con valores seleccionables

Además de campos de configuración de tipo texto, también es posible mostrar selectores con una lista de valores predeterminados. 

Por ejemplo, el siguiente código incluye un campo con un selector de tipo Yes-No:

<field id="estado" translate="label" type="select"  sortOrder="10">
    <label>Estado</label>
    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
    <comment>Activar módulo</comment>
</field>
Dependencias entre parámetros

Magento también permite establecer dependencias entre los campos de configuración (<depends>), de modo que determinados campos solo sean visibles si un campo tiene un valor concreto:

<field id="estado" translate="label" type="select" sortOrder="10">
    <label>Estado</label>
    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
    <comment>Activar módulo</comment>
</field>
<field id="mi_parametro" translate="label" type="text" sortOrder="20">
    <label>Mi Parámetro</label>
    <comment>Mi parámetro de configuración</comment>
    <depends>
        <field id="estado">1</field>
    </depends>
</field>

Configuraciones por defecto

Magento permite definir valores por defecto para los parámetros de configuración definidos en los módulos.

Para ello, se debe crear un fichero <Modulo>/etc/config.xml con el siguiente formato:

<?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>
        <mi_modulo>
            <opciones>
                <mi_parametro>Valor por defecto</mi_parametro>
            </opciones>
        </mivendor_mimodulo>
    </default>
</config>

Estos valores por defecto solo son aplicables cuando no se ha establecido ningún valor concreto desde la sección de configuraciones del administrador.

Almacenamiento de configuraciones

Los valores de los parámetros de configuración definidos desde el administrador son almacenados en la tabla core_config_data de base de datos. 

Magento: core_config_data

En esta tabla se almacenan los valores de configuración clasificados por un path con el formato: sección/grupo/parámetro.

Si nuestro sistema Magento cuenta con diferentes websites, stores o store views, también será posible almacenar distintos valores para los parámetros según el scope.

Obtener configuraciones desde código

Estos parámetros de configuración pueden ser leídos desde el código de nuestro módulo, haciendo que su lógica sea parametrizable y proporcione mayor flexibilidad.

Para obtener los valores de estos parámetros se debe utilizar: 

  • \Magento\Framework\App\Config\ScopeConfigInterface::getValue()
  • \Magento\Framework\App\Config\ScopeConfigInterface::isSetFlag()
use Magento\Framework\App\Config\ScopeConfigInterface;
use Magento\Store\Model\ScopeInterface;

class MiClase
{
    private const XML_MIPARAMETRO = 'mi_modulo/opciones/mi_parametro';

    public function __construct(
        protected ScopeConfigInterface $scopeConfig
    ) {}

    public function getConfigValue()
    {
        return $this->scopeConfig->getValue(self::XML_MIPARAMETRO, ScopeInterface::SCOPE_STORE);
    }
}

Configuraciones en config.php y env.php

Otra forma de establecer valores para los parámetros de configuración consiste en indicarlos en los ficheros app/etc/config.php o app/etc/env.php de nuestro proyecto:

'system'=> [
    'default' =>[
        'mi_modulo' => [
            'opciones' => [
                'mi_parametro' => 'Valor personalizado'
            ]
        ]
    ]
]

Los valores especificados en estos ficheros quedarán bloqueados y no podrán ser modificados desde el administrador. Por tanto, especificar parámetros en estos ficheros es especialmente útil para configuraciones críticas para el correcto funcionamiento de la aplicación, que nunca deberían modificarse.

Si el valor de los parámetros es el mismo para todos los entornos de nuestro proyecto (y no son datos sensibles) se deberían almacenar en el fichero config.php. Mientras que si el valor de los parámetros puede ser diferente por entorno, se deberían definir en el fichero env.php.

Caché de configuraciones

Es importante tener en cuenta que Magento incluye una caché específica para almacenar estas configuraciones y poder obtener sus valores de forma más eficiente. 

Por ello, al modificar cualquier valor de estas configuraciones es conveniente limpiar la caché correspondiente desde el administrador o por línea de comandos:

bin/magento cache:flush config 

Déjanos tu email para recibir contenido interesante en tu bandeja de entrada, cada mes.

¡No hacemos spam!

Otros artículos