André Laugks: Smarty

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

--
L-Andre @ gmx.de
  1. 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

    --
    | http://www.selflinux.org/                                                  |
    | http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm                      |
    | sh:) fo:) ch:] rl:( br:> n4:& ie:% mo:) va:) de:] zu:) fl:( js:| ss:) ls:[ |
    | http://emmanuel.dammerer.at/selfcode.html                                  |
    1. 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

      --
      L-Andre @ gmx.de
      1. 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

        --
        | http://www.selflinux.org/                                                  |
        | http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm                      |
        | sh:) fo:) ch:] rl:( br:> n4:& ie:% mo:) va:) de:] zu:) fl:( js:| ss:) ls:[ |
        | http://emmanuel.dammerer.at/selfcode.html                                  |
  2. 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