Como substituir o bloco VirtualType no Magento 2, desejo substituir o seguinte bloco virtual por meu próprio bloco,
<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>
Então, eu tentei substituí-lo do meu módulo personalizado di.xml
assim,
<preference for="Magento\Catalog\Block\Product\ListProduct" type="My\Vendor\Block\Product\ListProductSearch" />
Mas não funciona.
Então, qual é a maneira correta de substituir uma classe de tipo virtual no Magento 2?
setTemplate
ação? Não acredito que seja verdade. Definir uma preferência para o tipo virtual não deve afetar a configuração do modelo que já está definida no XML do layout principal.product/list.phtml
isso usando a preferência mudou modelo paraVendor_Module::product/list.phtml
Se você deseja substituir o tipo virtual no seu exemplo, é necessário usar:
Ao invés de:
No seu exemplo, você substitui o tipo original e não o virtual, é por isso que não está funcionando.
fonte
di.xml
localizado?etc/frontend/di.xml
?Não tenho certeza de como exatamente as configurações xml são mescladas e classificadas, mas esse tipo de problema geralmente se resume à sequência dos módulos que estão sendo carregados.
Eu tentaria adicionar sequência ao seu
module.xml
:A preferência descrita por Raphael acima está funcionando bem para mim.
fonte