View previous topic :: View next topic |
Author |
Message |
timo_ipark Smarty Rookie
Joined: 24 Apr 2004 Posts: 8
|
Posted: Fri Nov 05, 2004 9:28 am Post subject: Templateinhalt aus Variable verwenden |
|
|
Hallo,
wie besteht in Smarty die Möglichkeit, keine Datei als Templatequelle zu verwenden sondern den Inhalt einer ganz normalen Variablen? Ich möchte also den Inhalt des Templates nicht aus einer Datenbank holen, sondern die Variable existiert bereits. Muss ich dann trotzdem den Weg über register_resource und die vier registrierten Funktionen gehen?
Würde das dann in etwa so aussehen:
Code: | function smarty_resource_var_source($template_var, &$tpl_source, &$smarty)
{
$tpl_source = $template_var
return true;
}
function smarty_resource_var_timestamp($template_var, &$tpl_timestamp, &$smarty)
{
$tpl_timestamp = ???;
return true;
}
function smarty_resource_var_secure($tpl_name, &$smarty)
{
// assume all templates are secure
return true;
}
function smarty_resource_var_trusted($tpl_name, &$smarty)
{
// not used for templates
} |
Für Hilfe wäre ich sehr dankbar!!!
MfG
Timo
Last edited by timo_ipark on Fri Nov 05, 2004 10:05 am; edited 1 time in total |
|
Back to top |
|
kills Smarty Elite
Joined: 28 May 2004 Posts: 493
|
Posted: Fri Nov 05, 2004 9:40 am Post subject: |
|
|
wie ist das Template in die Variable gekommen?
Vielleicht könntest du ja schon vorher ansetzten |
|
Back to top |
|
timo_ipark Smarty Rookie
Joined: 24 Apr 2004 Posts: 8
|
Posted: Fri Nov 05, 2004 10:07 am Post subject: |
|
|
Den Inhalt des Templates hole ich zuvor aus der Datenbank. Da hier eine recht verschachtelte Objektstruktur verwendet wird, wäre es mir lieber, wenn Smarty den Inhalt einer Variablen irgendwie rendern könnte... |
|
Back to top |
|
kills Smarty Elite
Joined: 28 May 2004 Posts: 493
|
Posted: Fri Nov 05, 2004 10:17 am Post subject: |
|
|
timo_ipark wrote: | Den Inhalt des Templates hole ich zuvor aus der Datenbank. Da hier eine recht verschachtelte Objektstruktur verwendet wird, wäre es mir lieber, wenn Smarty den Inhalt einer Variablen irgendwie rendern könnte... |
wenn du das template aus der Datenbank per fetch() holst, wird es sofort gerendert:
http://smarty.php.net/manual/en/api.fetch.php |
|
Back to top |
|
timo_ipark Smarty Rookie
Joined: 24 Apr 2004 Posts: 8
|
Posted: Fri Nov 05, 2004 10:48 am Post subject: |
|
|
Sorry - hab ich mich wohl mißverständlich ausgedrückt. Ich wende fetch erst ganz am Ende an.
Ich habe quasi eine Variable $template = '<table><tr><td>{$firstname}</td></tr></table>' und möchte diese von Smarty rendern lassen. Als nächste Schritte würde also $smarty->assign('firstname', 'Vorname') kommen, um dann über $content = $smarty->fetch($template) die Ausgabe zu erreichen.
So hab ich mir das gedacht - leider funktioniert es so nicht |
|
Back to top |
|
kills Smarty Elite
Joined: 28 May 2004 Posts: 493
|
Posted: Fri Nov 05, 2004 11:12 am Post subject: |
|
|
timo_ipark wrote: | Sorry - hab ich mich wohl mißverständlich ausgedrückt. Ich wende fetch erst ganz am Ende an.
Ich habe quasi eine Variable $template = '<table><tr><td>{$firstname}</td></tr></table>' und möchte diese von Smarty rendern lassen. Als nächste Schritte würde also $smarty->assign('firstname', 'Vorname') kommen, um dann über $content = $smarty->fetch($template) die Ausgabe zu erreichen.
So hab ich mir das gedacht - leider funktioniert es so nicht |
und worin besteht der sinn? Warum vorher nochma bzw. 2ma rendern?
Du kannst doch einfach die varible per assign zuweisen und dann per fetch wird die Varible im Template ersetzt.... |
|
Back to top |
|
timo_ipark Smarty Rookie
Joined: 24 Apr 2004 Posts: 8
|
Posted: Fri Nov 05, 2004 1:02 pm Post subject: |
|
|
kills wrote: |
und worin besteht der sinn? Warum vorher nochma bzw. 2ma rendern?
Du kannst doch einfach die varible per assign zuweisen und dann per fetch wird die Varible im Template ersetzt.... |
Der Sinn besteht darin, dass ich eine Art Serien-Html-Email versenden möchte und in der Datenbank das HTML-Template mit einiger Platzhaltern steht. Diese Platzhalter (z.B. Vorname und Nachname) möchte ich dann beim Versendungsprozess mit Werten füllen.
Die von Dir beschriebene zweite Variante wäre ein Weg: Ich erstelle ein Template, weise dem Template den kompletten Email-Inhalt zu und ersetzte dann die Platzhalter in diesem Template. Allerdings setzt dies Eval voraus, und ich hab hier im Forum gelesen das dies nicht die schönste Art ist |
|
Back to top |
|
kills Smarty Elite
Joined: 28 May 2004 Posts: 493
|
Posted: Fri Nov 05, 2004 1:10 pm Post subject: |
|
|
ich bin der meinung dass das so gehen müsse:
Pseudocode!
[php:1:cf80c00e83]
// init smarty
// Globale Variablen zuweisen
$subject = "YOU";
$sql = "SELECT.....";
$res = mysql_query( $sql);
while( $row = mysql_fetch_assoc( $res)) {
// Empfängerspezifische Variablen
$smarty->assign( 'firstname', $row['firstname']):
$smarty->assign( 'lastname', $row['lastname']):
mail( $row['email'], $smarty->fetch( "db:mail.tpl"), $subject);
}
[/php:1:cf80c00e83] |
|
Back to top |
|
timo_ipark Smarty Rookie
Joined: 24 Apr 2004 Posts: 8
|
Posted: Fri Nov 05, 2004 2:46 pm Post subject: |
|
|
Sorry, aber ich glaub ich raff noch nicht so ganz wie du das meinst...
Was ist denn bei dir das db:mail.tpl? Ein Template aus einer Datenbank nehme ich an? Und dieses Template enthält die beiden Platzhalter $firstname und $lastname?
Dann stehe ich doch wieder vor dem Problem, dass bei mir das Template nicht aus der DB sondern aus einer Variablen kommt??? Sorry - aber ich verstehe deinen ganzen Ansatz leider nicht... |
|
Back to top |
|
kills Smarty Elite
Joined: 28 May 2004 Posts: 493
|
Posted: Fri Nov 05, 2004 3:10 pm Post subject: |
|
|
timo_ipark wrote: | Sorry, aber ich glaub ich raff noch nicht so ganz wie du das meinst...
Was ist denn bei dir das db:mail.tpl? Ein Template aus einer Datenbank nehme ich an? Und dieses Template enthält die beiden Platzhalter $firstname und $lastname?
Dann stehe ich doch wieder vor dem Problem, dass bei mir das Template nicht aus der DB sondern aus einer Variablen kommt??? Sorry - aber ich verstehe deinen ganzen Ansatz leider nicht... |
baust du dein Template während der laufzeit dynamisch zusammen oder warum hast du das in einer Variable drinne.
Falls du es dynisch zusammenbaust, dann würde das nicht dem sinn und zweck von smarty entsprechen... |
|
Back to top |
|
messju Administrator
Joined: 16 Apr 2003 Posts: 3336 Location: Oldenburg, Germany
|
Posted: Fri Nov 05, 2004 5:50 pm Post subject: |
|
|
@timo_ipark:
wenn du das template aus eine variablen holst, dann macht du effektiv das, was eval macht. das willst du aber laut eigener aussage nicht (s.o.)
die einzige alternative die ich kenne sind resourcen. das würde bedeuten dein template kommt aus einer abstrakten quelle (*z. B.* einer Datenbank). aber das willst du anscheinend auch nicht.
du musst dich mit einer der beiden oberen möglichkeiten anfreunden oder von smarty als werkzeug zur lösung deines problem absehen. |
|
Back to top |
|
messju Administrator
Joined: 16 Apr 2003 Posts: 3336 Location: Oldenburg, Germany
|
Posted: Sun Nov 07, 2004 3:19 pm Post subject: |
|
|
@timo_ipark
noch eine variante währe ein tempfile zu verwenden.
wenn du sagst es handelt sich um einen serienbrief, dann klingt das für mich so, als würde das template sehr selten gebraucht (alle 1-2 wochen oder 1 mal im monat oder so).
dann aber ganz oft hintereinander (1 mal pro mail-empfänger) und dann wieder ein paar wochen lang nicht.
ich würd den variableninhalt in ein tempfile schreiben (filenames gibts én gros von tempnam()).
dann ganz oft $smarty->fetch('file:' . $tempfile) aufrufen.
und danach mit $smarty->clear_compiled_tpl('file:' . $tempfile) brav wieder aufräumen. |
|
Back to top |
|
|