Comment supprimer l'ancien produit du panier après la connexion du client


8

Le client visite le site Web et ajoute le produit,

puis connexion client.

si le client a déjà des articles du panier, ses anciens articles supprimés, les articles nouvellement ajoutés ne montrant que

Exemple:

Le client a déjà 5 produits dans le panier> Visiter le site> ajouter 2 nouveaux produits dans le panier> se connecter au compte client> afficher le panier ajouter 2 nouveaux produits (les anciens produits du panier sont supprimés)

Toute suggestion sera appréciée.

Réponses:


7

utiliser cet événement sales_quote_merge_before

mettez ceci dans config.xml

<events> 
   <sales_quote_merge_before><!--calling this event before merging the old cart with newly added cart items while login--> 
       <observers> 
            <ws_clearoldcartproducts_observer><!--unique identifier name for our observer--> 
                <type>singleton</type> 
                <class>Ws_Clearoldcartproducts_Model_Observer</class><!--Our observer class name--> 
                <method>loadCustomerQuote</method><!--Method to be called from our observer class--> 
            </ws_clearoldcartproducts_observer> 
        </observers> 
    </sales_quote_merge_before> 
</events> 

mettez ceci dans observer.php

public function loadCustomerQuote() 
{ 
    $customerQuote = Mage::getModel('sales/quote') 
                        ->setStoreId(Mage::app()->getStore()->getId())
                        ->loadByCustomer(Mage::getSingleton('customer/session')->getCustomerId()
                    ); 
    if ($customerQuote->getId() && $this->getQuoteId() != $customerQuote->getId()) 
    { 
        // Removing old cart items of the customer. 
        foreach ($customerQuote->getAllItems() as $item) 
        { 
            $item->isDeleted(true); 
            if ($item->getHasChildren()) { 
                foreach ($item->getChildren() as $child) { 
                    $child->isDeleted(true); 
                } 
            } 
        } 
        $customerQuote->collectTotals()->save(); 
    } 
    else 
    { 
        $this->getQuote()->getBillingAddress(); 
        $this->getQuote()->getShippingAddress(); 
        $this->getQuote()->setCustomer(Mage::getSingleton('customer/session')->getCustomer()) ->setTotalsCollectedFlag(false) ->collectTotals() ->save();
    } 
    return $this; 
} 

Référez ce lien


j'ai obtenu la réponse du lien. merci @surya
VijayS91

3

Je vous suggère de vous accrocher à l'événement appelé sales_quote_merge_beforeet de vider l'un des caddies (l'existant par exemple).
Cet événement est déclenché après la connexion et avantsales_quote_collect_totals_before


avez-vous pu réaliser ce que vous vouliez de cette façon? ou n'intervient-il pas tout à fait là où vous le souhaitez.
Julien Lachal
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.