3

在结帐过程中,我有时想以编程方式从会话报价中删除项目。所以我尝试了这段代码:

$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

4 回答 4

14

尝试

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

请参阅http://www.magentocommerce.com/boards/viewthread/30113/

于 2013-04-17T13:14:01.400 回答
7

Magento 1.7.0.0版本中,您可以使用:

Mage::getSingleton('checkout/cart')->truncate()->save();
于 2013-10-08T07:30:44.157 回答
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();
}

试试上面的方法,如果失败了,我会在执行这个逻辑之前和之后开始转储引用对象,看看有什么不同。

于 2013-04-17T11:46:29.713 回答
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.');
        }
    }
于 2018-04-13T11:18:38.217 回答