Magento: Criando Configurações do Sistema no Admin

Em meio ao desenvolvimento de módulos, as vezes nos deparamos com alguns problemas. Dentre eles é criar entradas de configuração em Sistema -> Configurações. Quando comecei a desenvolver em magento, não tinha tantas informações como hoje e principalmente conhecimento. Sei da dificuldade de encontrar um bom conteúdo sobre determinados assuntos, e um deles é este.

Uma rotina simples que muitas vezes precisamos mas na maioria das vezes nos debatemos para criar e fazer funcionar e o que é pior, não entendemos a estrutura da mesma. Neste artigo explicarei um pouco sobre como criar entradas de configurações para gravar informações úteis para os nossos módulos. Um exemplo clássico é uma entrada de Módulo ativo para poder executar ou não a codificação programada em seu módulo evitando muito transtorno quando quer desativa-lo.

 

1- Estrutura Básica de um Módulo Magento

Nossos arquivos para configurar a criação de entradas na tela de configuração do magento estão situados na pasta etc do nosso módulo. Por isso abaixo coloquei um demonstrativo básico de uma estrutura básica para um módulo apenas para ficar mais claro.

No caso de nosso módulo o Namespace seria Infusion e o ModuleName poderia ser Mymodule por exemplo. Segue abaixo uma imagem da estrutura básica:


Modelo de Estrutura de Módulo Magento

Estrutura Básica de um Módulo Magento

 

2 – Entendendo o System.xml do Módulo Magento

Primeiramente você deve criar um arquivo chamado system.xml onde as configurações dos campos que sua aba de configuração irão ser especificadas.

<?xml version="1.0" encoding="UTF-8"?> 
<config>
   <tabs>
       <infusion translate="label" module="mymodule">
           <label>Infusion</label>
           <sort_order>100</sort_order>
       </infusion>
   </tabs>
   <sections>
       <infusion translate="label" module="mymodule">
           <label>Configurações Infusion</label>
           <tab>infusion</tab>
           <sort_order>1000</sort_order>
           <show_in_default>1</show_in_default>
           <show_in_website>1</show_in_website>
           <show_in_store>1</show_in_store>
 
           <groups>
               <infusion_group translate="label" module="mymodule">
                   <label>My Extension Options</label>
                   <frontend_type>text</frontend_type>
                   <sort_order>1000</sort_order>
                   <show_in_default>1</show_in_default>
                   <show_in_website>1</show_in_website>
                   <show_in_store>1</show_in_store>
 
                   <fields>
                       <infusion_input translate="label">
                           <label>My Input Field: </label>
                           <comment>My Comment</comment>
                           <frontend_type>text</frontend_type>
                           <sort_order>20</sort_order>
                           <show_in_default>1</show_in_default>
                           <show_in_website>1</show_in_website>
                           <show_in_store>1</show_in_store>
                       </infusion_input>
                       <infusion_select translate="label">
                           <label>My Dropdown: </label>
                           <comment>Source model provider Magento's default Yes/No values</comment>
                           <frontend_type>select</frontend_type>
                           <sort_order>90</sort_order>
                           <show_in_default>1</show_in_default>
                           <show_in_website>1</show_in_website>
                           <show_in_store>1</show_in_store>
                           <source_model>adminhtml/system_config_source_yesno</source_model>
                       </infusion_select>
                   </fields>
               </infusion_group>
           </groups>
       </infusion>
   </sections>
</config>

O Atributo module=”mymodule” identifica para qual módulo estas configurações de abas, grupos e seções irá responder. Os nomes idenficados como infusion, infusion_group, infusion_input e infusion_select são arbitrários. Você pode utilizar qualquer nome para identifica-los, por isso recomendo algo sugestivo e semântico. Apenas lembrando que o mesmo identificador utilizado para tab deve ser passado dentro do identificador tab da section.

 

3 – O Config.xml do Módulo Magento

Exemplo de config.xml com o identificador do Módulo:

<?xml version="1.0"?> 
<config>
   <modules>
       <Infusion_Module>
           <version>0.1.0</version>
       </Infusion_Module>
   </modules>
   <global>
       <models>
           <mymodule>
               <class>Infusion_Module_Model</class>
           </mymodule>
       </models>
       <helpers>
           <mymodule>
               <class>Infusion_Module_Helper</class>
           </mymodule>
       </helpers>
   </global>
</config>

Em nosso config devemos criar os identificadores de Helpers e Models (este ultimo não tenho certeza se é realmente necessário para o funcionamento dos campos e operações das Configs que estamos criando) conforme visto acima.

 

4 – Como criar ACLs para permissões no magento

Por ultimo precisamos criar as ACLs as permissões de acesso. Caso não seja criado estas configurações você não conseguirá acessar a página de configurações que criaste e receberá uma página como erro 404 (Página não encontrada). Para criar estas ACLs devemos criar um arquivo chamado adminhtml.xml conforme o código abaixo:

<?xml version="1.0"?> 
<config>
   <acl>
       <resources>
           <all>
               <title>Allow Everything</title>
           </all>
           <admin>
               <children>
                   <system>
                       <children>
                           <config>
                               <children>
                                   <infusion>
                                       <title>Infusion</title>
                                   </infusion>
                               </children>
                           </config>
                       </children>
                   </system>
               </children>
           </admin>
       </resources>
   </acl>
</config>

Como recuperar os valores destas configurações? Você pode utilizar o método conforme a seguir:

Mage::getStoreConfig('infusion/infusion_group/infusion_input',Mage::app()->getStore());
   Mage::getStoreConfig('infusion/infusion_group/infusion_select',Mage::app()->getStore());

Lembrando que estas configurações são gravadas na tabela Core_Config_Data, então acessando esta tabela, tanto o path para acesso (infusion/infusion_group/infusion_input) como os valores definidos podem ser vistos acessando-a.

Para este post, me baseei em dois artigos muito bons que encontrei na internet. O primeiro do site Inchoo e o segundo do site Alanstorm.

Espero que possa ter ajudado.

Posts Relacionados