<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>observer Archives - Dicas de PHP</title>
	<atom:link href="https://dicasdephp.com.br/tags/observer/feed/" rel="self" type="application/rss+xml" />
	<link>https://dicasdephp.com.br/tags/observer/</link>
	<description>PHP de um jeito muito fácil!</description>
	<lastBuildDate>Sun, 27 Mar 2022 01:57:19 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.1</generator>
	<item>
		<title>Tutorial de como criar um módulo para Magento</title>
		<link>https://dicasdephp.com.br/tutorial-de-como-criar-um-modulo-para-magento/</link>
		
		<dc:creator><![CDATA[dicasdephp]]></dc:creator>
		<pubDate>Sat, 24 Mar 2012 03:09:55 +0000</pubDate>
				<category><![CDATA[Exemplos]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[magento]]></category>
		<category><![CDATA[módulos para magento]]></category>
		<category><![CDATA[observer]]></category>
		<category><![CDATA[tutorial]]></category>
		<guid isPermaLink="false">http://www.dicasdephp.com.br/?p=196</guid>

					<description><![CDATA[<p>Neste tutorial, vou mostrar como é o desenvolvimento de um módulo para plataforma de e-commerce open source Magento. O funcionamento final deste módulo ensinado no tutorial é extremamente simples. A principal idéia é apresentar o funcionamento do Magento, como seria os primeiros passar para o desenvolvimento de um módulo mas complexo para o Magento. O tópicos ... <a title="Tutorial de como criar um módulo para Magento" class="read-more" href="https://dicasdephp.com.br/tutorial-de-como-criar-um-modulo-para-magento/" aria-label="More on Tutorial de como criar um módulo para Magento">Ler mais</a></p>
<p>The post <a href="https://dicasdephp.com.br/tutorial-de-como-criar-um-modulo-para-magento/">Tutorial de como criar um módulo para Magento</a> appeared first on <a href="https://dicasdephp.com.br">Dicas de PHP</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Neste tutorial, vou mostrar como é o desenvolvimento de um módulo para plataforma de e-commerce open source <strong><a title="Magento Commerce" href="http://www.magentocommerce.com/" target="_blank" rel="noopener">Magento</a>.</strong></p>
<p>O funcionamento final deste módulo ensinado no tutorial é extremamente simples. A principal idéia é apresentar o funcionamento do Magento, como seria os primeiros passar para o desenvolvimento de um módulo mas complexo para o Magento.</p>
<p>O tópicos que serão apresentados no tutorial são:</p>
<ul>
<li>A pasta <em>app/code</em>;</li>
<li>A estrutura e criação de um <strong>Módulo para Magento</strong>;</li>
<li>O padrão <em>Observer</em> do Magento;</li>
<li>Criando Logs;</li>
</ul>
<h2>Antes de iniciar o tutorial</h2>
<p>Ao iniciar este tutorial, pressumimos que você já tenha o Magento instalado e rodando no seu servidor de desenvolvimento, e que você tenha permissão para adicionar novos arquivos a estrutura do Magento.</p>
<p>A versão do sistema instalada não fará diferença para este tutorial, pois o conteúdo apresentado é de fundamentos do sistema, e estão presentes em todas versões do sistema: <em><a title="Magento Community" href="http://www.magentocommerce.com/product/community-edition" target="_blank" rel="noopener">Community</a>, Professional e <a title="Magento Enterprise" href="http://www.magentocommerce.com/product/enterprise-overview" target="_blank" rel="noopener">Enterprise</a></em>.</p>
<h2>Desabilitando o cache</h2>
<p>A primeira lição para todo desenvolvedor Magento é desabilitar o cache. Isso deve ser feito pelo painel de administração do sistema, seguindo os passos: <em>Painel de Administração → Sistema → Gerenciamento de Cache → Selecionar Tudo → Ações: Desabilitar → Enviar.</em></p>
<p><em></em>O cache é o principal amigo quando a loja está no servidor de produção, melhorando muito a performance. Mas para o desenvolvedor, é o maior inimigo. Qualquer desenvolvedor de Magento já passou pela experiência de não visualizar suas modificações na loja, pelo simples problema do cache estar ativado! Então isso deve ser o primeiro passo a seguir.</p>
<h2>A pasta app/code</h2>
<p>Os principais arquivos do Magento podem ser encontrados em módulos individuais dentro da pasta <em>app/code</em>, que é dividida em três zonas: <em>community, core e local</em>.</p>
<h3>CORE</h3>
<p>O <em>app/code/core</em> é a pasta onde encontra-se todas as funcionalidades de produtos, categorias, clientes, pagamentos e etc. Até mesmo se você saiba o que está fazendo, <strong>NÃO</strong> deve modificar arquivos presente nessa pasta.</p>
<p>O Magento é estruturado de uma maneira onde você pode alterar a funcionalidade de qualquer um desses arquivos sem precisar modificá-los diretamente, garantindo que sua aplicação continue a prova de atualizações do CORE.</p>
<h3>COMMUNITY</h3>
<p>Como o próprio nome sugere, a pasta <em>app/code/community</em> é o lugar onde deve estar os módulos fornecidos por terceiros (ou seja, equipe não oficial do Magento). Estes módulos podem ser encontrados para baixar na <a title="Magento Connect" href="http://www.magentocommerce.com/magento-connect/" target="_blank" rel="noopener">Magento Connect</a>, e podem ser baixados diretamente pelo &#8220;Downloader&#8221; do sistema.</p>
<h3>LOCAL</h3>
<p>A pasta <em>app/code/local</em> é o caminho que vem vazio na instação do Magento. É o local onde deve ficar os módulos feitos sobre medida para sua instalação Magento. Este é o lugar onde vamos estar trabalhando para a construção do exemplo neste tutorial.</p>
<h2>Estruturando o módulo</h2>
<p>Vamos iniciar a estruturação do <strong>módulo</strong>. Para isso, abra o seu editor de arquivos preferido e navegue até a pasta <em>app/code/local</em> onde vamos criar novas pastas e arquivos.</p>
<h3>Definindo o &#8220;Namespace&#8221; do módulo</h3>
<p>O termo &#8220;Namespace&#8221; é usado para definir o local onde ficará o módulo na pasta <em>local</em>. Por convenção, o nome usado é da empresa que vai desenvolver o módulo, ou o próprio nome do módulo. O Magento usa o &#8220;namespace&#8221; <em>Mage.</em> Para este tutorial vamos criar o &#8220;namespace&#8221; DicasDePhp. Então, o próximo passo é criar a pasta, <em>app/code/local/DicasDePhp</em>.</p>
<h3>Nome do Módulo</h3>
<p>A próxima pasta a ser criada será a do nosso módulo. Com isso, vamos usar o nome do nosso próprio módulo. Como vamos desenvolver um que irá criar logs a cada vez que um produto é criado ou atualizado, o nome do módulo será <em>ProdutoLogs</em>. Criaremos a pasta <em>app/code/local/DicasDePhp/ProdutoLogs</em>.</p>
<p>Fazendo uma pequena revisão até o momento, vamos ter a seguinte árvore de pastas criadas. Lembrando que essa criação de pastas é case-sensitive, com isso é importante capitalizar as palavras conforme abaixo:</p>
<pre>app
   -code
      --local
         ---DicasDePhp
            ----ProdutoLogs</pre>
<p>O próximo passo é criar as configurações do nosso módulo. Para isso vamos criar uma pasta chamada <em>etc</em>, onde ficará os arquivos XML responsáveis pelas configurações dos módulos. Com isso criamos o arquivos app/code/local/DicasDePhp/ProdutoLogs/etc/config.xml.</p>
<p>Este arquivo é responsável por mostrar para o Magento onde encontra-se os arquivos do módulo, versão e eventos do sistema a observar. Por enquanto vamos apenas criar o arquivo simples, conforme código abaixo:</p>
<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!-- O nó raiz para a configuração do módulo Magento --&gt;
&lt;config&gt;
    &lt;!-- Nó do módulo contém informações básicas sobre cada módulo Magento --&gt;
    &lt;modules&gt;
        &lt;!--
            Este nó deve corresponder exatamente o nome do namespace e módulos,
            separando as pastas com underline.
        --&gt;
        &lt;DicasDePhp_ProdutoLogs&gt;
            &lt;!-- A versão do módulo. Estamos iniciando na versão 0.0.1 --&gt;
            &lt;version&gt;0.0.1&lt;/version&gt;
        &lt;/DicasDePhp_ProdutoLogs&gt;
    &lt;/modules&gt;
&lt;/config&gt;</pre>
<h2>Ativando o módulo</h2>
<p>O próximo passo é ativar o módulo. Para isso precisamos dizer ao Magento que ele existe, criando um arquivo XML na pasta de módulos do sistema <em>app/etc/modules</em>. O nome do arquivo XML pode ser o de sua preferência. De qualquer maneira o Magento irá ler todos os arquivos presentes na pasta, e interpretar o conteúdo desses arquivos.</p>
<p>Mas por conveção, vamos manter o nome do módulo, evitando que tenhamos arquivos &#8220;perdidos&#8221; na pasta de módulos do sistema. Vamos criar <em>app/etc/modules/DicasDePhp_ ProdutosLog.xml</em> com o seguinte conteúdo:</p>
<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;config&gt;
    &lt;modules&gt;
        &lt;DicasDePhp_ProdutoLogs&gt;
            &lt;!-- Dizemos se o módulo está ativo: true or false --&gt;
            &lt;active&gt;true&lt;/active&gt;
            &lt;!-- Qual local o módulo está criado. --&gt;
            &lt;codePool&gt;local&lt;/codePool&gt;
        &lt;/DicasDePhp_ProdutoLogs&gt;
    &lt;/modules&gt;
&lt;/config&gt;</pre>
<h2>Verificando o módulo</h2>
<p>Agora já podemos verificar se a instalação feita até o momento está funcionando. Claro que o módulo não executa nenhuma ação até o momento, mas é possível ver se o <strong>Magento</strong> identificou corretamente o módulo <em>ProdutoLogs</em>. Para isso, é necessário fazer o seguinte caminho no sistema: <em>Painel de Administração → Sistema → Configurações → Avançado → Avançado.</em></p>
<p><em></em>Nesta tela, haverá a opção de visualizar os módulos ativos no sistema. O módulo <em>DicasDePhp_ProdutoLogs</em> deverá estar presente na lista. Caso não esteja, pode haver algo errado na configuração.</p>
<p>O primeiro passo é verificar o <em>cache</em> do <strong>Magento</strong>, se ele está <strong>desabilidado</strong>. Caso ele esteja desabilidado, volte alguns passos e verifique novamente o que pode estar errado no seu módulo.</p>
<p>Vamos ver qual a estrutura de nosso módulo até o momento:</p>
<pre>app
   -code
      --local
         ---DicasDePhp
            ----ProdutoLogs
               -----etc
                  ------config.xml

   -etc
      --modules
         ---DicasDePhp_ProdutoLogs.xml</pre>
<h2>Definindo o Evento Observer</h2>
<p>O evento <em>Observer</em> é uma ferramenta poderesa e rápida para você conseguir extender funcionalidades do sistema, podendo assim fazer <em>rewrite</em> ou <em>overwrite</em> de qualquer método ou classe. O que queremos observar neste módulo do tutorial, é ação que o sistema dispara ao após salvar um produto no painel de administração. Então, o código que nós interessa é <em>catalog_product_save_after</em>. Descobrir qual ação precisamos cobrir requer um conhecimento mais avançado das regras de negócio do <strong>Magento</strong>. Isso foge do escopo desse tutorial, mas vou mostrar em outro post, fiquem tranquilos.</p>
<p>Agora, vamos precisar modificar o arquivo <em>config.xml</em> de nosso módulo, conforme abaixo:</p>
<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!-- O nó raiz para a configuração do módulo Magento --&gt;
&lt;config&gt;
    &lt;!-- Nó do módulo contém informações básicas sobre cada módulo Magento --&gt;
    &lt;modules&gt;
        &lt;!--
            Este nó deve corresponder exatamente o nome do namespace e módulos,
            separando as pastas com underline.
        --&gt;
        &lt;DicasDePhp_ProdutoLogs&gt;
            &lt;!-- A versão do módulo. Estamos iniciando na versão 0.0.1 --&gt;
            &lt;version&gt;0.0.1&lt;/version&gt;
        &lt;/DicasDePhp_ProdutoLogs&gt;
    &lt;/modules&gt;
    &lt;!-- Configuramos o módulo para ter comportamento no escopo global do sistema --&gt;
    &lt;global&gt;
        &lt;!-- Definindo o evento observer --&gt;
        &lt;events&gt;
            &lt;!-- O código do evento que queremos observar --&gt;
            &lt;catalog_product_save_after&gt;
                &lt;!-- Definição de um observador para este evento --&gt;
                &lt;observers&gt;
                    &lt;!--
                        Identificador único no nó catalog_product_save_after.
                        Por convenção, colocamos o nome do módulo em minúsculo.
                    --&gt;
                    &lt;dicasdephp_produtologs&gt;
                        &lt;!-- O modelo a ser instanciado --&gt;
                        &lt;class&gt;dicasdephp_produtologs/observer&lt;/class&gt;
                        &lt;!-- O método do modelo acima, para ser chamado --&gt;
                        &lt;method&gt;logUpdate&lt;/method&gt;
                        &lt;!-- Geralmente usam o tipo singleton para os observadores --&gt;
                        &lt;type&gt;singleton&lt;/type&gt;

                    &lt;/dicasdephp_produtologs&gt;
                &lt;/observers&gt;
            &lt;/catalog_product_save_after&gt;
        &lt;/events&gt;
    &lt;/global&gt;
&lt;/config&gt;</pre>
<h2>Configurando a pasta dos models</h2>
<p>No evento que definimos acima, fizemos referência a um model que ainda não está criado no tutorial. Precisamos mostrar para o Magento onde encontrar nossos models, atualizando o arquivo <em>config.xml</em> com o seguinte código:</p>
<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!-- O nó raiz para a configuração do módulo Magento --&gt;
&lt;config&gt;
    &lt;!-- Nó do módulo contém informações básicas sobre cada módulo Magento --&gt;
    &lt;modules&gt;
        &lt;!--
            Este nó deve corresponder exatamente o nome do namespace e módulos,
            separando as pastas com underline.
        --&gt;
        &lt;DicasDePhp_ProdutoLogs&gt;
            &lt;!-- A versão do módulo. Estamos iniciando na versão 0.0.1 --&gt;
            &lt;version&gt;0.0.1&lt;/version&gt;
        &lt;/DicasDePhp_ProdutoLogs&gt;
    &lt;/modules&gt;
    &lt;!-- Configuramos o módulo para ter comportamento no escopo global do sistema --&gt;
    &lt;global&gt;
        &lt;!-- Definindo os models --&gt;
        &lt;models&gt;
            &lt;!--
                Identificador único no nó de models.
                Por convenção, colocamos o nome do módulo em minúsculo.
            --&gt;
            &lt;dicasdephp_produtologs&gt;
                &lt;!--
                    O caminho para o nosso diretório de modelos,
                    com separadores de diretório substituído por underlines
                --&gt;
                &lt;class&gt;DicasDePhp_ProdutoLogs_Model&lt;/class&gt;
            &lt;/dicasdephp_produtologs&gt;
        &lt;/models&gt;

   		&lt;!-- Definindo o evento observer --&gt;
        &lt;events&gt;
            &lt;!-- O código do evento que queremos observar --&gt;
            &lt;catalog_product_save_after&gt;
                &lt;!-- Definição de um observador para este evento --&gt;
                &lt;observers&gt;
                    &lt;!--
                        Identificador único no nó catalog_product_save_after.
                        Por convenção, colocamos o nome do módulo em minúsculo.
                    --&gt;
                    &lt;dicasdephp_produtologs&gt;
                        &lt;!-- O modelo a ser instanciado --&gt;
                        &lt;class&gt;dicasdephp_produtologs/observer&lt;/class&gt;
                        &lt;!-- O método do modelo acima, para ser chamado --&gt;
                        &lt;method&gt;logUpdate&lt;/method&gt;
                        &lt;!-- Geralmente usam o tipo singleton para os observadores --&gt;
                        &lt;type&gt;singleton&lt;/type&gt;
                    &lt;/dicasdephp_produtologs&gt;
                &lt;/observers&gt;
            &lt;/catalog_product_save_after&gt;
        &lt;/events&gt;
    &lt;/global&gt;
&lt;/config&gt;</pre>
<h2>Criando um Observer Model</h2>
<p>Agora vamos criar o arquivo que irá ser instanciado no momento que o evento for disparado.</p>
<p>Para isso vamos criar o arquivo <em>app/code/local/DicasDePhp/ProdutoLogs/Model/Observer.php</em>, com o seguinte código:</p>
<pre>&lt;?php

class DicasDePhp_ProdutoLogs_Model_Observer {

    /**
     * O Magento irá passar a Varien_Event_Observer object como
     * o primeiro parâmetro de eventos despachados.
     */
    public function logUpdate(Varien_Event_Observer $observer) {
        // Recuperar o produto que está sendo atualizado a partir do observador evento
        $product = $observer-&gt;getEvent()-&gt;getProduct();

        // Escrevendo uma nova linha no var/log/product-updates.log
        $name = $product-&gt;getName();
        $sku = $product-&gt;getSku();
        Mage::log("{$name} ({$sku}) updated", null, 'atualizacoes-produtos.log');
    }

}</pre>
<h2> OK, está pronto!</h2>
<p>Com isso, chegamos ao final do tutorial. Se todos os passos foram seguidos corretamente, você deve ter a estrutura abaixo:</p>
<pre>app
   -code
      --local
         ---DicasDePhp
            ----ProdutoLogs
               -----Model
                  ------Observer.php

               -----etc
                  ------config.xml

   -etc
      --modules
         ---DicasDePhp_ProdutoLogs.xml</pre>
<p>Agora, cada vez que você salvar ou criar um produto no Magento, um registro de log deve ser criado na pasta <em>var/log</em>, dentro do arquivo <em>atualizacoes-produtos.log</em>.</p>
<p>Se o arquivo não aparecer na pasta, procure verificar as permissões de escrita da pasta que o sistema tem. Ainda é necessário verificar se no Magento está habilitado para exibir os logs. O caminho para isso é <em>Painel de Administração → Sistema → Configurações → Desenvolvedor → Configurações de Log → Ativar.</em></p>
<p>A idéia desse tutorial é mostrar um pouco do funcionamento do Magento. Após desenvolver este tutorial, recomendamos que você passe um tempo explorando a pasta <em>app/code/core</em> do Magento, assim você vai poder ter uma boa idéia de todo o funcionamento do sistema.</p>
<p>Você pode baixar o módulo deste tutorial:<br />
&#8211; <a title="Clique Aqui" href="http://www.dicasdephp.com.br/wp-content/uploads/2012/03/ProdutoLogs.zip">ProdutoLogs</a>.</p>
<p>Dúvidas e feedback são bem vindos, é só deixar um comentário!</p>
<p>Este tutorial foi escrito originalmente no blog <a title="Smashing Magazine" href="http://coding.smashingmagazine.com/2012/03/01/basics-creating-magento-module/" target="_blank" rel="noopener">Smashing Magazine</a>, por <a title="Posts by Joseph McDermott" href="http://coding.smashingmagazine.com/author/joseph-mcdermott/" rel="author noopener" target="_blank">Joseph McDermott</a>. Traduzido e adaptado para o Dicas de PHP por <a title="Fausto Schneider - Developer WEB" href="http://www.faustoschneider.com.br" target="_blank" rel="noopener">Fausto Schneider</a>.</p>
<p>The post <a href="https://dicasdephp.com.br/tutorial-de-como-criar-um-modulo-para-magento/">Tutorial de como criar um módulo para Magento</a> appeared first on <a href="https://dicasdephp.com.br">Dicas de PHP</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
