Cómo anular el bloque VirtualType en Magento 2, quiero anular el siguiente bloque de tipo virtual con mi propio bloque,
<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>
Así que intenté anularlo desde mi módulo personalizado di.xml
como este,
<preference for="Magento\Catalog\Block\Product\ListProduct" type="My\Vendor\Block\Product\ListProductSearch" />
Pero no funciona.
Entonces, ¿cuál es la forma correcta de anular una clase de tipo virtual en Magento 2?
setTemplate
acción? No creo que sea verdad. Establecer una preferencia para el tipo virtual no debería afectar la configuración de la plantilla que ya está definida en el diseño principal XML.product/list.phtml
usaba la plantilla de preferencia cambiada aVendor_Module::product/list.phtml
Si desea anular el tipo virtual en su ejemplo, debe usar:
En lugar de:
En su ejemplo, anula el tipo original y no el tipo virtual, esa es la razón por la que no funciona.
fuente
di.xml
ubicado?etc/frontend/di.xml
?No estoy seguro de cómo se fusionan y ordenan exactamente las configuraciones xml, pero este tipo de problema generalmente se reduce a la secuencia de los módulos que se están cargando.
Intentaría agregar secuencia a tu
module.xml
:La preferencia descrita por Raphael arriba está funcionando bien para mí.
fuente