Ограничить добавление товара в корзину в magento 2


Я использую magento 2.1.5, и у меня есть два налоговых класса. и я хочу добавлять в корзину только один товар налогового класса за раз. если клиент попытается добавить другой продукт налогового класса, он бросит массаж.

Для этого я попытался добавить плагин.

 public function beforeaddItem(\Magento\Quote\Model\Quote $subject,$item)
{


     $productTax = array();
     $storeId = $this->storeManager->getStore()->getId();
     $items = $this->quote->getItems();



     $writer = new \Zend\Log\Writer\Stream(BP . '/var/log/cartblock.log');
     $logger = new \Zend\Log\Logger();
     $logger->addWriter($writer);
     $logger->info(json_encode($items));

     foreach($items as $_item) {

         $writer = new \Zend\Log\Writer\Stream(BP . 'var/log/cartblock.log');
         $logger = new \Zend\Log\Logger();
         $logger->addWriter($writer);
         $logger->info(json_encode($_item->getData()));

        $productList = $this->productRepository->getById($_item->getProductId(), false, $storeId, true);
        $productTax[] = trim($productList->getTaxClassificationKey());
    }
   $productNew = $this->productRepository->getById($item->getProductId(), false, $storeId, true);




    if(!empty($productTax) && !in_array(trim($productNew->getTaxClassificationKey()),$productTax)){
        throw new \Magento\Framework\Exception\LocalizedException(__('You only order Same Tax Class product.'));
    }  

    return [$item];
}
 }

Но это не работает. Пожалуйста, помогите.

Author: Muhammad Farzam, 2019-06-14

1 answers

Вы можете попробовать обновить код своего плагина, как описано ниже.

Предположим, что вы используете пользовательское имя модуля "Company_mymodule".

СТЕПЬ 1)

Создать di.xml под ВАШИМ-MAGENTO-ROOT/приложением/кодом/компанией/MyModule/etc/

Файл: YOUR-MAGENTO-ROOT/app/code/Company/MyModule/etc/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\Checkout\Model\Cart">
        <plugin name="addtocartRestriction"
                type="Company\MyModule\Model\Plugin\Cart"/>
    </type>
</config>

ШАГ 2)

Создать Cart.php под ВАШ-MAGENTO-ROOT/приложение/код/Компания/MyModule/Модель/Плагин

Файл: YOUR-MAGENTO-ROOT/app/code/Company/MyModule/Model/Plugin/Cart.php

<?php

namespace Company\MyModule\Model\Plugin;

class Cart
{
    protected $productRepository;
    protected $storeManager;
    protected $checkoutSession;
    protected $logger;
    public function __construct( \Magento\Catalog\Api\ProductRepositoryInterface $productrepositoryInterface, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Framework\Session\SessionManagerInterface $checkoutSession, \Psr\Log\LoggerInterface $loggerInterface )
    {
        $this->productRepository = $productrepositoryInterface;
        $this->storeManager      = $storeManager;
        $this->checkoutSession   = $checkoutSession;
        $this->logger            = $loggerInterface;
    }
    public function beforeAddProduct( \Magento\Checkout\Model\Cart $subject, $productInfo, $requestInfo = null )
    {
        $productTax = array();
        $storeId    = $this->storeManager->getStore()->getId();
        $items      = $this->checkoutSession->getQuote()->getItems();
        $this->logger->info( json_encode( $items ) );
        foreach ( $items as $_item ) {
            $this->logger->info( json_encode( $_item->getData() ) );
            $productList  = $this->productRepository->getById( $_item->getProductId(), false, $storeId, true );
            $productTax[] = trim( $productList->getTaxClassificationKey() );
        }
        $productNew = $this->productRepository->getById( $item->getProductId(), false, $storeId, true );
        if ( !empty( $productTax ) && !in_array( trim( $productNew->getTaxClassificationKey() ), $productTax ) ) {            
             throw new \Magento\Framework\Exception\LocalizedException(__('You only order Same Tax Class product.'));
                return $this;
        }
        return array(
             $productInfo,
            $requestInfo 
        );
    }
}
 5
Author: Pritam Info 24, 2019-06-14 07:13:27