Smarty
André Laugks
- php
Hallo!
Ich habe mir mal die Template-Maschine Smarty installiert. Sieht nett aus aber verdammt kompliziert. Entwerder bin ich zu blöd oder blind (Doku)?
Wie kann man Schleifen bei Smarty einsetzen? Und wenn ich schon einmal was schreibe, wie kann ich Templates verschachteln?
// index.tpl
-------------------------------------------------------
{include file="kopf.tpl"}
<!--
Und wie setze ich nun hier body.tpl und zeile.tpl ein oder wie
rufe ich sie in Smarty auf?
-->
{include file="fuss.tpl"}
-------------------------------------------------------
// kopf.tpl
-------------------------------------------------------
<html>
<body>
-------------------------------------------------------
// body.tpl
-------------------------------------------------------
<table>
{$zeile}
</table>
-------------------------------------------------------
// zeile.tpl
-------------------------------------------------------
<tr><td>{$X}</td></tr>
-------------------------------------------------------
// fuss.tpl
-------------------------------------------------------
</body>
</html>
-------------------------------------------------------
// index.php
require 'Smarty.class.php';
$smarty = new Smarty;
$smarty->caching = false;
$smarty->compile_check = true;
$smarty->debugging = false;
for($i=0;$i<10;$i++)
{
$smarty->assign("X",$i);
}
$smarty->display('index.tpl');
MfG, André Laugks
Hallo André,
Wie kann man Schleifen bei Smarty einsetzen?
{section loop=$Array name=namederschleife}
...
{/section}
Und wenn ich schon einmal was schreibe, wie kann ich Templates verschachteln?
Was verstehst Du unter verschachteln?
// index.tpl
-------------------------------------------------------
{include file="kopf.tpl"}
{section loop=$MeineZeilen name=tabellenschleife}
<tr><td>{$MeineZeilen[tabellenschleife]}</td></tr>
{/section}
{include file="fuss.tpl"}
(body.tpl und zeile.tpl brauchst Du nicht mehr, Du kannst sie natürlich noch definieren, allerdings ist das komplizierter als so)
Variante 1:
require 'Smarty.class.php';
$smarty = new Smarty;
$smarty->caching = false;
$smarty->compile_check = true;
$smarty->debugging = false;
$meinArray = array ();
for($i=0;$i<10;$i++)
{
$meinArray[] = $i;
}
$smarty->assign ('MeineZeilen', $meinArray);
$smarty->display('index.tpl');
Variante 2:
require 'Smarty.class.php';
$smarty = new Smarty;
$smarty->caching = false;
$smarty->compile_check = true;
$smarty->debugging = false;
for($i=0;$i<10;$i++)
{
$smarty->append ('MeineZeilen', $i);
}
$smarty->display('index.tpl');
Viele Grüße,
Christian
Hallo!
{section loop=$Array name=namederschleife}
...
{/section}
Aha!
Und wenn ich schon einmal was schreibe, wie kann ich Templates verschachteln?
einfaches Beispiel:
// 1.tpl
<html><body>{TPL_2} <- hier 2.tpl rein </body></html>
// 2.tpl
<table>{TPL_3} <- hier 3.tpl rein</table>
// 3.tpl
<tr><td>{TPL_4} <- hier 4.tpl rein</td></tr>
// 4.tpl
blablabla
Variante 1:
Variante 2:
Vielen Dank für die Beispiele. Ich werde mal versuchen es zu verstehen.
MfG, André Laugks
Hallo André,
einfaches Beispiel:
// 1.tpl
<html><body>{TPL_2} <- hier 2.tpl rein </body></html>// 2.tpl
<table>{TPL_3} <- hier 3.tpl rein</table>// 3.tpl
<tr><td>{TPL_4} <- hier 4.tpl rein</td></tr>// 4.tpl
blablabla
Das geht natürlich auch:
1.tpl:
<html><body>{include file="2.tpl" zeilen=$meinedaten}</body></html>
2.tpl:
<table>{section loop=$zeilen name=zloop}{include file="3.tpl" inhalt=$zeilen[zloop]}{/section}</table>
3.tpl:
<tr><td>{include file="4.tpl" inhalt=$inhalt}</td></tr>
4.tpl:
<b>{$inhalt}</b>
script.php
require 'Smarty.class.php';
$smarty = new Smarty;
$smarty->caching = false;
$smarty->compile_check = true;
$smarty->debugging = false;
$meinArray = array ();
for($i=0;$i<10;$i++)
{
$meinArray[] = $i;
}
$smarty->assign ('meinedaten', $meinArray);
$smarty->display('1.tpl');
Ausgabe:
<html><body><table>
<tr><td><b>0</b></td></tr>
<tr><td><b>1</b></td></tr>
<tr><td><b>2</b></td></tr>
<tr><td><b>3</b></td></tr>
<tr><td><b>4</b></td></tr>
<tr><td><b>5</b></td></tr>
<tr><td><b>6</b></td></tr>
<tr><td><b>7</b></td></tr>
<tr><td><b>8</b></td></tr>
<tr><td><b>9</b></td></tr>
</table></body></html>
Bei der 3.tpl ist das inhalt=$inhalt nicht notwendig, da die Variable ja sowieso so heißt. Allerdings verdeutlicht das das ganze viel mehr.
Viele Grüße,
Christian
Hi!
Ich habe mir mal die Template-Maschine Smarty installiert. Sieht nett aus aber verdammt kompliziert. Entwerder bin ich zu blöd oder blind (Doku)?
Tja, je mächtiger ein Werkzeug desto komplizierter, aber lies Dich mal in die Doku ein, wenn DU es einmal verstanden hast ist es ziemlich einfach, die Doku gibt es inzwischen sogar in deutsch: http://smarty.php.net/manual/de/
Irgendwo bei dem was DU runtergeladen hast ist auch eine sehr kleine Einführung anhand eines Beispieles dabei(ich glaube das hier: http://www.phpinsider.com/php/code/Smarty/QUICKSTART), und im Source so wie man ihn runterläd ist ein komplexeres Beispiel fertig integriert.
sonst gibts noch:
http://smarty.php.net/crashcourse.php
http://smarty.php.net/resources.php?category=0
Wie kann man Schleifen bei Smarty einsetzen?
z.B.:
http://smarty.php.net/manual/de/language.function.foreach.php
http://smarty.php.net/manual/de/language.function.section.php
Und wenn ich schon einmal was schreibe, wie kann ich Templates verschachteln?
// index.tpl
-------------------------------------------------------{include file="kopf.tpl"}
<!--
Und wie setze ich nun hier body.tpl und zeile.tpl ein oder wie
rufe ich sie in Smarty auf?-->
{include file="fuss.tpl"}
-------------------------------------------------------
Entweder Du bindest kopf und fuss aus der PHP-Datei ein, oder aus dem Template body, dann so wie Du es hier gemacht hast. Das was Du da schreibst _ist_ dann die Datei body.tpl, zwischen den includes muss dann der HTML-Code des Bodys mit den anderen Smarty-Tags wie schleifen...
Lies mal als erstes die verschiedenen Einführungen die ich verlinkt habe, dann guck in die Doku und dann wird es ganz einfach ;-)
Grüße
Andreas