#1 10. Juni 2013 Zuletzt bearbeitet: 10. Juni 2013 smarty function in template variable ausführen hallo zusammen, ist es möglich in smarty ein funktionsaufruf in einer template variable auszuführen? was ich möchte: ich hab in einer DB einen kontenttext der z.b. so aussieht. Code: <h1>Home</h1> <p>{snippet name="back"}</p> die template variable sieht in etwas so aus: PHP: $smarty -> assign ( 'content' , $dbContentText ); {snippet name="back"} ist ein eigenes smarty plugin, dass mir aus der DB die übersetzung von "back" zurückgibt. index.tpl PHP: { $content } < p >{ snippet name = "back" }</ p > gefetched HTML: <!-- dbContentText --> Home {snippet name="back"} <!-- snippet in tpl eingebunden --> zurück ich will das der string aus der DB diese funktion auch ausführt wenn smarty->fetch durchgeführt wird. // edit hab durch eine weiter function das problem behoben. function compile: PHP: function smarty_function_compile ( $params , $smarty ) { if (!isset( $params [ 'var' ]) || $params [ 'var' ] == '' ) { return; } return $smarty -> fetch ( 'string:' . $params [ 'var' ]); } aufruf PHP: { compile var= $content } rückgabe HTML: Home zurück läuft wie gewollt. jetzt zum eigentlich spass. damit wäre ich nun in der lage x beliebige functionen zu erstellen, wie z.B. ein youtube film einbinden. grob: PHP: // *.php $var = '{youtube src="5xLfvY8upsQ" width="420" height="315"}' ; $smarty -> assign ( 'content' , $var ); ... // *.tpl { compile var= $content } damit spar ich mir nun in der kontent-pflege das eigentliche einbinden des youtube codes. + Multi-Zitat Zitieren
#2 10. Juni 2013 AW: smarty function in template variable ausführen Und das Problem dabei ist das selbe wie bei der Verwendung von eval. - Kein Cache (lahm) - Je nach dem wie unvorsichtig du bist kann auch anderer Code eingeschleust werden + Multi-Zitat Zitieren
#3 10. Juni 2013 AW: smarty function in template variable ausführen ne, das cachen funktioniert weiterhin bei mir. die eigentliche plugin-function verarbeitet die übergabe. ist die plugin-funktion nicht vorhanden schmeißt smarty einen fehler, oder die plugin-funktion selbst kann z.b. einen leeren string zurück geben, wenn irgendetwas nicht stimmt. hängt halt davon ab wie gewissenhaft man die erstellt. ein eval wird dabei nicht verwendet. + Multi-Zitat Zitieren
#4 12. Juni 2013 AW: smarty function in template variable ausführen Du übersetzt zur Laufzeit innerhalb eines Templates ein weiteres Template. D.h.: Die *.tpl Datei wird einmalig übersetzt und dann im Cache abgelegt, doch die Funktion darin (bzw. $smarty->fetch(...)) wird immer wieder neu übersetzt und anschließend verworfen. Das entspricht dem Verhalten von eval() + Multi-Zitat Zitieren
#5 13. Juni 2013 Zuletzt bearbeitet: 13. Juni 2013 AW: smarty function in template variable ausführen ich lass doch nur eine template variable neu kompilieren, nicht das ganze konstrukt. eine art eval ist es schon, jedoch nicht so gefährlich. wenn in meinen string eine plugin-function nicht vorhanden ist, wir auch nix gemacht. hast du ggf. einen anderen vorschlag, wie man das umsetzen könnte? wie gesagt ich möchte in meinem content die möglichkeit haben, weiter smarty-platzhalter zu verwenden die kompiliert werden sollen. ps: colle darth vader animation. + Multi-Zitat Zitieren