Wer Preisangaben in einem xt:Commerce oder xtcModified formatieren will, stößt zwangsläufig auf Hürden. Sonderpreise sind nur ein Beispiel für die nicht konsequente Nutzung der Smarty Template Engine in diesen Shopsystemen. Anwendungslogik und Markup werden nicht klar getrennt, was unschöne Eingriffe wie diesen hier zur Folge hat.

Sonderpreise formatieren

In der Standardinstallation wird bei xtcModified folgende Formatierung in den Produktlisten und Spezialseiten wie Sonderangeboten verwendet:

Statt xyz EUR
Nur xyz EUR
Sie sparen abc % / xyz EUR inkl. MwSt. und Versand

Drei Zeilen werden für den Preis verbraucht, darüber hinaus werden Informationen zu Steuerklasse und Versand in der „Sie sparen“ Zeile angehangen. Zusätzlich wird hier viel mit small und del Tags gearbeitet. Alles überaus unschön.

Wer dies nun bereinigen will, muss außerhalb des Templates suchen. Die Datei includes/classes/xtcPrice.php gilt es abzuändern. Folgende Codezeile innerhalb der Funktion xtcFormatSpecial erstellt obige Preisangaben auf Produktdetailseiten und der Spezialseite „Sonderangebote“:

$price = '<span class="productOldPrice"><small>'.INSTEAD.'</small><del>'.$this->xtcFormat($pPrice, $format).'</del></span><br />'.ONLY.$this->checkAttributes($pID).$this->xtcFormat($sPrice, $format).'<br /><small>'.YOU_SAVE.round($discount).' % /'.$this->xtcFormat($pPrice-$sPrice, $format).'</small>';

Um die Sonderpreise mit allen Informationen in zwei Zeilen unterzubringen und die small Tags aus der Ausgabe zu entfernen, kann folgender Code verwendet werden:

$price = '<span class="productOldPrice">'.INSTEAD.'<del>'.$this->xtcFormat($pPrice, $format).'</del>&nbsp;'.YOU_SAVE.round($discount).' % /'.$this->xtcFormat($pPrice-$sPrice, $format).'</span><br />'.ONLY.$this->checkAttributes($pID).$this->xtcFormat($sPrice, $format);

Zu beachten ist, dass mehrerer Funktionen in der xtcPrice.php Sonderpreis – Markup erstellen. Es wird also üblicherweise nicht bei einer Ersetzung bleiben. Hier einfach nach dem Codefragment class="productOldPrice" suchen und entsprechende Änderungen vornehmen.

Alternativen

Im Forum zu xtcModified werden einige Alternativen zu diesem Vorgehen genannt. Sicher ist es sauberer, die Sonderpreisangaben gänzlich aus den Preisfunktionen auszulagern. Eines bleibt jedoch: die Updatefähigkeit wird aufgrund neu entstehender Funktionen in der xtcPrice.php so oder so stark eingeschränkt.

Im verlinkten Thread wird auch auf gunnartPricing – einer Pluginlösung für xt:Commerce – hingewiesen. Diese habe ich nicht getestet, soll aber der Vollständigkeit halber hier genannt werden.

Eine Antwort schreiben