Frage

Ich möchte eine Warenkorbpreisregel erstellen, die

  • Prüft auf ein vordefiniertes Kundenattribut
  • Wendet eine Preisregel auf das teuerste Produkt im Warenkorb an

Was ist ein guter Ausgangspunkt dafür?Welche Ereignisse konnte ich beobachten?Wie lässt sich das am schnellsten umsetzen?

War es hilfreich?

Lösung

Das ist eigentlich gar nicht so schwierig.

Schauen Sie mal rein Mage_SalesRule_Model_Rule_Condition_Combine::getNewChildSelectOptions

Sie werden sehen, dass dadurch eine Reihe von Bedingungen erstellt werden:

$conditions = array_merge_recursive($conditions, array(
            array('value'=>'salesrule/rule_condition_product_found', 'label'=>Mage::helper('salesrule')->__('Product attribute combination')),
            array('value'=>'salesrule/rule_condition_product_subselect', 'label'=>Mage::helper('salesrule')->__('Products subselection')),
            array('value'=>'salesrule/rule_condition_combine', 'label'=>Mage::helper('salesrule')->__('Conditions combination')),
            array('label'=>Mage::helper('salesrule')->__('Cart Attribute'), 'value'=>$attributes),
        ));

und löst dann ein Ereignis aus, das ein Objekt namens „as“ weitergibt 'additional'

Mage::dispatchEvent('salesrule_rule_condition_combine', array('additional' => $additional));

es erwartet zurück $additional->getConditions()

Wenn Sie also dieses Ereignis beobachten, können Sie das zusätzliche Objekt mit Ihrem eigenen Array von Bedingungen füllen.

In Ihrem Beobachter reicht ein Code wie dieser aus:

$conditions = array(
            array('value'=>'YOURMODULE_NAMESPACE/rule_condition_Mostexpensive', 'label'=>Mage::helper('YOURMODULE_NAMESPACE')->__('Most Expensive Product')),
        ); 

Jetzt wird Ihre Regeloption sauber in die Liste der verfügbaren Regeln eingefügt.

Der nächste Schritt besteht darin, das zu verwendende Modell zu erstellen.Wie aus dem obigen Code ersichtlich ist, müssen Sie die Klasse erstellen

YOURMODULE_NAMESPACE_Model_Rule_Condition_Mostexpensive 

Wie weit das gehen würde, hängt wirklich von der Funktionalität ab, die Sie nutzen möchten.Wenn Sie beispielsweise beabsichtigen, Produktattribute in der Validierung zu verwenden, würden Sie diese erweitern Mage_SalesRule_Model_Rule_Condition_Product So können Sie alle Funktionen rund um die Produktvalidierung übernehmen.

In Ihrer Klasse sind diese Methoden die wichtigsten.Versuchen Sie, Methoden nicht zu erweitern, wenn dies nicht erforderlich ist. Versuchen Sie am besten, den Kerncode wiederzuverwenden, was zu einer wesentlich höheren Stabilität Ihres Moduls führt.

asHtml() :Dies enthält die Optionen, die angezeigt werden, wenn Ihre Regel ausgewählt wird.

validate :Hier platzieren Sie Ihre Logik, um festzustellen, ob die Regel gültig ist.Am Ende würde es einfach zu bool führen.

Wenn Sie eine Regel mit Unterregeln erstellen möchten, erweitern Sie die _combined salesrule-Klassen wie zum Beispiel: Mage_SalesRule_Model_Rule_Condition_Product_Found

Schauen Sie sich den Kerncode in den Verkaufsregeln an.Es enthält alle Beispiele, die Sie benötigen.Um wirklich zu verstehen, was vor sich geht, empfehle ich Ihnen dringend, einen Debugger (ich verwende xdebug) mit einer Idee/einem Editor zu verwenden, der Zeilenumbrüche unterstützt.(Ich benutze NetBeans) Auf diese Weise können Sie Haltepunkte in die Salsrule -Klassen einfügen und den Codefluss befolgen, wenn die Regeln erstellt werden.Machen Sie das Sitzen viel einfacher.

Hoffe das hilft.

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