Quero remover um bloco do layout no magento 2 declarado em uma extensão de terceiros, mas o bloco não tem um nome.
Posso fazer isso?
O bloco é declarado assim
<referenceContainer name="before.body.end">
<block class="Magento\Backend\Block\Template" template="[Vendor_Module]::template.phtml"/>
</referenceContainer>
Não posso usar
<referenceBlock name="..." remove="true" />
porque, como você pode ver, não há nome nele.
magento2
magento-2.1
layout
blocks
Marius
fonte
fonte
[Vendor_Module]::template.phtml
Respostas:
Encontrei esse problema na aula
Magento\Framework\View\Layout\ScheduledStructure\Helper
Há função
_generateAnonymousName
:É chamada de
scheduleStructure
função:Nesse caso, o nome do bloco pode ser:
before.body.end_schedule_block1
before.body.end_schedule_block2
Eu acho que você deve definir o bloco de totais sem o nome no contêiner e o nome do bloco do pedido precisa ser removido no contêiner.
fonte
body.before.end
contêiner em ordem diferente.$name = $this->_generateAnonymousName($parentNode->getElementName() . '_schedule_block');
. Deve passar a classe e o modelo para o parâmetro?Estou realmente te dando uma má idéia.
Aqui a ideia não é parar a saída do seu bloco
Usando evento
view_block_abstract_to_html_after
E usando esse observador, desative a saída do seu bloco
fonte
Tive uma idéia da resposta de Amit e acabei com uma solução funcional que não parece muito intrusiva e não é um exagero, pois meu código é executado apenas uma vez.
Eu criei um observador no evento
layout_generate_blocks_after
que é executado depois que os layouts são carregados e os blocos são gerados.Isso pode ter uma desvantagem, porque o bloco que estou tentando remover ainda é instanciado, mas no meu caso, eu apenas precisei removê-lo da página.
Então eu tenho o arquivo
etc/adminhtml/events.xml
e minha classe de observador:
fonte