Php 从Magento2中的observer中删除并重新添加可配置产品

Php 从Magento2中的observer中删除并重新添加可配置产品,php,magento2,Php,Magento2,我正在使用 checkout_cart_product_add_before observer事件调用一个类,该类从卡中删除产品并重新添加。我之所以需要这个,是因为我需要数量与在“数量”文本框中输入的数量相等,而不是将其添加到总数中(例如,如果购物车数量为10,我在“数量”框中放入5,默认的Magento2功能将使购物车中的数量变为15-我的脚本将其变为5) 问题是它只适用于简单的产品,当涉及到可配置的产品(一个可能有两个黑色和绿色色样的产品)时,它会删除整个产品并重新添加新的可配置产品(例如

我正在使用

checkout_cart_product_add_before
observer事件调用一个类,该类从卡中删除产品并重新添加。我之所以需要这个,是因为我需要数量与在“数量”文本框中输入的数量相等,而不是将其添加到总数中(例如,如果购物车数量为10,我在“数量”框中放入5,默认的Magento2功能将使购物车中的数量变为15-我的脚本将其变为5)

问题是它只适用于简单的产品,当涉及到可配置的产品(一个可能有两个黑色和绿色色样的产品)时,它会删除整个产品并重新添加新的可配置产品(例如,如果我有数量5的蓝色衬衫,我添加数量8的绿色衬衫,它将完全删除蓝色衬衫并添加绿色衬衫

我已经包装了我的脚本,如果不可配置,以阻止这种情况发生,但有人知道我如何编辑此脚本,以删除可配置的id,而不是简单的

namespace XX\XX\Observer;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
use \Magento\Checkout\Model\Session as CheckoutSession;
use \Magento\Checkout\Model\Cart;


class DeleteAndReAddFromCart implements ObserverInterface
{
    protected $request;
    protected $_cart;
    /** @var CheckoutSession */
    protected $checkoutSession;
    
    public function __construct(\Magento\Framework\App\RequestInterface $request, cart $cart, CheckoutSession $checkoutSession)
    {
        $this->_cart           = $cart;
        $this->request         = $request;
        $this->checkoutSession = $checkoutSession;
        
    }
    public function execute(\Magento\Framework\Event\Observer $observer)
    {     
        $product = $observer->getProduct();
        
        $productId = $observer->getProduct()->getId();
        $prodtype = $observer->getProduct()->getTypeId(); //is configarable or simple
        
        $items     = $this->_cart->getItems();
        $itemCount = count($items);
        if ($itemCount > 0) {
            foreach ($items as $item) {

                if ($prodtype != 'configurable') {
                    if ($item->getProduct()->getId() == $productId) {
                        $itemId = $item->getItemId();
                        $item->isDeleted(true);
                        $this->_cart->save();
                    }
            }
            }
        }
        
        
    }
}

你也可以试着找到答案