Cursos Magento

Como os Blocos são processados no Magento 2

,

Atualizado em 14 de abril de 2020

Blocos ou Blocks são partes importantes presentes no front end de quase toda loja Magento (1 ou 2).

Os Blocks são pedaços da nossa página, geralmente representados por uma classe PHP, um arquivo de template PHTML (PHP + HTML). Eles são inseridos nas nossas páginas através de instruções de layout XML ou mesmo dentro dos Controllers.

Classe base

No Magento 2, toda classe de um bloco deriva da classe \Magento\Framework\View\Element\AbstractBlock (vendor/magento/framework/View/Element/AbstractBlock.php).

Ciclo de vida e seus desdobramentos

Antes do HTML ser retornado, uma série de métodos são disparados. Entenda a ordem como isso acontece:

  1. O bloco é criado (__construct)
    • O método setLayout é chamado, e o parâmetro _layout é associado ao objeto de layout atual
  2. Quando o Magento está pronto para obter o HTML, o método toHtml é chamado.
    • O evento view_block_abstract_to_html_before é disparado, passando a classe do bloco como parâmetro.
    • Se o bloco estiver no cache, o template não será carregado
      • _beforeToHtml() e _toHtml() são chamados caso não tenha cache
    • _afterToHtml é chamado (independente de estar ou não em cache)
    • O evento view_block_abstract_to_html_after é disparado passando a classe do block e o html final como parâmetros.
  3. O HTML é devolvido.

Bacana! Tem um monte de evento ali no meio. Vou alterar o html ali.

Apesar de ser extremamente simples criar um observer para modificar o html do bloco logo na sua saída, esta não é uma boa prática. Diferente do Magento 1, nós não devemos usar Observers para este fim, mas sim Plugins.

Em outras palavras, o Magento esfrega os eventos na nossa cara, mas não devemos usá-los para este fim, ok?

Como alterar a saída do bloco html então?

Lembre-se que somente Plugins são usados para modificar o fluxo de dados de métodos públicos. Classes como esta não possuem muitos métodos públicos que possamos utilizar.

Quando se tratar de um bloco criado por nós, o ideal é que criemos o método protected _toHtml(). Se isso não for possível, o melhor a fazer é criar um Plugin para o toHtml() (public).

Conclusão

Como sempre, o Magento nos dá várias formas de se atingir o mesmo objetivo. Neste caso, ele nos instiga a usar Observers para fazê-lo, mesmo dizendo oficialmente que não devemos usá-los para este fim.

Entender o ciclo de vida de um bloco é útil tanto no dia a dia de um desenvolvedor Magento 2, como para quem está pensando na certificação.

Note que você não precisará de nada disso durante o desenvolvimento de temas para Magento 2. Isso é útil apenas em casos específicos durante o desenvolvimento de módulos.

Já a criação de Plugins por sua vez, é amplamente abordada no curso de criação de módulos para Magento 2 aqui do Magenteiro.

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

Deixe seu comentário

[fbcomments url="https://www.magenteiro.com/blog/magento-2/desenvolvimento-m2/como-os-blocos-sao-processados-no-magento-2/"]