Chcę usunąć blok z układu w Magento 2, który jest zadeklarowany w rozszerzeniu innej firmy, ale blok nie ma nazwy.
Czy mogę to zrobić?
Blok jest zadeklarowany w ten sposób
<referenceContainer name="before.body.end">
<block class="Magento\Backend\Block\Template" template="[Vendor_Module]::template.phtml"/>
</referenceContainer>
Nie mogę użyć
<referenceBlock name="..." remove="true" />
ponieważ, jak widać, nie ma na nim nazwy.
magento2
magento-2.1
layout
blocks
Marius
źródło
źródło
[Vendor_Module]::template.phtml
Odpowiedzi:
Znalazłem ten problem w klasie
Magento\Framework\View\Layout\ScheduledStructure\Helper
Istnieje funkcja
_generateAnonymousName
:Wywołuje się z
scheduleStructure
funkcji:W tym przypadku nazwą bloku może być:
before.body.end_schedule_block1
before.body.end_schedule_block2
Myślę, że powinieneś zdefiniować blok sum bez nazwy na kontenerze, a nazwa bloku zamówienia musi zostać usunięta z kontenera.
źródło
body.before.end
kontenerze w innej kolejności.$name = $this->_generateAnonymousName($parentNode->getElementName() . '_schedule_block');
, czy należy przekazać klasę i szablon do parametru?Naprawdę daję ci zły pomysł.
Tutaj pomysłem nie jest zatrzymanie wyjścia twojego bloku
Korzystanie z wydarzenia
view_block_abstract_to_html_after
I używając tego obserwatora wyłącz wyjście swojego bloku
źródło
Wpadłem na pomysł z odpowiedzi Amita i skończyłem z działającym rozwiązaniem, które nie wygląda na bardzo nachalne i nie jest to przesada, ponieważ mój kod jest wykonywany tylko raz.
Utworzyłem obserwatora zdarzenia,
layout_generate_blocks_after
które jest wykonywane po załadowaniu układów i wygenerowaniu bloków.Może to mieć wadę, ponieważ blok, który próbuję usunąć, nadal jest tworzony w postaci instancji, ale w moim przypadku po prostu musiałem go usunąć ze strony.
Mam plik
etc/adminhtml/events.xml
i moja klasa obserwatorów:
źródło