Jak zastąpić blok VirtualType w Magento 2, chcę zastąpić następujący blok typu wirtualnego własnym blokiem,
<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>
Więc próbowałem zastąpić go z mojego niestandardowego modułu w di.xml
ten sposób,
<preference for="Magento\Catalog\Block\Product\ListProduct" type="My\Vendor\Block\Product\ListProductSearch" />
Ale to nie działa.
Więc, co jest właściwym sposobem na przesłanianie wirtualną klasę w Magento typu 2?
setTemplate
akcji? Nie wierzę, że to prawda. Ustawienie preferencji dla typu wirtualnego nie powinno wpływać na ustawienie szablonu, które jest już zdefiniowane w pliku XML układu podstawowego.product/list.phtml
więc używając preferencji zmieniono szablon naVendor_Module::product/list.phtml
Jeśli chcesz zastąpić typ wirtualny w swoim przykładzie, musisz użyć:
Zamiast:
W twoim przykładzie zastępujesz typ oryginalny, a nie typ wirtualny, dlatego nie działa.
źródło
di.xml
znajdujesz?etc/frontend/di.xml
?Nie jestem pewien, jak dokładnie konfiguracje xml są scalane i sortowane, ale ten typ problemu zwykle sprowadza się do sekwencji ładowanych modułów.
Chciałbym dodać sekwencję do
module.xml
:Preferencje opisane powyżej przez Rafaela działają dobrze dla mnie.
źródło