Magento 2 Curso XML e Helper

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:

Magento 2 Curso XML e Helper - Configuração no Admin

Crie o arquivo etc/adminhtml/system.xml, conforme abaixo:

Magento 2 Curso XML e Helper - Estrutura dos arquivos no admin

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:

Magento 2 Curso XML e Helper - Exibindo o módulo no admin

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:

Magento 2 Curso XML e Helper - Entendo o funcionamento do módulo no banco de dados.

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!

2 respostas a “Magento 2 Curso XML e Helper”

    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!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *