09.01.2015

Arbeiten mit Preisen in Magento

Die Preisbildung ist einer der kompliziertesten Mechanismen in Magento. Die Preise werden an unterschiedlichen Stellen gebildet, angefangen bei der Berechnung der Mehrwertsteuer bis hin zur Anzeige des Preises für die Produktoption auf der Produktansichtsseite.

Bevor Sie sich mit der Preisbildung beschäftigen, sollten Sie Folgendes bedenken:

Angenommen, in der Datenbank wurden Preise mit vier Zeichen nach Komma gespeichert und es ist erforderlich, dass beim Berechnen der Mehrwertsteuer nicht der bis auf zwei Zeichen aufgerundete Preis, sondern der Preis mit den vier Nachkommazeichen aus der Datenbank verwendet wird. Leider gibt es in Magento keine einheitliche Stelle, an der die Logik der Preisbildung geändert werden kann. Die Preise werden schrittweise gebildet. Hier sind die wichtigsten Phasen der Preisbildung:

1. Methoden der Steuerberechnung

Die Steuerberechnungsmethoden werden im Admin-Menü konfiguriert:

System > Configuration > Sales > Tax > Calculation Settings

Das zentrale Objekt, das die gesamte Preisbildungslogik enthält, befindet sich in

Mage_Tax_Model_Sales_Total_Quote_Subtotal

Jede Steuerberechnungsmethode, die im Admin-Menü angepasst wird, hat eine entsprechende Methode in dieser Klasse:

Tax Calculation Method Based On

2. Finale Steuerberechnung

Die Höhe der Steuern kann im Objekt Mage_Tax_Model_Calculation mittels der Methode calcTaxAmount() umgeschrieben werden.

3. Berechnung der Warenkorbsumme

Der Gesamtpreis des Warenkorbs wird im Objekt  Mage_Sales_Model_Quote_Address_Total_Grand mittels collect() berechnet. Genau hier können alle Änderungen entsprechend der neuen Logik eingetragen werden.

4. Preisansicht

Die Preisansicht wird im Objekt Mage_Core_Model_Store mittels der Methode roundPrice() gebildet.

Bei der Aufgabe mit den 4 Nachkommazeichen gehen Sie wie folgt vor:

public function roundPrice($price)

{

return round($price, 4);

}

5. Dynamische Preisberechnung

Auf der Produktansichtsseite, wenn das Produkt über Optionen verfügt, wird der Preis mithilfe von Javascript-Methoden geändert. Das heißt, dass bei der Auswahl einer Option der Endpreis des Produkts sich entsprechend der ausgewählten Option ändert. Im Javascript-Code wird die auf der PHP-Seite geschriebene Preisberechnung dupliziert. Wenn sich etwas an der Preisbildungslogik in den PHP-Dateien ändert, muss überprüft werden, ob die Berechnung in Javascript korrekt ausgeführt wird.

Dazu muss die Methode Product.OptionsPrice in der Datei js/varien/product.js umgeschrieben werden.

Das gesamte Javascript in Magento basiert auf der prototype-Bibliothek. Für die Erweiterung der Methoden in prototype muss die Methode wrap() verwendet werden. Weitere Informationen zu prototype API

http://prototypejs.org/doc/latest/language/Function/prototype/wrap/ .