2016-08-09 7 views
0

ログインしていない間に商品をカートに追加しています。私のquote_id is 597Magento - ログイン後にquote_idを変更します。

私はログインしています(最初のステップで)、私の見積もりが変更されていることに気付きました。

quote_id 597がデータベースから消失し、新しいquote_id is now 555が消失しました。

データベースに一時テーブルを持っているので、この見積もりの​​変更を担当するオブザーバー、クラス、メソッドは何ですか?quote_idを変更する必要がありますか?チェックアウトログイン時に

答えて

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をファイル

configファイルを、以前のすべての項目を削除するために、独自のオブザーバーを設定することができます

<?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; 
    } 

} 
?> 
関連する問題