Comment remplacer le bloc VirtualType dans Magento 2, je veux remplacer le bloc de type virtuel suivant par mon propre bloc,
<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>
J'ai donc essayé de le remplacer à partir de mon module personnalisé di.xml
comme celui-ci,
<preference for="Magento\Catalog\Block\Product\ListProduct" type="My\Vendor\Block\Product\ListProductSearch" />
Mais ça ne marche pas.
Alors, quelle est la bonne façon de remplacer une classe de type virtuel dans Magento 2?
setTemplate
action? Je ne crois pas que ce soit vrai. La définition d'une préférence pour le type virtuel ne devrait pas affecter le paramètre de modèle déjà défini dans le XML de mise en page principal.product/list.phtml
donc en utilisant le modèle de préférence changé enVendor_Module::product/list.phtml
Si vous souhaitez remplacer le type virtuel dans votre exemple, vous devez utiliser:
Au lieu de:
Dans votre exemple, vous remplacez le type d'origine et non le type virtuel, c'est la raison pour laquelle cela ne fonctionne pas.
la source
di.xml
situé?etc/frontend/di.xml
?Je ne sais pas exactement comment les configurations xml sont fusionnées et triées, mais ce type de problème se résume généralement à la séquence des modules en cours de chargement.
J'essaierais d'ajouter une séquence à votre
module.xml
:La préférence décrite par Raphael ci-dessus fonctionne bien pour moi.
la source