Magento 2は私のモジュールのプラグインを作成します


7

以下のようにすべての製品のリンクを追加するプラグインを作成しました:

<?php
namespace Vendorname\Modulename\Plugin;

class ProductData
{


    protected $urlInterface;

    protected $scopeConfig;

    public function __construct(
        \Magento\Framework\UrlInterface $urlInterface,
        \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
        ) {
        $this->urlInterface = $urlInterface;
        $this->scopeConfig = $scopeConfig;
    }

    public function aroundGetProductDetailsHtml(
        \Magento\Catalog\Block\Product\ListProduct $subject,
        \Closure $proceed,
        \Magento\Catalog\Model\Product $product
        )
    {
        $result = $proceed($product);

         return $result . '<a href="#">mydata</a>';

        return $result;
    }
}

上記はすべての製品に追加されたmydataリンクで正常に機能しています。ただし、検索ページでは機能しません。誰かがプラグインを使用して検索ページ製品へのリンクを追加するのを手伝ってくれる?

di.xmlファイル

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">

     <type name="Magento\Catalog\Block\Product\ListProduct">
        <plugin name="my-block"
                type="Vendorname\Modulename\Plugin\ProductData"
                sortOrder="10"/>
    </type>
</config>

2
di.xmlファイルを投稿していただけませんか?
デジタルピアニズムのラファエル、

@RaphaelatDigitalPianism di.xmlコードを追加しましたが、問題なく機能していますが、検索ページで同じ機能を実現するにはどうすればよいですか。
Prashant Valanda 2016年

@PrashantValanda解決策がある場合は同じ問題に直面しているので、ここに入力してください。
Deghit Sanghani

回答:


0

基本的に、検索ページは製品リストと同じテンプレートを使用しMagento\Catalog\Block\Product\ListProductますが、プラグインであるクラスを使用する仮想タイプブロックを使用します。

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

プラグインの制限リストでは次のように述べられているため、公式ドキュメントが混乱しているのはここです。

プラグインは仮想タイプでは使用できません

ただし、次の例が示されています。

<config>
    <type name="{ObservedType}">
        <plugin name="{pluginName}" type="{PluginClassName}" sortOrder="1" disabled="true"/>
    </type>
</config>

そしてそれは言われています:

タイプ名。プラグインが監視するクラス、インターフェース、または仮想タイプ

ここで本当に混乱していますが、私があなたが仮想タイプのプラグインを次のdi.xmlように更新してプラグインを試す場合はどうすればよいでしょうか:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">

     <type name="Magento\Catalog\Block\Product\ListProduct">
        <plugin name="my-block"
                type="Vendorname\Modulename\Plugin\ProductData"
                sortOrder="10"/>
    </type>
     <type name="Magento\CatalogSearch\Block\SearchResult\ListProduct">
        <plugin name="my-search-block"
                type="Vendorname\Modulename\Plugin\ProductData"
                sortOrder="10"/>
    </type>
</config>

私はあなたの与えられた解決策を試してみましたが、うまくいきません。他に方法はありますか?
Prashant Valanda 2016年

1
@PrashantValanda私は仮想型についての明確化を見つけようとしています
デジタルピアニズムのラファエル

0

 <type name="Magento\Catalog\Block\Product\ListProduct">
    <plugin name="my-block"
            type="Vendorname\Modulename\Plugin\ProductData"
            sortOrder="10"/>
</type>
<virtualType name="Magento\CatalogSearch\Block\SearchResult\ListProduct" type="Magento\Catalog\Block\Product\ListProduct">
   <plugin name="my-search-block"
            type="Vendorname\Modulename\Plugin\ProductData"
            sortOrder="10"/>
</virtualType> 


0

これをdi.xmlに追加します。カタログ検索ページに表示されます。

<type name="Magento\CatalogSearch\Block\SearchResult\ListProduct">
    <plugin name="catalog-search-block" type="Vendor\Module\Plugin\ProductData" sortOrder="11"/>
</type>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.