Smarty Forum Index Smarty
WARNING: All discussion is moving to https://reddit.com/r/smarty, please go there! This forum will be closing soon.

Templateinhalt aus Variable verwenden

 
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    Smarty Forum Index -> Language: German
View previous topic :: View next topic  
Author Message
timo_ipark
Smarty Rookie


Joined: 24 Apr 2004
Posts: 8

PostPosted: Fri Nov 05, 2004 9:28 am    Post subject: Templateinhalt aus Variable verwenden Reply with quote

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
View user's profile Send private message
kills
Smarty Elite


Joined: 28 May 2004
Posts: 493

PostPosted: Fri Nov 05, 2004 9:40 am    Post subject: Reply with quote

wie ist das Template in die Variable gekommen?

Vielleicht könntest du ja schon vorher ansetzten
Back to top
View user's profile Send private message
timo_ipark
Smarty Rookie


Joined: 24 Apr 2004
Posts: 8

PostPosted: Fri Nov 05, 2004 10:07 am    Post subject: Reply with quote

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
View user's profile Send private message
kills
Smarty Elite


Joined: 28 May 2004
Posts: 493

PostPosted: Fri Nov 05, 2004 10:17 am    Post subject: Reply with quote

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
View user's profile Send private message
timo_ipark
Smarty Rookie


Joined: 24 Apr 2004
Posts: 8

PostPosted: Fri Nov 05, 2004 10:48 am    Post subject: Reply with quote

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 Wink
Back to top
View user's profile Send private message
kills
Smarty Elite


Joined: 28 May 2004
Posts: 493

PostPosted: Fri Nov 05, 2004 11:12 am    Post subject: Reply with quote

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 Wink


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
View user's profile Send private message
timo_ipark
Smarty Rookie


Joined: 24 Apr 2004
Posts: 8

PostPosted: Fri Nov 05, 2004 1:02 pm    Post subject: Reply with quote

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 Wink
Back to top
View user's profile Send private message
kills
Smarty Elite


Joined: 28 May 2004
Posts: 493

PostPosted: Fri Nov 05, 2004 1:10 pm    Post subject: Reply with quote

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
View user's profile Send private message
timo_ipark
Smarty Rookie


Joined: 24 Apr 2004
Posts: 8

PostPosted: Fri Nov 05, 2004 2:46 pm    Post subject: Reply with quote

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
View user's profile Send private message
kills
Smarty Elite


Joined: 28 May 2004
Posts: 493

PostPosted: Fri Nov 05, 2004 3:10 pm    Post subject: Reply with quote

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
View user's profile Send private message
messju
Administrator


Joined: 16 Apr 2003
Posts: 3336
Location: Oldenburg, Germany

PostPosted: Fri Nov 05, 2004 5:50 pm    Post subject: Reply with quote

@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
View user's profile Send private message Send e-mail Visit poster's website
messju
Administrator


Joined: 16 Apr 2003
Posts: 3336
Location: Oldenburg, Germany

PostPosted: Sun Nov 07, 2004 3:19 pm    Post subject: Reply with quote

@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
View user's profile Send private message Send e-mail Visit poster's website
Display posts from previous:   
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    Smarty Forum Index -> Language: German All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group
Protected by Anti-Spam ACP