Cursos Magento

Executando código PHP dentro de atributos de produtos

, , ,

Atualizado em 19 de julho de 2021

Algumas vezes acabamos por criar atributos de produto que aceitam conteúdo HTML, e consequentemente habilitam o editor WYSIWYG.

Habilitando editor WYSIWYG no Magento
Configuração do atributo de produto
Botão WYSIWYG
Botão do Editor aparece na edição do produto para o atributo definido

No entanto, não é possível inserir nenhum bloco personalizado, ou mesmo executar códigos PHP no editor.

Como sabemos, nas páginas CMS ainda podemos referenciar outros blocos, inserindo a tag abaixo:

{{block type="core/template" template="magenteiro/html/bloco.phtml"}}

Desta forma, poderíamos até criar um módulo Magento e definir um template phtml, desta forma, executando código PHP próprio em páginas CMS.

Inserindo blocks em atributos personalizados

E quando estamos falando de produtos com atributos personalizados e queremos inserir um block para ser renderizado com ele?

Recentemente tive esta necessidade aqui no Magenteiro, na página de produto. Eu tenho um atributo personalizado de produto, onde o editor WYSIWYG está ativo, mas preciso executar algo um pouco mais complexo ali dentro, e ao mesmo tempo.

Os tais dos filters

O Magento possuí alguns processadores que possuem filtros responsáveis por fazer substituir snippets como este acima por outras coisas. Isso está presente em vários lugares do Magento, sendo os e-mails transacionais o mais comum deles.

No caso dos {{blocks}}, usaremos o método filter, do Helper CMS, da seguinte forma:

# Arquivo: app/design/frontend/MEUPACOTE/MEUTEMA/template/catalog/product/view.phtml
/** @var Mage_Widget_Model_Template_Filter $processor */
$processor = Mage::helper(‘cms’)->getBlockTemplateProcessor();

$valorAtributo = $_product->getSuperAtributo();
echo $processor->filter($valorAtributo);

No valor do meu atributo, que pode ser texto, ou html, eu insiro meu snippet anterior, que irá carregar um bloco do tipo core/template e com um phtml específico.

Além disso, todas as propriedades passadas para o nosso snippet pode ser usada dentro do phtml, ou melhor ainda, dentro da classe PHP do block. Ficaria algo mais ou menos assim:

{{block type="core/template" template="magenteiro/html/bloco.phtml" texto="Qualquer coisa"}}

E no phtml:

echo $this->getTexto();

Com isso, você poderia criar blocos complexos ou com alguma inteligência que podem ser usados dentro de conteúdos CMS, ou como mostrado no exemplo acima, dentro de atributos personalizados, descrição de produto, e por aí vai.

No Magenteiro isso é bastante utilizado nas páginas de produto, onde cada página possuí descrição e outros atributos com alguma inteligência, mas que variam de um produto para o outro. Desta forma, posso passar algumas das variáveis no próprio cadastro do produto, e a classe do bloco faz o resto do trabalho.


Muito complexo?

Se o artigo acima ficou muito complexo para você, experimente assistir as aulas da seção de Layout XML e Temas do curso de front end para Magento,  ou do Layout XML e Blocks do curso de backend.

Gostou do artigo? Comente, compartilhe. É a única forma de saber se devo continuar fazendo mais.

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

Deixe seu comentário

[fbcomments url="https://www.magenteiro.com/blog/magento-1/executando-codigo-php-dentro-de-atributos-wysiwyg/"]