Anzeige von Preisen

Zunächst passen wir die Darstellung von Preisen an hiesige Verhältnisse an, indem wir das Formular auf admin/store/settings/store/edit/format so ausfüllen, wie in folgendem Screenshot zu sehen:

Ubercart bietet ein flexibles System, um die Darstellung von Preisen mit eigenen Modulen anzupassen. Betrachten wir zunächst admin/store/settings/price-handlers (folgender Screenshot):

Wie wir sehen, gibt es zwei Typen von Handlern, die auf den Preis Einfluss nehmen:

Price alterer
Price formatter
Ein Price alterer verändert den angezeigten Preis. So ist es zum Beispiel mit einem Price alterer möglich, 10% Rabatt auf alle Produkte zu gewähren. Ein Price formatter kümmert sich um die Darstellung des Preises. Zum Beispiel kann mit einem Price formatter jeder Preisangabe der Zusatz "(inkl. 19% MwSt. zzgl. Versandkosten) " hinzugefügt werden. Wie das geht, schauen wir uns nun anhand eines kleinen Beispielmoduls an. Zuvor sollte allerdings noch die Option "Cache generated price values until the next cron run." deaktiviert werden (siehe voranstehender Screenshot).

Wir wollen nun ein Modul "price_test" erstellen, welches nichts weiter tut, als bei einem Aufruf von http://www.example.com/?q=price_test den Rückgabewert von uc_price() auszugeben. Folgende price_test.module leistet dies:

'Preisinfo', 'page callback' => 'our_test_function', 'access callback' => TRUE, ); return $items; } function our_test_function() { return uc_price('30', array()); }
Nachdem nun noch die price_test.info mit dem Inhalt ; $Id$ name = price_test description = Wir schauen uns die Funktion uc_price() an. core = 6.x erstellt wurde, können wir das Modul auf der Seite admin/build/modules aktivieren und http://www.example.com/?q=price_test aufrufen. Im Inhalt der Seite sollte nun

Preisinfo 30,00€
erscheinen. Die zentrale Bedeutung in dem System zur Darstellung und Veränderung von Preisen kommt der Funktion uc_price() zu, die in ubercart/uc_store/includes/uc_price.inc definiert wird.

Wir wollen nun unseren eigenen "price formatter" definieren. Dazu erweitern wir die Datei price_test.module um die folgenden beiden Funktionen.

/* * Implementation of hook_uc_price_handler() */ function price_test_uc_price_handler() { $items['format'] = array( 'title' => t('Mehrwertsteuer- und Versandkostenanzeige'), 'description' => t('Jedem Preis den Text "(inkl. 19% MwSt. zzgl. Versandkosten)" hinzufügen.'), 'callback' => 'mwst_und_vsndkosten_anzeigen', ); return $items; } function mwst_und_vsndkosten_anzeigen($price, $options) { $output = uc_store_price_handler_format($price, $options); return $output."
(inkl. 19% MwSt. zzgl. Versandkosten)"; }
Bis einschließlich Version 2.0-rc3 müssen Sie nun noch den Patch von http://www.ubercart.org/files/price_handlers.patch anwenden. Rufen wir nun erneut admin/store/settings/price-handlers auf, dann sehen wir, dass wir einen neuen price formatter zur Auswahl haben.

Hier speichern wir unsere Auswahl "Mehrwertsteuer- und Versandkostenanzeige" und rufen erneut http://www.example.com/?q=price_test auf. Diesmal sollten wir

Preisinfo 30,00€ (inkl. 19% MwSt. zzgl. Versandkosten)
als Ausgabe bekommen. Es wird jetzt jeder Preisangabe der Zusatz in Klammern hinzugefügt. Das ist aber nicht das, was man will. Es gibt Stellen, an denen dieser Zusatz unpassend bis falsch ist. Die Anzeige des Rechnungsbetrages ist ein Beispiel dafür. Wie also kann man bestimmte Stellen ausnehmen?