1

I want to override wishlist & compare product grid using plugin. after that i would like to append custom div under class="product-image-container".

I try & search a lot but no luck. is there any way to achieve thing?

I try below way for wishlist grid.

Namespace/Modulename/etc/forntend/di.xml

<type name="Magento\Wishlist\Block\Customer\Wishlist\Items">
    <plugin name="Namespace_Modulename::wishlistProduct" type="namespace\Modulename\Plugin\Customer\Wishlist\Items" sortOrder="18" />
</type>

Namespace/Modulename/Plugin/Customer/Wishlist/items.php

namespace Namespace\Modulename\Plugin\Customer\Wishlist;

class Items
{
/**
 * @var \Magento\Framework\View\LayoutInterface
 */
protected $layout;   
public function __construct(        
    \Magento\Framework\View\LayoutInterface $layout
) { //die('test called');
    $this->layout = $layout; 
}

public function afterGetColumns(\Magento\Wishlist\Block\Customer\Wishlist\Items  $subject, $result       
) {
    var_dump($subject->getProduct());die('called');
    $labelHtml = $this->layout->createBlock('Namespace\Modulename\Block\Label')->setProduct($product)->setTemplate('Namespace_Modulename::product/label.phtml')->toHtml();
    return $result.$labelHtml;        
} 
}

What i missing or wrong in above code?


Edit :

How can i create after plugin for class Magento\Catalog\Block\Product\Compare\ListCompare ?

I try with below way but not working.

<type name="Magento\Catalog\Block\Product\Compare\ListCompare">
    <plugin disabled="false" name="Namespace_Modulename::compareProduct" type="Namespace\Modulename\Plugin\Catalog\Product\Compare\ListCompare" sortOrder="19" />
</type>

Any help would be appreciated!

2
  • I would suggest you use around Plugin, which used to override function Commented Feb 6, 2019 at 11:50
  • can you share any example? Commented Feb 6, 2019 at 12:17

1 Answer 1

1

I found solution using below way.

For Wishlist product page.

app/code/Namespace/Modulename/etc/frontend/di.xml

<type name="Magento\Wishlist\Block\Customer\Wishlist\Item\Column\Image">
    <plugin name="Namespace_Modulename::wishlistProduct" type="Namaespace\Modulename\Plugin\Customer\Wishlist\Item\Column\Image" sortOrder="18" />
</type>

app/code/Namespace/Modulename/Plugin/Customer/Wishlist/Item/Column/Image.php

<?php

namespace Namespace\Modulename\Plugin\Customer\Wishlist\Item\Column;
use Namespace\Modulename\Helper\Data;

class Image
{

    /**
     * @var Data
     */
    private $dataHelper;

    /**
     * @var \Magento\Framework\Registry
     */
    private $registry;

    /**
     * @var \Magento\Framework\View\LayoutInterface
     */
    protected $layout;   
    public function __construct(        
        \Magento\Framework\View\LayoutInterface $layout,
        \Magento\Framework\Registry $registry,
        Data $dataHelper
    ) {        
        $this->layout = $layout; 
        $this->registry = $registry;        
        $this->dataHelper = $dataHelper;
    }

    public function afterToHtml(
    \Magento\Wishlist\Block\Customer\Wishlist\Item\Column\Image $subject,
        $result
    ) {
        $item = $subject->getItem();
        $product = $item->getProduct();

        if($product){
            if($this->dataHelper->isEnabled()){
                $result .= $this->layout->createBlock('Namespace\Modulename\Block\Label')->setProduct($product)->setTemplate('Namespace_Modulename::product/label.phtml')->toHtml();            
            }
        }
        return $result;
    } 
}

For Compare product page.

app/code/Namespace/Modulename/etc/frontend/di.xml

<type name="Magento\Catalog\Block\Product\Compare\ListCompare">
    <plugin name="Namespace_Modulename::compareProduct" type="Namespace\Modulename\Plugin\Catalog\Product\Compare\ListCompare" sortOrder="19" />
</type>

app/code/Namespace/Modulename/Plugin/Catalog/Product/Compare/ListCompare.php

<?php

namespace Namespace\Modulename\Plugin\Catalog\Product\Compare;
use Namespace\Modulename\Helper\Data;

class ListCompare
{

    /**
     * @var Data
     */
    private $dataHelper;

    /**
     * @var \Magento\Framework\View\LayoutInterface
     */
    protected $layout;   

    public function __construct(        
        \Magento\Framework\View\LayoutInterface $layout,
        Data $dataHelper
    ) {
        $this->layout = $layout;
        $this->dataHelper = $dataHelper;
    }

    public function afterGetReviewsSummaryHtml(
        \Magento\Catalog\Block\Product\Compare\ListCompare $subject, $result,
        \Magento\Catalog\Model\Product $product,
        $templateType = false,
        $displayIfNoReviews = false
    ) {        
        if($product){
            if($this->dataHelper->isEnabled()){
                $result .= $this->layout->createBlock('Namespace\Modulename\Block\Label')->setProduct($product)->setTemplate('Namespace_Modulename::product/label.phtml')->toHtml();            
            }
        }
        return $result;
    }
}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.