Magento 2 tạo plugin cho mô-đun của tôi


7

Tôi đã tạo plugin để thêm liên kết cho mọi sản phẩm như dưới đây:

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

Ở trên đang hoạt động tốt thêm liên kết mydata cho mỗi sản phẩm. Nhưng nó không hoạt động trên trang tìm kiếm. Ai có thể giúp tôi thêm liên kết đến sản phẩm trang tìm kiếm bằng plugin

tập tin 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
Bạn có thể gửi di.xmltập tin của bạn xin vui lòng?
Raphael tại Nghệ thuật piano kỹ thuật số

@RaphaelatDigitalPianism Tôi đã thêm mã di.xml nó hoạt động tốt nhưng làm thế nào tôi có thể đạt được chức năng tương tự trên trang tìm kiếm.
Prashant Valanda

@PrashantValanda Tôi đã gặp phải vấn đề tương tự nếu bạn có giải pháp nên xin vui lòng đặt ở đây.
Deexit Sanghani

Câu trả lời:


0

Về cơ bản, trang tìm kiếm sử dụng cùng một mẫu với danh sách sản phẩm NHƯNG nó sử dụng một khối loại ảo sử dụng Magento\Catalog\Block\Product\ListProductlớp bạn là plugin.

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

Đó là nơi tài liệu chính thức gây nhầm lẫn bởi vì trong danh sách các hạn chế của plugin , người ta nói rằng:

Plugin không thể được sử dụng với các loại ảo

Tuy nhiên, ví dụ sau đây được đưa ra:

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

Và người ta nói rằng:

tên loại. Một lớp, giao diện hoặc loại ảo mà plugin quan sát.

Thực sự khó hiểu ở đây, những gì tôi sẽ thử nếu tôi là bạn vẫn sẽ thử plugin loại ảo bằng cách cập nhật di.xmlnhư thế này:

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

Tôi đã thử với giải pháp cho trước của bạn nó không hoạt động. Có cách nào khác không?
Prashant Valanda

1
@PrashantValanda Tôi đang cố gắng tìm hiểu sự rõ ràng về các loại ảo
Raphael tại 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> 


0

thêm phần này vào tệp di.xml của bạn. nó hiển thị trên trang tìm kiếm danh mục.

<type name="Magento\CatalogSearch\Block\SearchResult\ListProduct">
    <plugin name="catalog-search-block" type="Vendor\Module\Plugin\ProductData" sortOrder="11"/>
</type>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.