Удалить товар из корзины для данного идентификатора продукта

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

$myProductId=20;
$product = Mage::getModel('catalog/product')->setStoreId(Mage::app()->getStore()->getId())->load($myProductId);
$quote =  Mage::getSingleton('checkout/session')->getQuote();
$cartItems = $quote->getItemByProduct($product);
if ($cartItems) {  $quote->removeItem($cartItems->getId())->save();}

4 ответа

ItemId (идентификатор товара в корзине) не совпадает с ProductId товара, который он представляет. Попробуйте перебирать элементы в корзине, пока не найдете тот с ProductId, который вы хотите удалить:

$cartHelper = Mage::helper('checkout/cart');
$items = $cartHelper->getCart()->getItems();
foreach ($items as $item) {
    if ($item->getProduct()->getId() == $productId) {
        $itemId = $item->getItemId();
        $cartHelper->getCart()->removeItem($itemId)->save();
        break;
    }
}

Пожалуйста, попробуйте, как описано выше.

Ниже код работает для меня, вы можете попробовать это, вы можете вызвать эту функцию, используя ajax или post метод, поместите эту функцию в ваш контроллер и вызовите ее. передать идентификатор клиента и передать его ему

public function removeCartAction()
{
    $productId = trim($_POST['productId']);
    $customer  = trim($_POST['requesterId']);
    if ($customer) {
        $storeId = Mage::app()->getWebsite(true)->getDefaultGroup()->getDefaultStoreId();
        // get quote table cart detail of all customer added 
        $quote = Mage::getModel('sales/quote')->setStoreId($storeId)->loadByCustomer($customer);        
        if ($quote) {
            $collection = $quote->getItemsCollection(false);
            if ($collection->count() > 0) {
                foreach( $collection as $item ) {
                    if ($item && $item->getId()) {
                        $quote->removeItem($item->getId());
                        $quote->collectTotals()->save();
                    }
                }
            }
        }
    }       
}

Чтобы удалить товар по определенному item_id из корзины (цитаты), вы можете использовать это:

         $cart = Mage::getModel('checkout/session')->getQuote();

         $cartHelper = Mage::helper('checkout/cart');
         $items = $cart->getAllVisibleItems();
         foreach($items as $item):
         if($item->getItemId() == $id):
               $itemId = $item->getItemId();
               $cartHelper->getCart()->removeItem($itemId)->save();
               break;
         endif;
         endforeach;

Выполните это, вы получите вывод

$product = $observer->getEvent()->getProduct();
$cart = Mage::getSingleton('checkout/cart');
foreach ($cart->getQuote()->getItemsCollection() as $_item) {
    if ($_item->getProductId() == $productId) {
            $_item->isDeleted(true);
    //Mage::getSingleton('core/session')->addNotice('This product cannot be added to shopping cart.');
        }
    }
Другие вопросы по тегам