Criando um módulo básico no Magento
A criação de um modulo no Magento E-commerce exige conhecimento em várias coisas como a declaração de resources, declaração e criação de eventos, criação de blocks, helpers e models, etc. Na criação de uma loja virtual você pode também tanto criar módulos para suas próprias funcionalidades como para funcionalidades já existentes no Magento, como métodos de envio ou métodos de pagamento. Cada uma dessas merece um post específico pela sua complexidade.
Nesse artigo vou explicar a criação de um módulo básico. Tudo que for necessário para começar a escrever um módulo.
Entendendo a estrutura de módulos no Magento
Os módulos devem ficar dentro da pasta app que por sua vez fica na raíz da aplicação. Como o Magento implementa MVC os arquivos dos módulos que contêm código PHP e código HTML ficam separados dentro das pastas code e design respectivamente. Se você está perdido com esse monte de pastas não se preocupe, farei um post só sobre elas.
Já dentro da pasta code, temos mais 3 pastas:
- core
Aqui dentro ficam todos os módulos que fazem parte do core do Magento. Nunca altere nenhum arquivo aqui dentro, pois o risco de dar problema na hora de fazer upgrade é muito grande. - community
Já nesta pasta fica todos os módulos disponibilizados pela comunidade. Se você baixar algum módulo a partir do Magento Connect ele vai jogar esses módulos aqui dentro. Caso você baixe por conta própria é recomendado que você jogue o código aqui dentro. - local
A pasta local é onde você deve escrever os módulos específicos da sua loja. Se por exemplo você sobrescreveu algum módulo do Magento para atender a uma especificação do seu cliente, ponha seu código aqui.
Dentro de cada pasta dessa temos várias outras pastas. Essas pastas representam as companhias que desenvolveram os módulos e dentro das pastas das companhias temos os módulos disponibilizados por elas. Por exemplo, se a NOIX criasse um módulo chamado AdvancedBanners e ou outro AdvancedSearch, e eles fossem disponibilizados para a comunidade teriamos os dois caminhos:
- /app/code/community/Noix/AdvancedBanners
- /app/code/community/Noix/AdvancedSearch
Obs: Os módulos do Magento estão sempre dentro de ‘/app/code/core/Mage‘.
Entendendo o módulo
Antes de mais nada vamos entender o que nosso módulo irá fazer. Como a idéia é manter a simplicidade para melhorar o entendimento, vamos apenas fazer com que nosso módulo imprima ‘Hello World’ quando eu acessar o endereço http://minhaloja.com.br/helloword.
É importante saber que o Magento é escrito em cima do Zend Framework e o entender básico do fluxo interno. Em resumo funciona da seguinte maneira:
- Recebendo a requisição do usuário
Quando o usuário escreve no navegador o Magento recebe a informação da URL que eles está tentando acessar. Após receber a URL do usuário o Magento faz o seguinte processo: retira sua url base e repassa todo o resto para seu Router. No nosso caso nossa url base é http://minhaloja.com.br/ e tentaremos acessar o endereço http://minhaloja.com.br/helloword. Logo o Magento repassará para seu Router o texto ‘helloworld‘. - Fazendo rotas
O Magento mantém um registro de todas as rotas que ele deve fazer em seu Router, ou seja, uma vez a URL tratada, o texto que restar o Magento saberá tratar para descobrir qual módulo, qual controller e qual action ele deve chamar e quais os parâmetros ele deve passar.
Sabendo disso vamos criar a estrutura do nosso módulo que deverá seguir o caminho: /app/code/local/Noix/HelloWorld
Dentro da pasta HelloWorld deve ser criada uma pasta chamada controllers, onde ficarão todos os controllers daquele módulo. Crie também dentro de HelloWorld uma pasta chamada etc. O coração dos módulos do Magento são seus XML’s. Quase tudo nele é configurável através de XML. E as configurações dos módulos ficarão dentro de suas respectivas pastas etc.
Agora temos as pastas /Noix/HelloWorld/controllers e /Noix/HelloWorld/etc.

