Magento 2'de Sanal Tip sınıfını geçersiz kılma


14

Magento 2'de VirtualType bloğunu geçersiz kılmak için, kendi bloğumla aşağıdaki sanal tip bloğunu geçersiz kılmak istiyorum,

<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>

Bu yüzden di.xmlböyle özel modülümden geçersiz kılmaya çalıştım ,

<preference for="Magento\Catalog\Block\Product\ListProduct" type="My\Vendor\Block\Product\ListProductSearch" />

Ama bu çalışmıyor.

Peki, Magento 2'de bir sanal tip sınıfını geçersiz kılmanın uygun yolu nedir?

Yanıtlar:


14

Kullanmanız gerekenler:

<preference for="Magento\CatalogSearch\Block\SearchResult\ListProduct" type="Vendor\Module\Block\Product\ListProductSearch" />

Raphael'in belirttiği gibi.

Bu tekil bloğun düzgün çalışması için view/frontend/layout/catalogsearch_result_index.xmlaşağıdaki içeriğe sahip dosya da eklemeniz gerekir :

<?xml version="1.0"?>

<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
    <referenceBlock name="search_result_list">
        <action method="setTemplate">
            <argument name="template" xsi:type="string">Magento_Catalog::product/list.phtml</argument>
        </action>
    </referenceBlock>
</body>


1
Tıkır tıkır çalışıyor!
Volvox

Neden setTemplateeyleme ihtiyacın olduğunu söylüyorsun ? Bunun doğru olduğuna inanmıyorum. Sanal tür için bir tercih ayarlanması, çekirdek mizanpaj XML'inde önceden tanımlanmış şablon ayarını etkilememelidir.
Scott Buchanan

1
@ScottBuchanan sağlanan şablon kadar modül içerir. Bu soruyu cevaplarken, bu blokta şablon product/list.phtmltercih edildiğinde şablon olarak değiştirildiVendor_Module::product/list.phtml
Bartłomiej Szubert

Ah, mantıklı.
Scott Buchanan

8

Örneğinizdeki sanal türü geçersiz kılmak istiyorsanız, şunları kullanmanız gerekir:

<preference for="Magento\CatalogSearch\Block\SearchResult\ListProduct" type="My\Vendor\Block\Product\ListProductSearch" />

Onun yerine:

<preference for="Magento\Catalog\Block\Product\ListProduct" type="My\Vendor\Block\Product\ListProductSearch" />

Örneğinizde, sanal türü değil orijinal türü geçersiz kıldınız, bu yüzden çalışmaz.


Cevabınız için teşekkür ederim, Şimdi bahsettiğiniz şekilde denedim, ama yine de çalışmıyor.
Nuwaus

@nuwaus ilginç, bulunduğunuz di.xmlyer neresi ?
Raphael, Dijital Piyanizm'de

my-plugin-dir / etc / di.xml
nuwaus

@nuwaus ya taşırsanız etc/frontend/di.xml?
Raphael, Dijital Piyanizm'de

Hala çalışmıyor :(
nuwaus

4

Tam olarak xml yapılandırmalarının nasıl birleştirildiğinden ve sıralandığından emin değilim, ancak bu tür bir sorun genellikle yüklenen modüllerin sırasına gelir.

Ben dizi eklemek denemek istiyorsunuz module.xml:

<sequence>
        <module name="Magento_CatalogSearch"/>
</sequence>

Yukarıda Raphael'in tarif ettiği tercih benim için iyi çalışıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.