簡體   English   中英

在 Magento 中添加新項目之前清除購物車中的現有項目

[英]Clear existing items in cart before adding a new Item in Magento

我正在 magento 的 checkout/controllers/cartController.php 中創建一個新的購物車 addAction()。 我的需要是,每當將產品添加到購物車時,應清除購物車中的所有現有產品,但當前添加的產品除外。 那是,

如果將諾基亞 3220 添加到空購物車中,則應將其作為項目放置。

之后如果添加諾基亞 N72,則應將諾基亞 3220(即上一項)從購物車中清除並放置諾基亞 N72,依此類推。

我覆蓋了 CartController.php 並將代碼添加到 CartController.php 中 addAction() 的開頭,

$checkout_my_cart = Mage::getSingleton('checkout/cart'); $current_items = $checkout_my_cart->getItems(); foreach ($current_items as $item) { $itemId = $item->getItemId(); $checkout_my_cart->removeItem($itemId)->save(); }

但是當我添加一個新項目來替換現有項目時,它會清除整個購物車! 我認為它不應該這樣做,因為我在 Addaction() 的開頭添加了代碼。 我嘗試將上述代碼定義為函數並使用 addAction() 調用它。 但故事似乎是一樣的。

任何幫助將不勝感激。

請幫忙。

您應該考慮使用觀察者而不是覆蓋控制器。 如果您查看Mage_Sales_Model_Quote中的addItem方法,您會發現該事件sales_quote_add_item

您可以觀察它,獲取quote_item (事件的參數)並刪除quote_item項目(手動輸入,因此請仔細檢查錯誤):

public function observeAddItem($observer) 
{
  $item = $observer->getEvent()->getQuoteItem();
  $cart = Mage::getSingleton('checkout/cart');
  foreach ($cart->getQuote()->getItemsCollection() as $_item) {
    if($_item->getId() != $item->getId()) {
      $_item->isDeleted(true);
    }
  }
}

覆蓋類(尤其是控制器)應該是你最后的手段。

更多關於如何觀察事件的信息可以在 magento wiki 上找到:

http://www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_module_development_in_magento/customizing_magento_using_event-observer_method

您好,請檢查以下代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM