Cách xóa sản phẩm giỏ hàng cũ sau khi khách hàng đăng nhập


8

Khách hàng truy cập trang web và thêm sản phẩm,

sau đó khách hàng đăng nhập.

nếu khách hàng đã có mặt hàng giỏ hàng, mặt hàng cũ đã bị xóa, mặt hàng mới thêm chỉ hiển thị

Thí dụ:

Khách hàng đã có 5 sản phẩm trong giỏ hàng> Truy cập trang web> thêm 2 sản phẩm mới vào giỏ hàng> đăng nhập tài khoản khách hàng> hiển thị giỏ hàng mới thêm 2 sản phẩm (sản phẩm giỏ hàng cũ đã bị xóa)

Bất kỳ đề xuất sẽ được đánh giá cao.

Câu trả lời:


7

sử dụng sự kiện này sales_quote_merge_b Before

đặt cái này trong 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> 

đặt cái này trong 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; 
} 

Tham khảo liên kết này


Tôi đã nhận được câu trả lời từ liên kết. cảm ơn @surya
VijayS91

3

Tôi đề nghị bạn móc vào sự kiện được gọi sales_quote_merge_beforevà làm trống một trong các giỏ hàng (ví dụ như sự kiện hiện có).
Sự kiện này được kích hoạt sau khi đăng nhập và trước đósales_quote_collect_totals_before


bạn có thể đạt được những gì bạn muốn theo cách này? hoặc nó không hoàn toàn can thiệp vào nơi bạn muốn.
Julien Lachal
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.