Как удалить элемент из цитаты в Magento?
Во время процесса оформления заказа я иногда хочу программно удалить элементы из котировки сеанса. Поэтому я попробовал этот код:
$quote = Mage::getSingleton('checkout/session')->getQuote();
$all_quote_items = $quote->getAllItems();
foreach ($all_quote_items as $item) {
$quote->removeItem($item->getId())->save();
}
Однако после этого цикла список элементов в объекте $quote
остается прежним, т. е. никакие элементы не были удалены.
Есть идеи, чего мне здесь не хватает?
Использование Magento 1.4.1.1
4 ответа:
Попробуйте
$cartHelper = Mage::helper('checkout/cart'); $items = $cartHelper->getCart()->getItems(); foreach ($items as $item) { $itemId = $item->getItemId(); $cartHelper->getCart()->removeItem($itemId)->save(); }
В версии
Magento 1.7.0.0
можно использовать:Mage::getSingleton('checkout/cart')->truncate()->save();
Я делаю аналогичный процесс при поиске элементов определенного типа, логика, которую я применил, такова:
$session= Mage::getSingleton('checkout/session'); $quote = $session->getQuote(); $cart = Mage::getModel('checkout/cart'); $cartItems = $cart->getItems(); foreach ($cartItems as $item) { $quote->removeItem($item->getId())->save(); }
Попробуйте выше, и если это не удастся, я начну сбрасывать объекты quote до и после выполнения этой логики, чтобы увидеть, какие есть различия.
Попробуйте следующий код, он будет работать
$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.'); } }