magento 2 - Установить ограничение для сравниваемого продукта


Мне нужно установить ограничение для сравниваемого продукта , например: max_limit 4, Но теперь он добавляет количество продуктов в список сравнения. Пожалуйста, предложите.

Author: Khoa TruongDinh, 2017-02-13

2 answers

Мы можем попробовать с помощью плагина. Мы используем Magento\Catalog\Helper\Product\Compare для получения текущих сравниваемых продуктов.

app/code/Company/Catalog/etc/frontend/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\Controller\Product\Compare\Add">
        <plugin name="LimitToCompareProducts"
                type="Company\Catalog\Model\Plugin\Compare\LimitToCompareProducts"/>
    </type>
</config>

app/code/Company/Catalog/Model/Plugin/Compare/LimitToCompareProducts.php

<?php

namespace Company\Catalog\Model\Plugin\Compare;

use Magento\Framework\Controller\Result\RedirectFactory;
use Magento\Framework\Message\ManagerInterface;
use Magento\Catalog\Helper\Product\Compare;

class LimitToCompareProducts
{
    const LIMIT_TO_COMPARE_PRODUCTS = 3;

    /**
     * @var \Magento\Framework\Message\ManagerInterface
     */
    protected $messageManager;

    /**
     * @var RedirectFactory
     */
    protected $resultRedirectFactory;

    /** @var Compare */
    protected $helper;

    /**
     * RestrictCustomerEmail constructor.
     * @param Compare $helper
     * @param RedirectFactory $redirectFactory
     * @param ManagerInterface $messageManager
     */
    public function __construct(
        RedirectFactory $redirectFactory,
        Compare $helper,
        ManagerInterface $messageManager
    )
    {
        $this->helper = $helper;
        $this->resultRedirectFactory = $redirectFactory;
        $this->messageManager = $messageManager;
    }

     public function aroundExecute(
    \Magento\Catalog\Controller\Product\Compare\Add $subject,
    \Closure $proceed
    ){

      $count = $this->helper->getItemCount();
      if($count > self::LIMIT_TO_COMPARE_PRODUCTS) {
        $this->messageManager->addErrorMessage(
            'You can add the compared products under 3 item(s)'
        );

        /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
        $resultRedirect = $this->resultRedirectFactory->create();
        return $resultRedirect->setRefererOrBaseUrl();
      }

      return $proceed();
   }
}
 3
Author: Khoa TruongDinh, 2017-02-13 08:33:13

@анкит

What about Admin -> Stores -> Configuration -> Catalog -> Catalog -> Recently Viewed/Compared Products -> Default Recently Compared Products Count?

Это не ограничивает количество товаров в вашем сравнении.

 0
Author: user3653773, 2019-03-12 13:44:17