Configurando o módulo
Crie dentro da pasta etc um arquivo chamado config.xml. Dentro dele fica toda a configuração básica para o funcionamento do módulo.
O XML deve ser bem formatado portanto começaremos com a tag:
<?xml version="1.0" encoding="UTF-8"?>
Como em um XML bem formatado é obrigatório ter um nó pai, o Magento padronizou que seu nó pai será sempre chamado de config. Então ficará:
<?xml version="1.0" encoding="UTF-8"?> <config> </config>
Em seguinda daremos informações do módulo como seu nome, versão e até mesmo quais outros módulos ele depente:
<config>
<modules>
<Noix_HelloWorld>
<version>1.0</version>
<depends>
<!-- ** Nosso módulo não depende de nada. mas se dependesse por exemplo do
módulo de envio do Magento escreveriamos assim:
<Mage_Shipping />
-->
</depends>
</Noix_HelloWorld>
</modules>
</config>
Após isso continuaremos criando mais nós dentro do nó config. Quando configuramos um módulo temos que informar qual tipo de configuração estaremos fazendo. São básicamente 3 tipos:
- global
Informações gerais do módulo ou coisas que será usado por ele independente se é na área administrativa ou no frontend. Por exemplo: declarações de models do módulo, declarações blocks, reescritas de URL, configuração de resources, etc.
- frontend
Configurações que afetaram o frontend do Magento, ou seja, a parte em que os usuários compradores tem acesso. Aqui podemos informar nome dos arquivos de tradução, nome do arquivos xml de configuração de layout, rotas que o Magento fará no frontend, etc.
- adminhtml
Aqui vale o mesmo para o frontend, porém as configurações afetaram apenas a área administrativa do Magento.
Agora que sabemos disso, vamos informar ao Magento que ele deve ter em seu Router uma rota que ao receber o text ‘helloworld‘ na URL ele procure pelos controllers dentro do módulo ‘Noix_HelloWorld‘.
<frontend>
<!-- Aqui fica todas as configurações de rota do Magento -->
<routers>
<helloworld>
<!-- estamos dizendo que está rota virá pelo frontend -->
<use>standard</use>
<!-- Os argumentos para configurar a rota
Dizemos qual o nome será chamado(frontName) e qual modulo ele irá procurar(module)
-->
<args>
<module>Noix_HelloWorld</module>
<frontName>helloworld</frontName>
</args>
</helloworld>
</routers>
</frontend>
Pronto! Agora o Magento sabe que toda vez que alguem acessar http://minhaloja.com.br/helloword ele deve procurar por controllers dentro da pasta ‘/app/code/local/Noix/HelloWorld/controllers‘. Ou seja, como a parte de controllers o Magento herda do Zend Framework, por padrão ele irá procurar pelo arquivo IndexController.php, instanciar a classe ‘Noix_HelloWorld_IndexController’ e chamar o método indexAction(). Agora se o endereço chamado for http://minhaloja.com.br/helloword/foo/bar, ele irá procurar pelo arquivo FooController.php, instanciar a classe ‘Noix_HelloWorld_FooController‘ e chamar o método barAction().
Confira como ficou o XML na íntegra:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Noix_HelloWorld>
<version>1.0</version>
<depends>
<!-- ** Nosso módulo não depende de nada. mas se dependesse por exemplo do
módulo de envio do Magento escreveriamos assim:
<Mage_Shipping />
-->
</depends>
</Noix_HelloWorld>
</modules>
<frontend>
<!-- Aqui fica todas as configurações de rota do Magento -->
<routers>
<helloworld>
<!-- estamos dizendo que está rota virá pelo frontend -->
<use>standard</use>
<!-- Os argumentos para configurar a rota
Dizemos qual o nome será chamado(frontName) e qual modulo ele irá procurar(module)
-->
<args>
<module>Noix_HelloWorld</module>
<frontName>helloworld</frontName>
</args>
</helloworld>
</routers>
</frontend>
</config>
Com isso precisamos apenas criar nossa classe imprimindo o texto "Hello Word":
<?php
class Noix_HelloWorld_IndexController extends Mage_Core_Controller_Front_Action
{
public function indexAction()
{
echo 'Hello World';
}
}
Talvez você esteja esperando que a frase "Hello World" apareça dentro do layout do Magento, porém ao executar o código você verá que a tela ficará toda branca com apenas o texto nela. Para que essa frase seja apresentada dentro do Magento é necessário aplicarmos mais uns estudos em cima das views e dos blocks do Magento. Mas isto vai ficar para um outro post.
Antes de finalizar precisamos informar ao Magento que nosso módulo existe para que ele seja executado. Crie dentro da pasta ‘/app/etc/modules’ o arquivo ‘Noix_HelloWorld.xml’ e insira o seguinte conteúdo:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Noix_HelloWorld>
<!-- Informo que o módulo virá ativo por padrão.
Isso é configuravel na área administrativa -->
<active>true</active>
<!-- Qual o tipo a aplicação: core, local ou community -->
<codePool>local</codePool>
</Noix_HelloWorld>
</modules>
</config>
ATENÇÃO: preste muita atenção quando escrever "codePool". Se você deixar o "P" minúsculo o Magento vai dar um erro quase impossível de descobrir onde é.
Dúvidas, reclamações ou sugestões? Por favor, utilize os comentários.









