Обновляйте количество товаров во время добавления товара в корзину
Я хочу обновить кол-во до 2, когда товар будет добавлен в корзину. В принципе, я хочу, чтобы, когда пользователь размещает товар в корзине (количество не отображается для пользователя), по умолчанию для него установлено значение кол-во. Я создал наблюдателя и использую событие checkout_cart_product_add_after
Но когда я пытаюсь добавить товар в корзину, каким-то образом процент загрузки процессора достигает 90%, сервер выходит из строя, и мне приходится перезапускать apache. Мой код выглядит как -
namespace Referral\Duplicate\Observer;
use Magento\Framework\Event\Observer as EventObserver;
use Magento\Framework\App\RequestInterface;
use Magento\Framework\Event\ObserverInterface;
use Magento\Quote\Model\Quote;
use Magento\Sales\Api\Data\OrderInterface;
use Magento\Checkout\Model\Session as CheckoutSession;
class DuplicateObserver implements ObserverInterface
{
private $_checkoutSession;
protected $_productRepository;
protected $_cart;
protected $formKey;
public function __construct(
\Magento\Catalog\Model\ProductRepository $productRepository,
\Magento\Checkout\Model\Cart $cart,
\Magento\Framework\Data\Form\FormKey $formKey,
CheckoutSession $checkoutSession,
\Magento\Catalog\Model\Product $product,
\Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
\Magento\Quote\Model\Quote\Item $item
)
{
$this->quoteRepository = $quoteRepository;
$this->_productRepository = $productRepository;
$this->_cart = $cart;
$this->formKey = $formKey;
$this->product = $product;
$this->_checkoutSession = $checkoutSession;
}
public function execute(EventObserver $observer)
{
$couponCode = 'duplicate';
$items = $observer->getQuoteItem();
$product = $observer->getEvent()->getData('product');
$productId = $product->getId();
$skuQty = count($observer->getQuoteItem());
$cartItems = $this->_cart->getQuote()->getAllVisibleItems();
$quote = $this->_checkoutSession->getQuote();
$_product = $this->_productRepository->getById($productId);
$params = array(
'form_key' => $this->formKey->getFormKey(),
'product' => $productId,
'qty' => 1
);
// //$newProduct = $this->product->load($productId);
//$this->_cart->addProduct($product, $params);
$this->_cart->save();
}
}
Проблема возникает, когда я раскомментирую строку -
// //$newProduct = $this->product->load($productId);
//$this->_cart->addProduct($product, $params);
1 answers
Вы можете попробовать следующий код для выполнения ваших требований: Используйте приведенное ниже для events.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="checkout_cart_product_add_after">
<observer name="cart_update_custom" instance="Vendor\Module\Observer\UpdateCartItem" />
</event>
</config>
И используйте приведенный ниже код UpdateCartItem.php :
<?php
namespace Vendor\Module\Observer;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Checkout\Model\Cart;
class UpdateCartItem implements ObserverInterface {
/**
* @var Cart
*/
protected $_cart;
public function __construct(
cart $cart
) {
$this->_cart = $cart;
}
/**
* After cart observer
* @param Observer $observer
* @return Cart
* @throws \Magento\Framework\Exception\LocalizedException
* @throws \Magento\Framework\Exception\NoSuchEntityException
*/
public function execute(Observer $observer) {
$quoteItem = $observer->getEvent()->getQuoteItem();
$quoteItem->setData('qty', 4);
$this->_cart->save();
}
}
Запустите компиляцию и тестирование di.