Magento - 登录后更改quote_id

时间:2016-08-09 10:50:12

标签: magento magento-1.9 observers

我没有登录时将产品添加到购物车。我的quote_id is 597

在结账过程中我登录(第一步),我发现我的报价发生了变化。

quote_id 597已从数据库和新的quote_id is now 555消失。

负责此引用的观察者,类和方法有什么变化,因为我在数据库中有一个临时表,我还需要修改quote_id

1 个答案:

答案 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;
    }

}
?>