So entfernen Sie das alte Warenkorbprodukt nach der Kundenanmeldung


8

Kunden besuchen Website und fügen das Produkt hinzu,

dann Kundenlogin.

Wenn der Kunde bereits Warenkorbartikel hat, werden alte Artikel entfernt, neu hinzugefügte Artikel werden nur angezeigt

Beispiel:

Der Kunde hat bereits 5 Produkte im Warenkorb.> Besuchen Sie die Website.> Fügen Sie 2 neue Produkte in den Warenkorb hinzu.> Kundenkonto anmelden.> Zeigen Sie den Warenkorb an. Fügen Sie 2 neue Produkte hinzu. (Alte Warenkorbprodukte werden entfernt.)

Anregungen werden geschätzt.

Antworten:


7

Verwenden Sie dieses Ereignis sales_quote_merge_before

Fügen Sie dies in die Datei config.xml ein

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

Setzen Sie dies in 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; 
} 

Verweisen Sie auf diesen Link


Ich habe die Antwort vom Link bekommen. danke @surya
VijayS91

3

Ich schlage vor, dass Sie sich an das aufgerufene Ereignis anschließen sales_quote_merge_beforeund einen der Warenkörbe leeren (z. B. den vorhandenen).
Dieses Ereignis wird nach und vor der Anmeldung ausgelöstsales_quote_collect_totals_before


Konnten Sie auf diese Weise erreichen, was Sie wollten? oder greift es nicht ganz dort ein, wo Sie es möchten?
Julien Lachal
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.