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.

VijayS91
quelle

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

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

Julien Lachal
quelle
Konnten Sie auf diese Weise erreichen, was Sie wollten? oder greift es nicht ganz dort ein, wo Sie es möchten?
Julien Lachal