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 に答える
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 に答える