Saya ingin menghapus blok dari tata letak di magento 2 yang dideklarasikan dalam ekstensi pihak ketiga, tetapi blok itu tidak memiliki nama.
Bisakah saya melakukan itu?
Blok dideklarasikan seperti ini
<referenceContainer name="before.body.end">
<block class="Magento\Backend\Block\Template" template="[Vendor_Module]::template.phtml"/>
</referenceContainer>
Saya tidak bisa menggunakan
<referenceBlock name="..." remove="true" />
karena, seperti yang Anda lihat tidak ada nama di dalamnya.
magento2
magento-2.1
layout
blocks
Marius
sumber
sumber
[Vendor_Module]::template.phtml
Jawaban:
Saya menemukan masalah ini di kelas
Magento\Framework\View\Layout\ScheduledStructure\Helper
Ada fungsi
_generateAnonymousName
:Ini panggilan dari
scheduleStructure
fungsi:Dengan kasus ini, nama Blok dapat:
before.body.end_schedule_block1
before.body.end_schedule_block2
Saya pikir Anda harus mendefinisikan total blok tanpa nama pada wadah dan urutan nama blok harus dihapus pada wadah.
sumber
body.before.end
wadah dengan urutan yang berbeda.$name = $this->_generateAnonymousName($parentNode->getElementName() . '_schedule_block');
, Harus lulus kelas & template ke parameter?Saya benar-benar memberi Anda ide buruk.
Di sini idenya tidak menghentikan output dari blok Anda
Menggunakan acara
view_block_abstract_to_html_after
Dan menggunakan pengamat ini menonaktifkan output dari blok Anda
sumber
Saya mendapat ide dari jawaban Amit dan berakhir dengan solusi yang bekerja yang tidak terlihat sangat mengganggu dan itu tidak berlebihan karena kode saya dieksekusi hanya sekali.
Saya telah membuat pengamat pada acara
layout_generate_blocks_after
yang dieksekusi setelah tata letak dimuat dan blok dihasilkan.Ini dapat memiliki kekurangan karena blok yang saya coba hapus masih akan dipakai, tetapi dalam kasus saya, saya hanya perlu menghapusnya dari halaman.
Jadi saya punya file
etc/adminhtml/events.xml
dan kelas pengamat saya:
sumber