Ich möchte einen Block aus dem Layout in Magento 2 entfernen, der in einer Drittanbietererweiterung deklariert ist, aber der Block hat keinen Namen.
Kann ich das machen?
Der Block wird so deklariert
<referenceContainer name="before.body.end">
<block class="Magento\Backend\Block\Template" template="[Vendor_Module]::template.phtml"/>
</referenceContainer>
Ich kann nicht benutzen
<referenceBlock name="..." remove="true" />
denn wie Sie sehen, steht kein Name darauf.
magento2
magento-2.1
layout
blocks
Marius
quelle
quelle
[Vendor_Module]::template.phtml
Antworten:
Ich habe dieses Problem im Unterricht gefunden
Magento\Framework\View\Layout\ScheduledStructure\Helper
Es gibt Funktion
_generateAnonymousName
:Es ist ein Aufruf von der
scheduleStructure
Funktion:In diesem Fall kann der Blockname sein:
before.body.end_schedule_block1
before.body.end_schedule_block2
Ich denke, Sie sollten den Summenblock ohne den Namen auf dem Container definieren und den Namen des Bestellblocks auf dem Container entfernen.
quelle
body.before.end
in unterschiedlicher Reihenfolge in den Container eingefügt werden können.$name = $this->_generateAnonymousName($parentNode->getElementName() . '_schedule_block');
, sollten Klasse & Vorlage an Parameter übergeben werden?Ich gebe dir wirklich eine schlechte Idee.
Hier ist die Idee nicht, die Ausgabe Ihres Blocks zu stoppen
Ereignis verwenden
view_block_abstract_to_html_after
Und mit diesem Beobachter deaktivieren Sie die Ausgabe Ihres Blocks
quelle
Ich hatte eine Idee aus Amits Antwort und fand eine funktionierende Lösung, die nicht sehr aufdringlich aussieht und kein Overkill ist, da mein Code nur einmal ausgeführt wird.
Ich habe einen Beobachter für das Ereignis erstellt
layout_generate_blocks_after
, das ausgeführt wird, nachdem die Layouts geladen und die Blöcke generiert wurden.Dies kann einen Nachteil haben, da der Block, den ich entfernen möchte, immer noch instanziiert wird, aber in meinem Fall musste ich ihn nur von der Seite entfernen.
Also habe ich die Datei
etc/adminhtml/events.xml
und meine Beobachterklasse:
quelle