Frage zu smarty

Katzenbauer

Erfahrenes Mitglied
Wie stelle ich es bei Smarty an, dass eine Variable ausgewertet anstatt ausgegeben wird. Ich hab mal in der Dokumentation nach eval gesucht, aber aus dem Ergebnis werde ich nicht schlau.

Ich habe es so angestellt, dass ich das hier assigne:

PHP:
$smarty->assign('otable', '{section name=table loop=$tables}{$tables[table]}{/section}');

und so schreibe ich das dann ins template:

PHP:
 {eval var=otable}

Leider wird dafür nur folgendes ausgegeben:
otable
Also der Name der Variable.

Vielleicht wird ja jemand von euch daraus schlau:
http://smarty.php.net/manual/de/language.function.eval.php
 
Hallo,

Also soweit ich weiß kann die Funktion eval ein string welcher PHP Code enthält ausführen also z.B. wenn du in smarty das so machst:
PHP:
 $smarty->assign('otable', '<?php echo "Hallo Welt" ?>' );

nun sollte er dir beim Platzhalter otable den wert Hallo Welt ausgeben.

Was du nun Versuchst ist ja eine smarty Funktion auszuführen und das ist mit eval nicht möglich denke ich zumindest.

was hast du den vor vielleicht kann ich dir ja ein anderen Tipp geben?!

MfG Funjoy
 
An sich ist es auch gegen das Prinzip von Smarty bzw. eines TemplateSystems, dass du den TemplateCode selbst wieder durch PHP generierst. Ich würde je nach Verwendungszweck vielleich eher mit eine IF im Template selbst oder so arbeiten. Wenn der Inhalt z.B. dynamisch, oder in mehreren Seiten verwendet werden soll, dann würde ich den entsprechenden Teil in eine extra TemplateDatei speichern und diese dann einbinden:

PHP:
// temp1.tpl

{section name=table loop=$tables}{$tables[table]}{/section}



// seite.tpl
{include file=$otable}




// datei.php
<?php

$smarty->assign('otable', 'temp1.tpl');

?>
 
Entschuldigung, dass ich mich bisher nicht mehr gemeldet habe, aber ich hatte bisher keine Zeit.

So meine Vorgehensweise ist Folgende, die ich aber zu kompliziert finde, weil zu viel schwer zu verstehender Code(für only-htmler) in die Templates kommt:

Bisher habe ich es immer so gemacht, wenn eine DatenbankTabelle bzw. mehrere Einträge durchlaufen werden müssen, dass ich im php-code für jede Spalte ein eigenes indiziertes Array erzeugt habe, welches ich dann im Template ganz einfach mit einer section Anweisung durchlaufen habe. Aber, wenn man nun eine ganze Tabelle mit vielen Spalten ausgibt, dann hat man statt eines übersichtlichen {$name} oder {$date} immer lange section Anweisungen dort stehen. Deshalb wollte ich die Sektion Anweisungen mit dem PHP-Code erstellen und nur noch als Variable assignen.

Hier mal ein praktisches Beispiel:

PHP-Datei:
PHP:
while ($row = mysql_fetch_array($result))
{
	$tables[] = '<option value="'.$row['id'].'">'.$row['name'].'</option>';
}
$smarty->assign('tables', $tables);

Im Template steht dann statt einer einzelnen überschaubaren Variable dort eine Sektion Anweisung:
PHP:
{section name=table loop=$tables}{$tables[table]}{/section}

Dies versteht, aber jemand, der nur html kann kaum und weiß nicht wie es es in einem neu gestalteten Template unterbringen soll. Deshalb würde ich gerne die Section Anweisung ganz einfach z.B durch ein {$tables} ersetzen. Vielleicht weiß ja jemand von euch eine Lösung für dieses Problem.
 
Zurück