Config-Variable {#var#} in Smarty Expression verwenden

Zahnräder

Nachdem mich diese kleine Aufgabe eine ganze Weile beschäftigt hat, hier die Lösung wie man eine Smarty Config-Variable innerhalb einer Smarty Expression verwenden kann.

Beispiel für die Anwendung

Für dieses Beispiel gehe ich davon aus, dass die Smarty Config-Variable {#foo#} den Wert „Linktext“ hat und bereits im Smarty Template geladen ist. Nun gibt es in meinem Template einen regulären Ausdruck, der den Inhalt des Links $LINK modifiziert. Unter anderem soll als Text dieses Links der Wert der Variable {#foo#} verwendet werden. Fügt man nun die Config-Variable über Ihren Bezeichner ein, wird einfach der Textstring „#foo#“ ausgegeben – nicht das erwünschte Ergebnis

1. Ansatz

{$LINK|regex_replace:'/<a[^>]*href="([^"]*)"[^>]*>.*<\/a>/':'<a href="$1">#foo#</a>'}

Nun ist wichtig zu wissen, dass man auf Config-Variablen mittels $smarty.config.foo ebenfalls zugreifen kann.

2. Ansatz

Als Entwickler denkt man nun natürlich sofort an eine bequeme Lösung mittels String-Konkatenation. Leider schiebt Smarty einer üblichen Konkatenation mittels Operationszeichen einen Riegel vor uns so funktioniert auch folgenden Beispiel nicht:

{$LINK|regex_replace:'/<a[^>]*href="([^"]*)"[^>]*>.*<\/a>/':'<a href="$1">'.$smarty.config.foo.'</a>'}

3. Ansatz – Die Lösung

Um auf den Punkt zu kommen: Smarty bietet mit dem Modifier „cat“ die Möglichkeit Strings zu verbinden. Binden wir die Variable #foo# mittels „cat“ ein, erhalten wir das gewünschte Ergebnis:

{$LINK|regex_replace:'/<a[^>]*href="([^"]*)"[^>]*>.*<\/a>/':'<a href="$1">'|cat:$smarty.config.foo|cat:'</a>'}

Ich hoffe dieser kleine Hint spart dem ein oder anderen Kollegen etwas Zeit.

Kommentar verfassen

Folge mir auf Twitter

Hol Dir kostenlos Tipps und Tricks zu Shopware, E-Commerce und andere Open-Source Produkte.

Folge @synonymousrocks