2011-07-02 10 views
1

私は、割引のために私たちの店のクレジットを使用できるカスタムのクレジットモジュールを作るつもりでした。いくつかの例を見て、私は正常に1ページのチェックアウトにチェックアウト手順を追加しました。次に、Mage_Sales_Model_Quote_Address_Total_Abstractを拡張して、カスタムコレクタに合計を計算させます。現在、私はハード、それがどのように動作するかを確認するためにいくつかの割引値をコード化:config.xmlのカスタムMage_Sales_Model_Quote_Address_Total_Abstractが2回計算されます:請求および配送先住所

public function collect(Mage_Sales_Model_Quote_Address $address) { 
     parent::collect ($address); 
     //if($address->getData('address_type')=='billing') return $this; 

     try { 

      $this->_setAmount (-10)->_setBaseAmount (-10); 

     } catch (Exception $e) { 
      Mage::throwException ($e->getMessage()); 

     //do nothing.  
     } 
     return $this; 
    } 

    public function fetch(Mage_Sales_Model_Quote_Address $address) { 
     parent::fetch ($address); 
     //if($address->getData('address_type')=='billing') return $this; 
     $title = Mage::helper ('sales')->__ ('Credittest'); 
     $address->addTotal (array ('code' => $this->getCode(), 'title' => $title, 'value' => -10)); 
     return $this; 
    } 

セクションでは、次のようになります。

<sales> 
    <quote> 
     <totals> 
      <credittest> 
       <class>sales/quote_address_total_credit</class> 
       <after>tax_subtotal,subtotal,freeshipping</after> 
       <before>grand_total</before> 
      </credittest> 
     </totals> 
    </quote> 
</sales> 

結果が控除-20で出てくるが。いくつかのデバッグトレースの後、私のカスタムコレクターは、アドレスタイプが "請求"でもう一つが "出荷"になると、2回呼び出されます。だから私は上記のコードをコメントに追加したのは、配送先住所が入ってくるときだけです。しかし、これが正しいかどうかはわかりません。

なぜMage_Sales_Model_Quote_Addressの他のクラスが2回計算されないのですか?彼らは実際に私の追跡に従って2回呼び出されます。そして、私の問題を解決するために正しい方法は何ですか?

ありがとうございます。

答えて

関連する問題