Smarty immer String eines var mit strpos als Start- und strlen als Ende
Frage
Ich habe Problem Formatierung Variablen in Smarty. Ich frage mich, was der beste Weg ist, es zu tun. Im Grunde habe ich eine Schnur? „ABC | DEFGH“ ich will Smarty den Teil von „DEFGH“ zu bekommen Wie würde ich über das tut dies gehe
{$var|substr:strpos:"|":strlen}
funktioniert nicht
Lösung
gelöst Gerade dies ohne var zurück in PHP Einstellung, und durch die eingebaute Funktion Wrapper verwendet.
Unter der Annahme, dass: $ var = "ABC | DEFGH";
{assign var="bar_at" value=$var|strpos:"|"}
<li>{$var}</li>
<li>{$var|substr:0:$bar_at}</li>
<li>{$var|substr:$bar_at+1}</li>
Dies wird gedruckt:
Andere Tipps
Einige Informationen über Smarty 3 im Fall, wenn jemand will das gleiche in Smarty 3 zu erreichen und nicht in Smarty 2:
Die erste Sache ist, dass Sie benötigen Klammern hinzuzufügen, es Arbeit zu machen. substr:$bar_at+1
wird nicht funktionieren, aber substr:($bar_at+1)
funktionieren wird.
Aber in der Tat kann man einfachere Syntax verwenden:
{assign var="var" value="ABC | DEFGH"}
{$var|substr:($var|strpos:"|"+1)}
Dies wird Ihnen mit Leerzeichen am Anfang DEFGH
(vor und |
sind Räume innerhalb var in Frage und in meinem Beispiel) und wie Sie Zeichenkette ohne Leerzeichen erhalten möchten, sollten Sie in diesem Fall +2
anstelle von +1
:
{$var|substr:($var|strpos:"|"+2)}
oben Diese wurden in Smarty 3.1.19
getestet.
Sie sollten auch wissen, dass in früheren Versionen (vor Smarty 3.1), wenn Sie in der Zeichenfolge UTF-8-Zeichen haben, sollten Sie eher mb_
Funktionen verwenden.
Wie von Smarty 3.1 im Fall, wenn mbstring
Erweiterung installiert ist Smarty verwendet automatisch mb_
Funktionen in diesem Fall so wird es kein Problem mit utf-8 Zeichen lang sein.
Sie können mehr über Smarty utf-8-Codierung
Diese Funktionen sind nicht in Smarty. Sie werden es in PHP teilen, bevor es auf die Vorlage zu senden. Oder Sie könnten Ihre eigene Split-Funktion Smarty Plugin schreiben. Oder nutzen Sie {php} Tags in der Vorlage, aber ich würde diese Lösung vermeiden, da sie gegen den ‚Geist‘ ist und Zweck der Smarty verwenden, Trennung von Darstellung und Logik, etc etc.
Wenn wie Jimby mit:
{$var|substr:$bar_at+1}
ich hinzufügen, Klammern oder runde Klammer es funktioniert.
{$var|substr:($bar_at+1)}