Diesmal ein Blick hinter die Kulissen unseres Onlineshops und den Problemen mit denen wir hin und wieder konfrontiert sind.
Shopware bietet die Anzeige zur Darstellung eines ehemaligen Verkaufspreises und stellt bei einem günstigen Endpreises eine Ersparniss als Prozente oder absolute Zahl dar.
Leider wurde vergessen hier eine Plausibilitätsprüfung zu integrieren, so dass es vorkommen kann, dass ein Streichpreis angezeigt wird der niedriger ist als der Endpreis, wenn durch Preisanpassungen eben der reguläre Verkaufspreis erhöht wurde.
Das führt natürlich einerseits zu Verwirrungen bei den Kunden und endet letztendlich in vermehrten Anfragen warum das so ist.
Nun wird der ehemalige Verkaufspreis je nach Template an unterschiedlichen Stellen genutzt. Ganz klar auf der Artikelseite (z.B. detail/data) selbst, aber auch in den Suchergebnissen, Einkaufwelten oder Kategorieansichten (z.B. listing/box_article).
Bei allen sieht die eigentliche Ausgabe des ehemaligen Verkaufspreis im Grunde so aus:
1 2 3 | {if $sArticle.pseudoprice} {$sArticle.pseudoprice|currency} {/if} |
Es gibt also nur eine Prüfung ob der Wert überhaupt gesetzt bzw. vorhanden ist, jedoch nicht ob dieser größer ist als der aktuelle Verkaufspreis. Er würde also auch angezeigt werden, wenn der aktuelle Preis höher ist.
Mit folgender Prüfung wird der ehemalige Verkaufspreis nur dann ausgegeben, wenn dieser auch wirklich größer ist, als der aktuelle Preis.
1 2 3 | {if $sArticle.pseudoprice|replace:",":"" > $sArticle.price|replace:",":""} {$sArticle.pseudoprice|currency} {/if} |
Da die Preise in Shopware mit Komma als Dezimaltrennzeichen gespeichert werden, ist ein Vergleich der Preise erst nach entfernen des Kommas durch den Modifikator replace korrekt möglich, da sonst in der Smarty-Logik Zeichenketten statt Zahlen verglichen werden. So wird dann aus einem 12,99 eben ein 1299 und wäre damit größer als 9,99 bzw 999.
Je nach Template wird die Ersparnis auch als Prozentzahl angegeben. Da die Zuvor erwähnte Prüfung nun zwar den ehemaligen Preis nicht anzeigt, muss auch hier noch etwas geändert werden.
Folgende Zeile sorgt für eine Ausgabe des Prozentwerts und des %-Zeichens:
1 | {$sArticle.pseudopricePercent.float} % {se name="DetailDataInfoSavePercent"}{/se} |
Ist der ehemalige Verkaufspreis kleiner als der aktuelle Preis, wird zwar kein Zahlenwert angezeigt, aber immer noch das Prozent-Zeichen.
Wie schon oben gezeigt, entgegnet man dem einfach mit zwei zusätzlichen Zeilen.
1 2 3 | {if $sArticle.pseudoprice|replace:",":"" > $sArticle.price|replace:",":""} {$sArticle.pseudopricePercent.float} % {se name="DetailDataInfoSavePercent"}{/se} {/if} |
Sicherlich gibt es noch andere Lösungen, um dem Problem bei zu kommen, in unserem Fall, sind die oben aufgeführten Möglichkeiten die einfachsten.
Schöner Artikel, aber Aussage zu Shopware stimmt nicht ganz.
Eine Prüfung gibt es. Ggf. nutzt ihr eine alte Version oder individuelles Template, welches das nicht unterstützt.
Also standardmäßig gibt es da kein Problem.
Ich hatte vorher natürlich dazu etwas recherchiert und fand ähnliche Probleme, daher schloss ich darauf, dass es zumindest früher bereits bestand.
Ich hatte mir auch das mitgelieferte Template von 4.1.4 mal angesehen und konnte es da auch nicht finden.
Ist natürlich löblich, wenn Shopware das irgendwann gefixt hat.