2011-04-12 34 views
11

如果您要登錄到Magento並將一些產品添加到您的購物籃中,然後離開該網站,這些會在下次您返回網站時保存下來。如何阻止Magento在登錄時合併購物籃?

但是,當您返回時,會導致問題。如果您返回的產品沒有登錄並且在結帳過程開始時登錄,那麼您的客人和保存的購物籃將被合併。這是不可取的。

如果您當前的購物籃中有商品,有沒有辦法讓Magento在登錄時清除已保存的購物籃?

在此先感謝

回答

18

看起來管轄本是Mage_Checkout_Model_Session代碼,具體在哪裏,它調用Mage_Sales_Model_Quote::merge。這意味着你有幾個選擇。

  1. 覆蓋會話類並強制它不導致合併。
  2. 覆蓋引用類並導致它永遠不會合併購物車。如果系統的其他部分也嘗試合併購物車,則此方法可能存在次要錯誤。
  3. 掛鉤引用電話(sales_quote_merge_before)的事件並使用該機會清空其中一個購物車。你將不得不在周圍探測什麼時候應該完成,但它比其他兩個更清潔。

讓我知道,如果這不明確的某種方式。希望有所幫助!

謝謝, 喬

+0

天才!如果用戶從結帳中登錄,並且未保存的購物車中有物品,我就用#3去打開一個觀察員模塊來清除已保存的購物車。 – 2011-04-13 09:27:11

+1

@PhilLavin我對一些代碼感興趣,如果你不介意的話。我一直在上下查找代碼,但仍然無法正確對待。 – user00265 2012-05-01 14:32:25

+2

這一個工作社區,但不是在企業,在發佈時 - https://github.com/jacquesbh/jbh_cartmerge – Ashfame 2012-10-23 20:00:01

0

感謝約瑟夫Mastey,您的評論已經幫了我很多,我已經爲事件/觀察者做,我用了describias事件,然後我刪除了報價如下:

public function emptyCartUserNoLogged($observer){ 
    $event = $observer->getEvent(); 

    $quote = $event->getSource(); 

    $quote->setIsActive(false); 

    $quote->delete(); 

} 

非常感謝您的幫助。

+0

嗨。你可以做一個git或簡單地向我們展示你的代碼,這可以幫助我解決目前我面臨的一個問題。 – Chiragit007 2014-12-10 09:49:38

+0

會很好,你可以分享完整的代碼(法師1.9.0.1) – 2015-03-22 09:22:36

0

我已經修改了合併函數中的第1344行的Quote.php(/ Sales/Model /)以下內容。

foreach ($this->getAllItems() as $item) { 
     $this->removeItem($item->getId()); 
    }