Cursos Magento

Como usar PHP em blocos e páginas CMS no Magento

,

Publicado em 23 de outubro de 2018

Uma das coisas que me fascina no Magento é a flexibilidade que temos para alterar e modificar o layout de páginas através das atualizações de Layout XML. Entender os XML’s nem sempre é tarefa fácil, mas uma vez que você entende como eles funciona, pode fazer atualizações importantes nos componentes de uma página direto no painel administrativo, sem alterar arquivo algum.

O Magento monta todas as páginas usando blocos. Um bloco é um conjunto representado por uma classe PHP (inteligência) e uma camada de visualização: os templates phtml. A organização e a ordem como esses blocos são exibidos é feita através de arquivos XML’s presentes nos temas e nos módulos da loja.

Inserindo blocos em páginas e blocos CMS

Para inserir um bloco dentro de uma página CMS ou mesmo em um bloco estático, podemos usar a diretiva abaixo na área de conteúdo:

{{block type="core/template" name"nomedomeubloco" template="caminho/do/template.phtml"}}

Como parâmetros temos:
  • type: caminho para classe PHP do bloco. A primeira parte (core) é definida no arquivo etc/config.xml do módulo onde ela foi declarada. A segunda parte (template) é o caminho para o arquivo php dentro da pasta Block do módulo onde ela foi declarada. Neste caso app/code/core/Mage/Core/Block/Template.php.
  • name: nome do bloco. Deve ser um nome único.
  • template: caminho relativo para o arquivo phtml. O arquivo phtml é relativo a pasta app/design/frontend/[pacote]/[tema]/template. Se considerarmos que o arquivo acima não existe no meu tema, o magento iria buscar o arquivo em app/design/frontend/base/default/template/caminho/do/template.phtml.

Exemplo prático em Vídeo

No vídeo abaixo eu respondo a uma dúvida de um dos alunos do curso de criação de módulos e desenvolvimento backend para Magento 1. Veremos como inserir um bloco php que exibe a quantidade de itens que o cliente tem no carrinho.

Entenda o “type”

O parâmetro type de um bloco corresponde ao caminho dele dentro da pasta Block do módulo que o declarou. No primeiro exemplo temos core/template. A primeira parte (core) foi declarada da seguinte forma no arquivo abaixo:

<config>
    <global>
        <blocks>
            <core>
                <class>Mage_Core_Block</class>
            </core>
        </blocks>
    </global>
</config>

Desta forma, sempre que nos referirmos a um type="core/ estaremos falando da pasta Block deste módulo.

Então, quando especificamos core/template a classe que será usada está localizada em app/code/core/Mage/Core/Block/Template.php.

Qualquer módulo pode ter um ou mais classes do tipo Block. O Magento varrerá e mesclará todos os arquivos config.xml de todos os módulos para obter esta informação.

Simples né?

Entenda o “template”

O template phtml é o arquivo responsável pela visualização do bloco. Ele contém código HTML e PHP, mas não deve conter nenhuma inteligência ou regra de negócio.

A classe PHP definida em type é representada pela variável $this dentro do arquivo de template phtml. Todos os métodos públicos dela e da sua classe pai ficam disponíveis para uso.

Veja um exemplo de uso nativo do Magento:

<?php $_product = $this->getProduct(); ?>

class Mage_Catalog_Block_Product_View extends Mage_Catalog_Block_Product_Abstract
    public function getProduct()
    {
        if (!Mage::registry('product') && $this->getProductId()) {
            $product = Mage::getModel('catalog/product')->load($this->getProductId());
            Mage::register('product', $product);
        }
        return Mage::registry('product');
    }
}

 

Indo além

Como disse, gosto muito assunto, e aqui no Magenteiro existem vários posts e vídeos sobre Layout XML e blocos. Você pode encontrá-los nas tag Layout XML.

Também falo bastante sobre o assunto nos cursos Torne-se um desenvolvedor Magento Front End e Criação de Módulos e Desenvolvimento Backend para Magento.

Últimos posts por Ricardo Martins (exibir todos)
Assuntos: | | |
Comentários

Deixe seu comentário

[fbcomments url="https://www.magenteiro.com/blog/magento-1/desenvolvimento/como-usar-php-em-blocos-e-paginas-cms-no-magento/"]