在结帐过程中,我有时希望以编程方式从会话报价中删除项目。所以我尝试了这段代码:
$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
答案 0 :(得分:14)
尝试
$cartHelper = Mage::helper('checkout/cart');
$items = $cartHelper->getCart()->getItems();
foreach ($items as $item)
{
$itemId = $item->getItemId();
$cartHelper->getCart()->removeItem($itemId)->save();
}
答案 1 :(得分:7)
在Magento 1.7.0.0
版本中,您可以使用:
Mage::getSingleton('checkout/cart')->truncate()->save();
答案 2 :(得分:0)
我在寻找某种类型的物品时做了类似的过程,我申请的逻辑是:
$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();
}
尝试以上操作,如果失败,我会在执行此逻辑之前和之后开始转储引用对象,以查看它们之间存在的差异。
答案 3 :(得分:0)
尝试下面的代码它会起作用
$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.');
}
}