我没有登录时将产品添加到购物车。我的quote_id is 597
。
在结账过程中我登录(第一步),我发现我的报价发生了变化。
quote_id 597
已从数据库和新的quote_id is now 555
消失。
负责此引用的观察者,类和方法有什么变化,因为我在数据库中有一个临时表,我还需要修改quote_id
?
答案 0 :(得分:1)
在结帐登录时,有一个执行报价合并的观察者, 也就是说,如果客户在数据库中具有与当前报价合并的任何报价,
如果您不想合并引号,可以设置自己的观察者以删除所有以前的项目,
配置文件
<global>
<events>
<sales_quote_merge_before>
<observers>
<mymage_clearoldcartproducts_observer>
<type>singleton</type>
<class>MyMage_Clearoldcartproducts_Model_Observer</class>
<method>removeCustomerQuote</method>
</mymage_clearoldcartproducts_observer>
</observers>
</sales_quote_merge_before>
</events>
</global>
Observer.php文件
<?php
class MyMage_Clearoldcartproducts_Model_Observer extends Mage_Checkout_Model_Session {
public function removeCustomerQuote() {
$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;
}
}
?>