Montag, 30. April 2007 Druck-Ansicht
Wenn man mit xt:Commerce die Preis-Anzeige nach eigenen Wünschen umgestalten und dabei keine System-Dateien ändern möchte, kann man sein Template um einige Zusatzfunktionen erweitern. Hier ein entsprechendes Funktions-Set zum Downloaden und “Einbauen”, das u.a. die Ausgabe von Preisnachlässen als Prozentwert ermöglicht.
Folgendes Szenario: Im Shop sollen Artikel, die es zum reduzierten Preis gibt, einen Button “Sonderpreis!” neben der Überschrift haben. Außerdem soll der Prozentwert, um den reduziert wurde, zusammen mit der Ersparnis in Euro gezeigt werden.
Mit den in xt:Commerce vorgegebenen “Methoden” kommt man nicht weiter. Wenn man einen Preis ausgibt, gibt man ihn “komplett” aus. Also (sofern vorhanden) den “alten” Artikelpreis, darunter den aktuellen Preis, bei gültigem Artikelrabatt zusätzlich der Hinweis “Sie sparen soundsoviel Prozent”.
Aber eine Möglichkeit, diese Angaben irgendwie “aufzusplitten”, so dass man besondere Hinweise in extra Kästchen oder Buttons platzieren kann, gibt es nicht. Alles was “zum Preis” gehört, wird (bis auf die Staffelpreis-Tabelle) in einem Rutsch wiedergegeben - und Ende.
Auch die HTML-Formatierung der Preise lässt nicht sonderlich viel Spielraum: Der “Sie sparen”-Hinweis (der z.B. bei einem Artikelrabatt auftaucht) erscheint nicht einmal in einem neuen Absatz, sondern nach einem Zeilenumbruch - womit alle schönen Ideen, den “eigentlichen Preis” mit einer anderen Farbe als den Rabatt-Text zu markieren - nicht wirklich funktionieren können. Ebensowenig wie “Textbausteine” oder “Währungssymbole” in einer anderen Größe als die Zahl wiederzugeben.
Das Template muss um einige Funktionen erweitert werden, an die der “komplette Preis” - so wie er normalerweise ausgegeben werden würde - aus $this->_tpl_vars übergeben und entsprechend aufbereitet werden kann.
Mit dem Funktions-Set “gunnartPricing();” sind dann Wünsche à la “Von Sonderangeboten die Überschriften bitte rot” oder “Der reduzierte Preis soll direkt in der Überschrift stehen” bis hin zu “Prozente Anzeigen” kein Problem mehr.
Eine ausführliche Beschreibung wie das Ganze programmiert ist, finden Sie in diesem Beitrag. Dort geht’s um Beispiele für die Realisierung “Template spezifischer” Sonder-Funktionen.
Die Benutzung ist aus jeder Template-Datei möglich. Die Funktion muss mit dem “gefüttert werden”, was xt:Commerce als “PRICE” ausgibt - und danach ist man recht flexibel:
1) Layout-Funktion:
“gunnartPricing();” extrahiert aus dem eingegebenen Preis den “Normal-Preis” und - sofern vorliegend - den “Sonderpreis”. So kann man speziellere Layouts realisieren, falls man beispielsweise den Angebotspreis mit in der Artikel-Überschrift haben möchte oder Ähnliches.
2) Berechnung von Preisnachlässen:
Bei Sonderpreisen oder anderen Preisnachlässen wird der Preisvorteil gegenüber dem normalen Artikelpreis berechnet:
3) Aus- oder Rückgabe:
Es ist möglich, die Ergebnisse in PHP zurückgeben zu lassen, wenn man mal keine HTML-Ausgabe braucht, beispielsweise weil man die Werte in irgendeiner Weise “weiterverarbeiten” möchte.
1) Eingabewert = Artikelpreis
Praktischerweise füllt man zunächst eine Variable mit dem “kompletten”, von xt:Commerce generierten Preis. Dazu braucht man in den Template-Dateien ein bisschen PHP. Die Anweisung sieht in der “product_info_v1.html” beispielsweise folgendermaßen aus:
{php}$PREIS = $this->_tpl_vars['PRODUCTS_PRICE'];{/php}
bzw. in der “box_best_sellers.html” entsprechend so:
{php}$PREIS = $this->_tpl_vars['box_data']['PRICE'];{/php}
Die nötigen Array-Keys passen also immer zu den jeweils benutzten Smarty-Tags in der jeweiligen Template-Datei. Danach kann man mit gunnartPricing($PREIS) plus den im nächsten Punkt beschriebenen Parametern weiterarbeiten.
2) Parameter
Die Funktion “gunnartPricing();” arbeitet mit dem weitergegebenen Preis und drei zusätzlichen Parametern. Dabei wird ein Muster gunnartPricing($Input,$Which,$How,$Echo); vorausgesetzt. Die Parameter im Einzelnen:
a) $Input
Hier den jeweiligen Artikelpreis übergeben, der von xt:Commerce ausgegeben werden würde. Der Wert ist über den jeweils passenden Key von $this->_tpl_vars zu erreichen.
b) $Which
Hier eintragen, was ausgegeben bzw. zurückgegeben werden soll. Mögliche Werte:
3) $How
Hier wird festgelegt, wie oder ob das Ergebnis “formatiert” sein soll.
d) $Echo
Ausgabe oder Rückgabe: Es wird grundsätzlich davon ausgegangen, dass eine HTML-Ausgabe erwünscht ist. Nur bei Angabe von ‘false’ findet keine Ausgabe statt, ansonsten kann der Parameter auch leer gelassen werden.
3) Code-Beispiele
gunnartPricing($PREIS,'OldPrice');
gunnartPricing($PREIS,'SavedP','WERT','false');
gunnartPricing($PREIS);
1) Anzeige eines “Störers” mit Preisnachlass
Angenommen, in der Produkt-Info soll eine Box auftauchen, in der bei einem Sonderpreis die Ersparnis in Prozent und als Differenz gezeigt wird. Folgender Code wäre einzutragen:
{php}
$PREIS = $this->_tpl_vars['PRODUCTS_PRICE'];
if (gunnartPricing($PREIS)) {
{/php}
<div class="SparBox">
<h4>Angebot</h4>
<p>Sie sparen: <strong>{php}gunnartPricing($PREIS,'SavedP');{/php}</strong></p>
<p>Das sind: <strong>{php}gunnartPricing($PREIS,'SavedM');{/php}</strong></p>
</div>
{php} } {/php}
2) Kennzeichnung aller Preise unterhalb von xx,- €
Angenommen, es soll ein dicker Hinweispfeil neben besonders günstige Angebote gesetzt werden. Dazu könnte man beispielsweise einen Schwellenwert für “besonders günstig” bestimmen … sagen wir mal “Alles unter 10 Euro” bekommt einen spezielles Bildchen:
{php} if (gunnartPricing($PREIS,'NewPrice','WERT','false')) < 10) { {/php}
<img src="{$tpl_path}images/besondersGuenstig_Pfeil.gif" alt="Zum Taschengeld-Preis!" />
{php} } {php}
1) Es funktioniert einfach nicht?
Diese Erweiterung rechnet nicht mit Werten, die aus der Datenbank geholt werden, sondern nimmt die HTML-Ausgabe der Preise als Grundlage. Dabei wird mit regulären Ausdrücken nach den passenden Zahlen gesucht.
Falls Sie die Preis-Ausgabe Ihres Shops umgeändert haben, kann es passieren, dass mit falschen Zahlen gerechnet wird. Dann wären Funktionen “get_productNewPrice($Input);” sowie “get_productOldPrice($Input)” Ihren Anforderungen entsprechend umzuändern.
2) Andere Ausgabe gewünscht?
Die “gesparten Prozente” werden so ausgegeben, wie es die Währungs-Einstellung in Ihrem Shop vorgibt. In den meisten Fällen wird also auf zwei Nachkommastellen gerundet.
Sollten Sie eine andere Anzeige benötigen, finden Sie die Formatierungs-Anweisungen in der Funktion “get_savedPercent($OldPrice,$NewPrice)” - Dort müssten dann die Parameter bei “number_format” angepasst werden.
3) Fehler gefunden?
Grundsätzlich ist das Thema “Preis-Ausgabe” in Shop-Systemen nie ganz unkompliziert - und es gibt bei xt:Commerce viele verschiedene Arten, Preisnachlässe anzuwenden und abzubilden. Da hierbei etliche Faktoren miteinander zusammenspielen und sich einige Angaben bzw. Voreinstellungen, Rabattsysteme etc. einander ausschließen können, kann’s gut sein, dass ich einige Eventualitäten und Kombinationen noch nicht bedacht oder bemerkt habe.
Daher bitte ich um Benachrichtung, wenn Sie Fehler gefunden haben oder wenn Sie “Spezialfälle” wissen, unter denen falsche Werte ausgegeben werden … Gerne auch als Kommentar zu diesem Beitrag.
4) Zu Ihrer Sicherheit
Ein BackUp Ihres Systems vorm “Ausprobieren” scheint mit übertrieben. Denn es werden weder System-Dateien umgeändert noch die Inhalte Ihrer Datenbank bearbeitet.
Bitte probieren Sie die Funktionen dennoch zunächst mit einem Test-Shop aus, bevor in Ihrem öffentlich zugänglichen Live-System eventuell falsche Angaben gezeigt werden!
5) Kompatibilität
Das hier angebotene Funktions-Set ist bis jetzt nur mit xt:Commerce Version 3.04 SP 2.1 getestet, müsste allerdings auch mit anderen Versionen korrekt laufen, da (wie gesagt) nicht mit System-Funktionen sondern mit der HTML-Ausgabe gearbeitet wird.
6) Sonstiges
In einem früheren Beitrag habe ich eine andere Möglichkeit beschrieben, wie man Prozentwerte von Preisnachlässen ausgeben kann.
Die dort vorgestellte Methode hat den Vorteil, dass diese Berechnungen dann automatisch bei jedem angezeigten Preis ausgegeben werden, ohne dass jede Template-Datei geändert werden muss. Nachteilig ist allerdings, dass damit a) eine System-Datei verändert wird und dass b) weiterhin der komplette Preis “in einem Rutsch” ausgegeben wird.
Screenshot von Muscle24.de
Ein Beispiel für den Einsatz dieses Funktions-Set ist im Shop » Muscle24.de zu sehen - Einfach ein bisschen stöbern (die Sonderangebote sind dort nicht “zentral gesammelt”) - bei herabgesetzten Produkten wird die Ersparnis in Prozent berechnet und in einem “Störer” angezeigt.
Bookmarks, Feed und Links
Wenn Ihnen dieser Beitrag geholfen hat ...
Beiträge zu ähnlichen Themen:
46 Antworten zu “gunnartPricing” - Aufbereiten der Preise in xt:Commerce-Templates
Kommentar schreiben