Nossa Kara!! Muito bom seu post!
Estou iniciando com magento, joomla e, consequentemente, MVC.
Clareou legal minha compreensão em relação ao magento.
O site tá de parabéns.
Opa! Muito obrigado pelo comentário! Estimula a gente a querer escrever mais e ajudar a comunidade.
Espero que o post tenha te ajudado bastante. Estou escrevendo mais para ajudar quem tá começando.
Qualquer dúvida pode entrar em contato com a gente!
Olá,
Muito bom o artigo!…já está nos favoritos!..rs
Parabéns!
Abs
Bruno Viana meus parabéns pelo ótimo posto para iniciação em desenvolvimento na plataforma magento, muito bom mesmo, continue assim ajudando a galera que tem interesse.
Abraço!
Obrigado pelo comentário, Marcos!
Eu acredito que é assim que criamos uma comunidade forte e ativa.Vmos todos nos ajudar.
Fique ligado que logo virão mais.
Abraços.
Parabéns ae Bruno, ótimo post.
Gostei muito do conteúdo, consegui entender melhor a estrutura dos arquivos do magento.
Só não consegui rodar este módulo hello world! O que será que fiz de errado? preciso configurar alguma coisa no adm do magento para ver funcionando este exemplo? Estou com o magento publicado na minha máquina.
Parabéns… muito bom…. ficou bem claro…. só não consegui rodar tb…. já revisei e revisei….. rola de vc dra u help maninho?
Parabéns!
Ficou muito bom e me tirou uma pá de dúvidas.
Porém não consegui criar um módulo, estou que nem o Guilherme…. magento instalado na minha maquina local porém ao executar o link: http://localhost/magento/helloworld aparece esse erro no browser:
Arquivo não encontrado
O Firefox não conseguiu localizar o arquivo http://localhost/magento/helloworld.
Um abração!
Parabéns!
Meu e-mail no post anterior tava errado
Ficou muito bom e me tirou uma pá de dúvidas.
Porém não consegui criar um módulo, estou que nem o Guilherme…. magento instalado na minha maquina local porém ao executar o link: http://localhost/magento/helloworld aparece esse erro no browser:
Arquivo não encontrado
O Firefox não conseguiu localizar o arquivo http://localhost/magento/helloworld.
Um abração!
Fiquei um tempão para ver que tinha escrito codePool erro, tinha escrito codePoll.
Vlw pelo dica, blog com informação util.
Parabéns pelo post, muito esclarecedor.