Smarty-Äquivalent zur PHP-Funktion "explode"? Zeichenkette trennen

Hallo Gemeinde,

ich habe eben versucht einen String mit Hilfe von Smarty zu teilen. In PHP wäre das recht einfach, da es da die Funktion “explode” gibt. Leider habe ich keinen Ersatz in Smarty gefunden… vielleicht kenn mir einer von Euch helfen?

Mein Problem:

In Adminbereicht, in dem Reiter “Übersicht” einer Bestellung werden die bestellten Produkte angezeigt. Ein Teil meiner Produkte wird mit einer Reihe von Optionen definiert (zB. Größe, Farbe, Kragenweite, Ärmelart). Leider werden die Optionen in der Datenbank alle in einem String in die Datenbank geschrieben und so auch ausgelesen. Werden die Optionen ausgewählt, sprengt es den Rahmen der Übersicht der Bestellung im Adminbereich.
Ich möchte aber, dass die Funktionen nach dem folgenden Schema angezeigt werden:

Option: Wert<br>

Also pro Zeile eine Option.

Für die Zwischenzeit habe ich es mit der Smarty-Funktion “wordwrap” geschafft. Das Ergebnis sieht so aus:

Also die standardmäßige 1 Zeile ist hier ca. alle 40 Zeichen getrennt. Es ist aber keine elegante Lösung. Das gleiche Problem gibt es auch in den Packlisten. Mich würde also eine globale Lösung interessieren.

Ich habe keine Smarty-Funktion gefunden, die anhand eines bestimmten Zeichens einen Umbruch erzwingt.

Kann hier einer helfen?:confused:

Nun, dann mach es doch mit PHP…

Ungetestet:

[{php}]
$sItems=explode(', ',$this->_tpl_vars['selList']);
$this->_tpl_vars['selList']=implode('<br>',$sItems);
[{/php}]

Dabei bin ich davon ausgegangen, dass dieser Text als “$selList” in dem Template verwendet wird, musst Du anpassen…

Der “politisch korrekte” Weg wäre sicher, einen Smarty-Modifier dafür zu schreiben…

Gibts hierzu schon einen Smarty-Modifier?

Möchte meinen getBaseSeoLink aufteilen

[{assign var=’_productLink’ value=$product->getBaseSeoLink(0)}]

Edit: hat sich erledigt, danke

Jede PHP Funktion lässt sich als modifier über eine pipe nehmen:

[{assign var="myString" value="1,2,3"}]
[{assign var="myArray" value=","|explode:$myString}]
[{$myArray|@print_r}]

Man muss nur auf die Reihenfolge der Argumente bei explode aufpassen, denn das was vor der pipe steht ist immer das erste argument - in dem Fall der delimiter.