Dando continuidade ao nosso minicurso de desenvolvimento de módulo para Magento 2, agora veremos como trabalhar com system.xml e helper.
O diretório etc/ é o responsável pelas configurações do nosso módulo. Nele podemos encontrar um di.xml, events.xml e etc. Podemos ter arquivos com configuração global ou específico para o escopo frontend ou admin. Nesse caso, trabalhamos com o admin.
Trabalhando com System.xml
O system.xml é o arquivo responsável para trabalharmos com configurações de ativação e desativação de módulos além de outros campos que podemos usar para adicionar informações ao nosso módulo. Os módulos ficam disponíveis em Stores –> Configuration, conforme imagem:
Crie o arquivo etc/adminhtml/system.xml, conforme abaixo:
No system.xml adicione:
<?xml version="1.0"?> <!-- /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd"> <system> <tab id="abraaomarques" translate="label" sort="10"> <label>AbraaoMarques</label> </tab> <section id="abraaomarques_newslettermodal" translate="label" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1"> <class>separator-top</class> <label>Newsletter Modal</label> <tab>abraaomarques</tab> <resource>AbraaoMarques_NewsletterModal::newslettermodal_config</resource> <group id="general" translate="label" type="text" sortOrder="1" showInDefault="1" showInWebsite="1" showInStore="1"> <label>General Configuration</label> <field id="enable" translate="label" type="select" sortOrder="1" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1"> <label>Module Enable</label> <source_model>Magento\Config\Model\Config\Source\Yesno</source_model> </field> <field id="title" translate="label" type="text" sortOrder="1" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1"> <label>Title</label> <comment>Modal title here</comment> </field> <field id="description" translate="label" type="textarea" sortOrder="1" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1"> <label>Description</label> <comment>Modal description here</comment> </field> </group> </section> </system> </config>
Entendendo o system.xml
<tab id="abraaomarques" translate="label" sort="10"> <label>AbraaoMarques</label> </tab>
Informamos ao Magento 2 que estamos criando uma nova TAB em nosso Stores –> Configuration
<section id="abraaomarques_newslettermodal" translate="label" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1"> <class>separator-top</class> <label>Newsletter Modal</label> <tab>abraaomarques</tab>
Informamos que em nossa TAB haverá uma seção chamada Newsletter Modal.
<group id="general" translate="label" type="text" sortOrder="1" showInDefault="1" showInWebsite="1" showInStore="1"> <label>General Configuration</label> <field id="enable" translate="label" type="select" sortOrder="1" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1"> <label>Module Enable</label> <source_model>Magento\Config\Model\Config\Source\Yesno</source_model> </field> <field id="title" translate="label" type="text" sortOrder="1" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1"> <label>Title</label> <comment>Modal title here</comment> </field> <field id="description" translate="label" type="textarea" sortOrder="1" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1"> <label>Description</label> <comment>Modal description here</comment> </field> </group>
Dentro de nossa seção, criamos um tag <group> e adicionamos os campos que serão exibidos nesse grupo.
Obs.: Para saber como validar os campos no system.xml, por favor, veja o artigo Magento 2 Validando Campos no System.xml deste blog.
Após isso, rode o di:compile no seu terminal e atualize a sua página:
Assim, nós já temos a opção de ativar/desativar o nosso módulo e os campos para adicionar conteúdo nele!
O Magento salva as configurações dos módulos que estão em Stores –> Configuration na tabela core_config_data:
O Magento usa o id dos campos section, group e field para formar o path com seu respectivo valor na tabela informada.
Tendo entendido isso, podemos avançar.
Trabalhando com Helper
<?php namespace AbraaoMarques\NewsletterModal\Helper; use Magento\Store\Model\ScopeInterface; use Magento\Framework\App\Config\ScopeConfigInterface; class Data { const MODULE_PATH = 'abraaomarques_newslettermodal/general/'; /** * @var ScopeConfigInterface */ protected $_scopeConfig; /** * Data constructor. * @param ScopeConfigInterface $scopeConfig */ public function __construct( ScopeConfigInterface $scopeConfig ) { $this->_scopeConfig = $scopeConfig; } /** * @return mixed */ public function getIsModuleEnable() { return $this->_scopeConfig->getValue(self::MODULE_PATH.'enable',ScopeInterface::SCOPE_STORE); } /** * @return mixed */ public function getModalTitle() { return $this->_scopeConfig->getValue(self::MODULE_PATH.'title',ScopeInterface::SCOPE_STORE); } /** * @return mixed */ public function getModalDescription() { return $this->_scopeConfig->getValue(self::MODULE_PATH.'description',ScopeInterface::SCOPE_STORE); } }
Entendendo o Helper
const MODULE_PATH = 'abraaomarques_newslettermodal/general/';
Armazenamos o path base do nosso módulo.
/** * @return mixed */ public function getIsModuleEnable() { return $this->_scopeConfig->getValue(self::MODULE_PATH.'enable',ScopeInterface::SCOPE_STORE); } /** * @return mixed */ public function getModalTitle() { return $this->_scopeConfig->getValue(self::MODULE_PATH.'title',ScopeInterface::SCOPE_STORE); } /** * @return mixed */ public function getModalDescription() { return $this->_scopeConfig->getValue(self::MODULE_PATH.'description',ScopeInterface::SCOPE_STORE); }
Criamos os métodos responsáveis para trazer as informações do nosso módulo a partir do banco de dados.
Dúvidas? Posta aí!!!
Aquele abraço!
Aqui para mim não salvou as configurações do módulo da tabela ( core_config_data ). Estou usando o Magento 2.3.1
O módulo está ativo? Está exibindo no admin?
Dá um tail no log do Apache ou Nginx e veja se retorna algum erro quando salvar as configurações no módulo via admin.
Aquele abraço!