Magento 2で仮想タイプクラスをオーバーライドする方法


13

Magento 2でVirtualTypeブロックをオーバーライドする方法、次の仮想タイプブロックを独自のブロックでオーバーライドしたい

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

だから私はdi.xmlこのように私のカスタムモジュールからそれをオーバーライドしようとしました、

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

しかし、それは機能しません。

だから、Magento 2で仮想タイプクラスをオーバーライドする適切な方法は何ですか?

回答:


13

以下を使用する必要があります。

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

ラファエルが言ったように。

この特異ブロックを適切に機能させるにはview/frontend/layout/catalogsearch_result_index.xml、次の内容のファイルも追加する必要があります。

<?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
チャームのように機能します!
ボルボ

なぜsetTemplateアクションが必要だと言うのですか?私はそれが本当だとは思わない。仮想タイプのプリファレンスを設定しても、コアレイアウトXMLで既に定義されているテンプレート設定には影響しません。
スコットブキャナン

1
提供されているテンプレートがモジュールを含む限り、@ ScottBuchanan。この質問に答える際に、このブロックは、のようにテンプレートを含有product/list.phtmlする優先変更テンプレートを使用してそうVendor_Module::product/list.phtml
パルトロミエSzubert

ああ、理にかなっています。
スコットブキャナン

7

例で仮想タイプをオーバーライドする場合は、次を使用する必要があります。

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

の代わりに:

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

この例では、仮想タイプではなく、元のタイプをオーバーライドします。これが機能しない理由です。


あなたの答えをありがとう、今、私はあなたが言った方法を試しましたが、それはまだ動作しません。
ヌワウス

@nuwausおもしろい、どこdi.xmlにいる?
デジタルピアニズムのラファエル

my-plugin-dir / etc /
di.xml

@nuwausに移動するとetc/frontend/di.xmlどうなりますか?
デジタルピアニズムのラファエル

それでも動作しません:
nuwaus

4

xml構成がどのように正確にマージおよびソートされるかはわかりませんが、この種の問題は通常、ロードされるモジュールの順序に起因します。

私はあなたにシーケンスを追加してみますmodule.xml

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

上記のラファエルによって説明された好みは私のためにうまく機能しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.