Magento 2 Plugin für mein Modul erstellen

7

Ich habe ein Plugin erstellt, um einen Link für jedes Produkt wie folgt hinzuzufügen:

<?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;
    }
}

Oben funktioniert gut hinzugefügt mydata Link zu jedem Produkt. Aber es funktioniert nicht auf der Suchseite. Kann mir jemand helfen, mithilfe des Plugins einen Link zum Suchseitenprodukt hinzuzufügen?

di.xml Datei

<?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>
Prashant Valanda
quelle
2
Könnten Sie di.xmlbitte Ihre Datei posten ?
Raphael bei Digital Pianism
@ RaphaelatDigitalPianism Ich habe di.xml Code hinzugefügt, es funktioniert gut, aber wie kann ich die gleiche Funktion auf der Suchseite erreichen.
Prashant Valanda
@PrashantValanda Ich habe das gleiche Problem, wenn Sie eine Lösung haben, also bitte hier einfügen.
Deexit Sanghani

Antworten:

0

Grundsätzlich verwendet die Suchseite dieselbe Vorlage wie die Produktliste, ABER sie verwendet einen virtuellen Typblock, der die Magento\Catalog\Block\Product\ListProductKlasse verwendet, die Sie einbinden.

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

Hier ist die offizielle Dokumentation verwirrend, weil in der Liste der Plugin-Einschränkungen Folgendes steht:

Plugins können nicht mit virtuellen Typen verwendet werden

Das folgende Beispiel wird jedoch gegeben:

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

Und es heißt:

Modellname. Eine Klasse, Schnittstelle oder ein virtueller Typ , den das Plugin beobachtet.

Wirklich verwirrend hier, was ich versuchen würde, wenn ich wäre, würden Sie immer noch versuchen, den virtuellen Typ durch Aktualisieren Ihres di.xmlwie folgt zu Plugin :

<?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>
Raphael beim digitalen Pianismus
quelle
Ich habe mit Ihrer gegebenen Lösung versucht, dass es nicht funktioniert. Haben Sie einen anderen Weg?
Prashant Valanda
1
@PrashantValanda Ich versuche, die Klarstellung über virtuelle Typen herauszufinden
Raphael bei Digital Pianism
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> 

Urvashi Prajapati
quelle
0

füge dies in deine di.xml ein. Es wird auf der Katalogsuchseite angezeigt.

<type name="Magento\CatalogSearch\Block\SearchResult\ListProduct">
    <plugin name="catalog-search-block" type="Vendor\Module\Plugin\ProductData" sortOrder="11"/>
</type>
Vishnunath
quelle