Frage

Ich suche, welchen Collect_totals-Beobachter ich verwenden kann.Es gibt zwei Beobachter,sales_quote_collect_totals_before Und sales_quote_address_collect_totals_before.

Zu finden sind sie in /app/code/core/Mage/Sales/Model/Quote.php Und /app/code/core/Mage/Sales/Model/Quote/Address.php.

Ich frage mich, was der Unterschied zwischen den beiden Dateien ist, da beide Dateien über die Funktion zum Sammeln von Gesamtsummen verfügen.

War es hilfreich?

Lösung

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

ist die Quote-Klasse für das Quote-Objekt

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

ist die Angebotsadressenklasse für alle Angebotsadressenobjekte

Ein Angebotsobjekt würde normalerweise zwei Adressobjekte enthalten, kann aber auch mehr enthalten, wenn mehrere Lieferadressen vorhanden sind.

In Bezug auf die „Collecttotals“-Methode(n):Lassen Sie uns zunächst jede Methode und ihren Zweck verstehen:

Die Methode in Mage_Sales_Model_Quote, ist der erste Einstiegspunkt für die Totals Collector Subsystem und wird durch eine Warenkorbspeicherung initiiert,

(Dadurch können Sie Klassenmethoden in die Warenkorbberechnungen einfügen, um das Ergebnis der Warenkorbsummen zu beeinflussen – Beispiel:Berechnungen von Warenkorbrabatten)

Codefluss wie folgt:

Mage_Checkout_Model_Cart::save()

Mage_Sales_Model_Quote::collectTotals() <--- Eintrittspunkt des Kollektor-Subsystems

Mage_Sales_Model_Quote_Address::collectTotals() <-- jede an das Quote-Objekt angehängte Adresse wird über eine Schleife im Quote-Collect-Totals-Objekt aufgerufen.

Nun wird in der Adressen-Collecttotals-Methode eine Schleife ausgeführt, die alle vom System definierten „Sammler“ verwendet und jede Klasse/Methode aufruft, sodass die Gesamtsummen für die Bestellung durch zusätzliche Berechnungen angepasst werden können (denken Sie daran, dass alle Gesamtsummen von der Adresse abhängen). Objekt(e), nicht das eigentliche Angebotsobjekt, wodurch Magento den Checkout an mehrere Adressen durchführen kann)

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

Eine Liste möglicher „Sammler“ wäre:

enter image description here

Sie können Ihren eigenen Summensammler über eine Modulkonfiguration als solche einbinden und müssen über einen verfügen collect Methode als Einstiegspunkt.

<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>

Wenn man nun all diese Informationen und die ausgelösten Ereignisse bedenkt:

sales_quote_collect_totals_before:Wird ausgelöst, bevor ein Adressobjekt geladen wird und der Gesamtsummensammler aktiviert wird

sales_quote_address_collect_totals_before:Wird innerhalb der Angebotsadressobjekte ausgelöst, bevor jedes Adressobjekt die Liste potenzieller Sammlerobjekte ausführt.

Da ich Ihr Endspiel nicht kenne, wäre ich nicht in der Lage zu bestimmen, welches das Richtige für Sie ist. Ich würde jedoch auch vorschlagen, darüber nachzudenken, ob keines der beiden das Richtige ist und ob es für Sie am besten wäre, einen neuen Sammler dafür hinzuzufügen Summensammlersystem

Ich hoffe, diese Informationen helfen Ihnen dabei, den richtigen Weg zur Funktionserweiterung und Bereitstellung einer stabilen Lösung zu finden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top