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.xmlcomo 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?

setTemplateacció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.phtmlusaba la plantilla de preferencia cambiada aVendor_Module::product/list.phtmlSi 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.xmlubicado?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