Cara mengganti blok VirtualType di Magento 2, saya ingin mengganti jenis blok virtual berikut dengan blok saya sendiri,
<virtualType name="Magento\CatalogSearch\Block\SearchResult\ListProduct" type="Magento\Catalog\Block\Product\ListProduct">
<arguments>
<argument name="catalogLayer" xsi:type="object">Magento\Catalog\Model\Layer\Search</argument>
</arguments>
</virtualType>
Jadi saya mencoba menimpanya dari modul khusus saya di.xml
seperti ini,
<preference for="Magento\Catalog\Block\Product\ListProduct" type="My\Vendor\Block\Product\ListProductSearch" />
Tapi itu tidak berhasil.
Jadi, apa cara yang tepat untuk menimpa kelas tipe virtual di Magento 2?
setTemplate
tindakan? Saya tidak percaya itu benar. Mengatur preferensi untuk tipe virtual seharusnya tidak memengaruhi pengaturan template yang sudah ditentukan dalam tata letak inti XML.product/list.phtml
menggunakan preferensi yang mengubah template keVendor_Module::product/list.phtml
Jika Anda ingin mengganti jenis virtual dalam contoh Anda, Anda perlu menggunakan:
Dari pada:
Dalam contoh Anda, Anda menimpa tipe asli dan bukan tipe virtual, itulah alasan mengapa itu tidak berfungsi.
sumber
di.xml
berada?etc/frontend/di.xml
?Saya tidak yakin bagaimana sebenarnya konfigurasi xml digabungkan dan diurutkan, tetapi jenis masalah ini biasanya turun ke urutan modul yang sedang dimuat.
Saya akan mencoba menambahkan urutan ke
module.xml
:Preferensi yang dijelaskan oleh Raphael di atas berfungsi dengan baik untuk saya.
sumber