Smarty : Parameter an JavaScript-Funktion übergeben
17. Januar 2009 | 15:24:59
In meinen Konfigurationsdateien verwende ich hin und wieder auch mal Variablen, deren Werte (Texte) sich über mehrere Zeilen erstrecken. Solche mehrzeiligen Texte werden in der Config-Datei mittels """ am Anfang sowie am Ende markiert z.B.:
Das funktioniert auch soweit ganz gut, wenn man die Variable bzw. deren Text im Template selbst ausgibt (z.B. <div>text1 = {#text1#}</div>).
Ich hatte aber gerade das Problem, dass ich eine solche Variable als Parameter an eine JavaScript-Funktion übergeben wollte, etwa nach folgendem Prinzip:
Dieser Ansatz funktionierte jedoch nicht. Ich probierte noch verschiedene Sachen mit den Anführungszeichen, aber es half alles nichts.
Dann dachte ich mir: "Was wird wohl passieren, wenn man die Zeilenumbruchzeichen (unter Linux '\n') aus dem Text der Variable entfernt?" Also dann mal das Zeugs entfernt und das Ergebnis einer neuen Variablen zugewiesen:
Nun die Variable desc als Parameter übergeben:
Und siehe da, es funzte ganz wunderbar :-)
Noch ein kleiner Tipp! Wenn man den mehrzeiligen Text nicht nur - wie gezeigt - in die drei doppelten Anführungszeichen (""") hüllt, sondern gleich auch noch die einfachen Anführungszeichen (') angibt, dann spart man sich dies bei der Parameterübergabe:
# Konfigurationsdatei (mittels config_load einbinden)
# globale Variable (mehrzeilig)
text1 = """Sed ut perspiciatis, unde omnis iste natus error sit
voluptatem accusantium doloremque laudantium, totam rem
aperiam eaque ipsa, quae ab illo inventore veritatis et
quasi architecto beatae vitae dicta sunt"""
...
Ich hatte aber gerade das Problem, dass ich eine solche Variable als Parameter an eine JavaScript-Funktion übergeben wollte, etwa nach folgendem Prinzip:
...onclick="show('{#text1#}');"Dann dachte ich mir: "Was wird wohl passieren, wenn man die Zeilenumbruchzeichen (unter Linux '\n') aus dem Text der Variable entfernt?" Also dann mal das Zeugs entfernt und das Ergebnis einer neuen Variablen zugewiesen:
{assign var=neuText1 value=#text1#|replace:"\n":""}...onclick="show('{#neuText1#}');"Noch ein kleiner Tipp! Wenn man den mehrzeiligen Text nicht nur - wie gezeigt - in die drei doppelten Anführungszeichen (""") hüllt, sondern gleich auch noch die einfachen Anführungszeichen (') angibt, dann spart man sich dies bei der Parameterübergabe:
# globale Variable (mehrzeilig mit """')
text1 = """'Sed ut perspiciatis, unde omnis iste natus error sit
voluptatem accusantium doloremque laudantium, totam rem
aperiam eaque ipsa, quae ab illo inventore veritatis et
quasi architecto beatae vitae dicta sunt'"""
...
{* unter die Parameterübergabe ohne Anführungszeichen im Template *}
<div onclick="show({#neuText1#});">...</div>

