Posted By

TioSolid on 12/02/10


Tagged

magento


Versions (?)

Dont merge carts after client login


 / Published in: PHP
 

URL: http://www.magentocommerce.com/boards/viewthread/73612/

I’ve implemented something similar a couple of months ago. What we wanted was to prevent the cart from the old session from merging into the cart of the current session at the point when the customer login. If that describes what you want as well, then the way I did it was to overwrite MageCheckoutModelObserver. The function loadCustomerQuote() in the observer observes the event customerlogin and merges the current session quote with the last login quote object

  1. public function loadCustomerQuote()
  2. {
  3. $lastQid = Mage::getSingleton('checkout/session')->getQuoteId(); //quote id during session before login;
  4. if ($lastQid) { //before login session exists means cart has items
  5. $customerQuote = Mage::getModel('sales/quote')
  6. ->loadByCustomer(Mage::getSingleton('customer/session')->getCustomerId()); //the cart from last login
  7. //set it to the session before login and remove its items if any
  8. $customerQuote->setQuoteId($lastQid);
  9. $this->_removeAllItems($customerQuote);
  10.  
  11. } else { //no session before login, so empty the cart (current cart is the old cart)
  12. $quote = Mage::getModel('checkout/session')->getQuote();
  13. $this->_removeAllItems($quote);
  14. }
  15. }
  16.  
  17. /**
  18.   * iterate through quote and remove all items
  19.   *
  20.   * @return nothing
  21.   */
  22. protected function _removeAllItems($quote){
  23. //reset all custom attributes in the quote object here, eg:
  24. // $quote->setDestinationCity('');
  25.  
  26. foreach ($quote->getAllItems() as $item) {
  27. $item->isDeleted(true);
  28. if ($item->getHasChildren()) foreach ($item->getChildren() as $child) $child->isDeleted(true);
  29. }
  30. $quote->collectTotals()->save();
  31. } //_removeAllItems

Report this snippet  

You need to login to post a comment.