2013-04-17 3 views
3

Во время процесса проверки я иногда хочу программно удалить элементы из цитаты сессии. Так что я попробовал этот код:Как удалить предмет из цитаты в 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

ответ

13

Попробуйте

$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/

+0

Спасибо, это помогло мне выявить проблему. – Matthias

+4

Разве это не спасет корзину на каждой итерации? Почему ты бы так поступил? Удалите элементы на итерации и сохраните корзину за ее пределами. – nevvermind

+0

@Renon Как использовать $ items = $ cartHelper-> getCart() -> getItems(); эта строка в API? Могу ли я получить корзину по идентификатору корзины или идентификатору клиента, используя вышеуказанные коды? –

0

я подобный процесс при поиске элементов определенного типа, Логика I Применяемое:

$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(); 
} 

Попробуйте выше, и если это не удается, я хотел бы начать демпинг объектов кавычек до и после выполнения этой логики, чтобы увидеть, какие различия существуют.

+1

Нет, я скопировал код 1: 1, но детали все еще в $ цитатой объект после цикла. – Matthias

+0

ok, В цикле попробуйте добавить: Zend_Debug :: dump ($ quote-> removeItem ($ item-> getId()) -> save()); die(); и дайте мне знать, что это возвращает. Это должно быть либо NULL, либо некоторые полезные данные. –

6

В Magento 1.7.0.0 версии, вы можете использовать:

Mage::getSingleton('checkout/cart')->truncate()->save(); 
Смежные вопросы