Как переопределить блок VirtualType в Magento 2, я хочу переопределить следующий блок виртуального типа своим собственным блоком,
<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>
Поэтому я попытался переопределить его из моего пользовательского модуля, di.xml
как это,
<preference for="Magento\Catalog\Block\Product\ListProduct" type="My\Vendor\Block\Product\ListProductSearch" />
Но это не работает.
Итак, как правильно переопределить класс виртуального типа в Magento 2?
setTemplate
действие? Я не верю, что это правда. Установка предпочтения для виртуального типа не должна влиять на настройку шаблона, которая уже определена в базовом макете XML.product/list.phtml
поэтому предпочтение было изменено на шаблонVendor_Module::product/list.phtml
Если вы хотите переопределить виртуальный тип в вашем примере, вам нужно использовать:
Вместо того:
В вашем примере вы переопределяете исходный тип, а не виртуальный тип, вот почему он не работает.
источник
di.xml
?etc/frontend/di.xml
?Я не уверен, как именно конфигурации xml объединяются и сортируются, но проблема такого типа обычно сводится к последовательности загружаемых модулей.
Я бы попробовал добавить последовательность к вашему
module.xml
:Предпочтение, описанное Рафаэлем выше, прекрасно работает для меня.
источник