Quiero eliminar un bloque del diseño en magento 2 que se declara en una extensión de terceros, pero el bloque no tiene un nombre.
¿Puedo hacer eso?
El bloque se declara así
<referenceContainer name="before.body.end">
<block class="Magento\Backend\Block\Template" template="[Vendor_Module]::template.phtml"/>
</referenceContainer>
No puedo usar
<referenceBlock name="..." remove="true" />
porque, como puedes ver, no tiene nombre.
magento2
magento-2.1
layout
blocks
Marius
fuente
fuente
[Vendor_Module]::template.phtml
Respuestas:
Encontré este problema en clase
Magento\Framework\View\Layout\ScheduledStructure\Helper
Hay función
_generateAnonymousName
:Es llamada de la
scheduleStructure
función:Con este caso, el nombre del bloque puede ser:
before.body.end_schedule_block1
before.body.end_schedule_block2
Creo que debe definir el bloque de totales sin el nombre en el contenedor y el nombre del bloque de pedido debe eliminarse en el contenedor.
fuente
body.before.end
contenedor en diferente orden.$name = $this->_generateAnonymousName($parentNode->getElementName() . '_schedule_block');
, ¿Debería pasar la clase y la plantilla al parámetro?Realmente te doy una mala idea.
Aquí la idea no es detener la salida de tu bloque
Usando evento
view_block_abstract_to_html_after
Y usando este observador deshabilita la salida de tu bloque
fuente
Tengo una idea de la respuesta de Amit y terminé con una solución de trabajo que no parece muy intrusiva y no es una exageración ya que mi código se ejecuta solo una vez.
He creado un observador en el evento
layout_generate_blocks_after
que se ejecuta después de que se cargan los diseños y se generan los bloques.Esto puede tener un inconveniente porque el bloque que estoy tratando de eliminar aún se instancia, pero en mi caso solo necesitaba eliminarlo de la página.
Entonces tengo el archivo
etc/adminhtml/events.xml
y mi clase de observador:
fuente