So überschreiben Sie den VirtualType-Block in Magento 2: Ich möchte folgenden virtuellen Typblock mit meinem eigenen Block überschreiben.
<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>
Also habe ich versucht, es von meinem benutzerdefinierten Modul di.xml
wie folgt zu überschreiben ,
<preference for="Magento\Catalog\Block\Product\ListProduct" type="My\Vendor\Block\Product\ListProductSearch" />
Aber es funktioniert nicht.
Also, was ist der richtige Weg , um eine virtuelle Typklasse in Magento 2 vorran?
setTemplate
Aktion brauchst ? Ich glaube nicht, dass das stimmt. Das Festlegen einer Voreinstellung für den virtuellen Typ sollte sich nicht auf die Vorlageneinstellung auswirken, die bereits im XML-Kernlayout definiert ist.product/list.phtml
solche mit Präferenz geändert VorlageVendor_Module::product/list.phtml
Wenn Sie den virtuellen Typ in Ihrem Beispiel überschreiben möchten, müssen Sie Folgendes verwenden:
Anstatt von:
In Ihrem Beispiel überschreiben Sie den ursprünglichen und nicht den virtuellen Typ. Dies ist der Grund, warum dies nicht funktioniert.
quelle
di.xml
?etc/frontend/di.xml
?Ich bin nicht sicher, wie genau die XML-Konfigurationen zusammengeführt und sortiert werden, aber diese Art von Problem hängt normalerweise von der Reihenfolge der geladenen Module ab.
Ich würde versuchen, eine Sequenz zu Ihrem hinzuzufügen
module.xml
:Die von Raphael oben beschriebene Präferenz funktioniert gut für mich.
quelle