販売見積と販売見積住所の違い


8

使用できるcollect_totalsオブザーバーを探しています。2つのオブザーバー、 sales_quote_collect_totals_beforesales_quote_address_collect_totals_beforeがあります。

彼らはで見つけることができる/app/code/core/Mage/Sales/Model/Quote.php/app/code/core/Mage/Sales/Model/Quote/Address.php

両方のファイルにCollect total関数があるため、2つのファイルの違いは何ですか?

回答:


14

/app/code/core/Mage/Sales/Model/Quote.php

引用オブジェクトの引用クラスです

/app/code/core/Mage/Sales/Model/Quote/Address.php

見積住所オブジェクトの見積住所クラスです

見積もりオブジェクトには通常2つの住所オブジェクトが含まれますが、複数の配送先住所が存在する場合はさらに多く含めることができます。

'collecttotals'メソッドに関して:最初に各メソッドとその目的を理解しましょう:

のメソッドはMage_Sales_Model_QuoteTotals Collectorサブシステムの初期エントリポイントであり、カートの保存によって開始されます。

(これにより、カートメソッドの計算にクラスメソッドを挿入して、カート合計の結果に影響を与えることができます-例:カート割引の計算)

次のようにコードフロー:

Mage_Checkout_Model_Cart::save()

Mage_Sales_Model_Quote::collectTotals() <---コレクタサブシステムのエントリポイント

Mage_Sales_Model_Quote_Address::collectTotals() <-見積もり収集オブジェクトのループを介して、見積もりオブジェクトに添付された各アドレスが呼び出されます。

これで、アドレスcollecttotalsメソッドで、すべてのシステム定義の「コレクター」を使用してループが実行され、各クラス/メソッドが呼び出されるため、追加の計算によって注文の合計を調整できます(すべての合計がアドレスから外れることに注意してください) magentoが複数のアドレスへのチェックアウトを実行できるようにする実際の見積もりオブジェクトではなく、オブジェクト

foreach ($this->getTotalCollector()->getCollectors() as $model) {
            $model->collect($this);
} 

可能な「コレクター」のリストは次のとおりです。

ここに画像の説明を入力してください

このようなモジュール構成を介して独自の合計コレクターを注入することができcollect、エントリポイントとしてメソッドが必要です。

<sales>
   <quote>
      <totals>
         <giftpromo>
           <class>giftpromo/promo_gift</class>
           <after>discount</after>
           <before>tax,grand_total</before>
           <sort_order>12410</sort_order>
         </giftpromo>
      </totals>
    </quote>
</sales>

次に、そのすべての情報と発生したイベントを検討します。

sales_quote_collect_totals_before:アドレスオブジェクトが読み込まれる前に発生し、合計コレクターが動作します

sales_quote_address_collect_totals_before:各住所オブジェクトが潜在的なコレクターオブジェクトのリストを実行する前に、見積住所オブジェクト内で発生します。

あなたのエンドゲームを知らないので、どちらがあなたに適しているかを判断することはできませんが、どちらも正しくないかどうかを検討することをお勧めします。合計コレクターシステム

この情報が、機能を拡張するための正しい方法を決定し、安定したソリューションを提供するのに役立つことを願っています。


超説明!
David Manners

最初の行を読んで、すでに+1を決めました。
pspahn、2015年

@ProxiBlueあなたの答えを読んだ後、collectTotals()メソッドに関連する1つの問題を分類するのを手伝ってくれると思います。したがって、注文の際に製品に割引を適用するために、Productテーブルに2つの割引属性があります。したがって、Quoteを作成するときに、これらのディスカウントとafter_discountの金額をquoteテーブルに追加します。$ quote-> collectTotals()-> save()の行にある注文をすると、割引値が0になり、合計金額が元の価格になります(割引価格なし)。これを修正する方法を教えてください。
apandey846 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.