Magento 2 criar plugin para o meu módulo

7

Eu criei um plugin para adicionar link para cada produto, como abaixo:

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

Acima está funcionando bem o link mydata adicionado a todos os produtos. Mas não está funcionando na página de pesquisa. Alguém pode me ajudar a adicionar link para o produto da página de pesquisa usando o plugin

arquivo 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>
Prashant Valanda
fonte
2
Você poderia postar seu di.xmlarquivo, por favor?
Raphael no Digital Pianism
@RaphaelatDigitalPianism Adicionei o código di.xml e está funcionando bem, mas como posso obter a mesma função na página de pesquisa?
Prashant Valanda
@PrashantValanda Estou enfrentando o mesmo problema se você tiver uma solução, por favor, coloque aqui.
Deexit Sanghani

Respostas:

0

Basicamente, a página de pesquisa usa o mesmo modelo da lista de produtos, mas usa um bloco de tipo virtual que usa a Magento\Catalog\Block\Product\ListProductclasse que você está plug-in.

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

É aí que a documentação oficial é confusa, porque na lista de limitações de plugins , diz-se que:

Plugins não podem ser usados ​​com tipos virtuais

No entanto, o exemplo a seguir é dado:

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

E diz-se que:

Digite o nome. Uma classe, interface ou tipo virtual , que o plug-in observa.

Realmente confuso aqui, o que eu tentaria se fosse você ainda tentaria conectar o tipo virtual atualizando o seu di.xmldesta forma:

<?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 na Digital Pianism
fonte
Eu tentei com sua solução fornecida que não está funcionando. Tendo alguma outra maneira?
Prashant Valanda
1
@PrashantValanda Estou tentando descobrir os esclarecimentos sobre os tipos virtuais
Raphael no 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
fonte
0

adicione isso no seu di.xml. sendo exibido na página de pesquisa de catálogo.

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