質問

どのcollect_totalsオブザーバーを使用できるかを探しています。観察者は二人いて、sales_quote_collect_totals_before そして sales_quote_address_collect_totals_before.

それらは次の場所にあります。 /app/code/core/Mage/Sales/Model/Quote.php そして /app/code/core/Mage/Sales/Model/Quote/Address.php.

どちらのファイルにも集計機能があるのですが、この 2 つのファイルの違いは何でしょうか?

役に立ちましたか?

解決

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

quote オブジェクトの Quote クラスです。

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

任意の見積アドレス オブジェクトの見積アドレス クラスです。

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

「collecttotals」メソッドに関して:まず、各メソッドとその目的を理解しましょう。

の方法 Mage_Sales_Model_Quote, 、の最初のエントリ ポイントです。 Totals Collector サブシステムであり、カートの保存によって開始されます。

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

コードの流れは次のとおりです。

Mage_Checkout_Model_Cart::save()

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

Mage_Sales_Model_Quote_Address::collectTotals() <-- quote オブジェクトに関連付けられた各アドレスは、quotecollect totals オブジェクト内のループを介して呼び出されます。

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

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

考えられる「コレクター」のリストは次のとおりです。

enter image description here

モジュール構成自体を介して独自の合計コレクターを挿入できます。 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:各アドレス オブジェクトが潜在的なコレクター オブジェクトのリストを実行する前に、引用アドレス オブジェクト内で起動されます。

最終的なゲームが分からないので、どちらがあなたにとって正しいかを判断することはできませんが、どちらも正しくない場合は、新しいコレクターを追加するのが最適であることを検討することをお勧めします。トータルコレクタシステム

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

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top