Представьте, что есть два продукта, а именно: Продукт A и Продукт B. Продукт B - это вирусный продукт, который мне нужно добавить в корзину, когда Продукт A добавлен в него.
Для этого я пытаюсь добавить продукт B в корзину, наблюдая за событием checkout_cart_product_add_after
. После добавления продукта А я извлекаю количество продукта, добавленного для продукта А, и на его основе я пытаюсь добавить продукт Б программно. Чтобы добавить продукт B, я написал код ниже:
<?php
namespace MyModule\Applicationcharges\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\App\RequestInterface;
class AddCharges implements ObserverInterface
{
protected $_productRepository;
protected $_cart;
public function __construct(\Magento\Catalog\Model\ProductRepository $productRepository, \Magento\Checkout\Model\Cart $cart){
$this->_productRepository = $productRepository;
$this->_cart = $cart;
}
public function execute(\Magento\Framework\Event\Observer $observer)
{
$item=$observer->getEvent()->getData('quote_item');
$product=$observer->getEvent()->getData('product');
$item = ( $item->getParentItem() ? $item->getParentItem() : $item );
$product->getQty();
$params = array(
'product' => 2056,
'qty' => 1
);
$_product = $this->_productRepository->getById(2056);
$this->_cart->addProduct($_product,$params);
$this->_cart->save();
}
}
Однако попытка добавить продукт с помощью $this->_cart->addProduct()
не работает. Может кто-нибудь, пожалуйста, руководство, как это можно сделать? Есть что-нибудь, чего мне не хватает.
Любое руководство будет оценено.
Я сделал другую форму, для зарегистрированного клиента и гостевой корзины
источник