yubb.de-Logo
Tutorials
yubb@yubb
yubbService
Inside yubb



In diesem Tutorial möchte ich euch die Basics zu Smarty zeigen. Smarty bietet ein sehr gutes Manual (auch auf Deutsch vorhanden), in dem die einzelnen Features recht gut erklärt sind. Jedoch ist es mit Hilfe dieses Manuals schwer, in die Materie reinzukommen. Um gleich loslegen zu können, solltet ihr euch zuerst mal Smarty runterleraden (siehe "Weiterführende Links").
Wenn ihr Smarty runtergeladen habt, dann entpackt das Archiv mit einem Packer eurer Wahl (Ich nutze da WinRAR). Ihr braucht nicht das komplette Archiv zu entpacken: Es reicht eigentlich völlig aus den Inhalt des Ordners "libs" bspw. in einen neuen Ordner "Smarty" im Document Root des Webservers zu entpacken.

So. Das war schon mal der Anfang. Es gäbe natürlich noch weitere Möglichkeiten Smarty zu "installieren", aber darauf möchte ich hier nicht eingehen.

Um mit Smarty arbeiten zu können, muss folgendes an den Anfang jeder Datei, in der Templates genutzt werden:

PHP-Datei:
1
2
3
4
5
6
7
<?php
define
(SMARTY_DIR'./smarty/');
include(
SMARTY_DIR.'Smarty.class.php');
$smarty = new smarty;
$smarty->template_dir './templates/';
$smarty->compile_dir './templates/compiled/';
?>


In der ersten Zeile definieren wir eine Konstante, die das Verzeichnis zu Smarty als Wert hat. In Zeile Zwei wird die Smarty-Klasse inkludiert, wovon in der dritten Zeile eine Instanz erstellt wird.
In den Zeilen Vier und Fünf werden Ordner definiert. Der erste von diesen ist jener, in dem die Templates mit der Endung *.tpl gespeichert werden. Der zweite gibt an, wo die kompilierten Templates gespeichert werden. Warum die Templates kompiliert werden müssen? Ganz einfach: Mit Smarty ist es möglich, auf sogenanntes Templatescripting zurückzugreifen. Dieses erlaubt es If-Abfragen und foreach-Schleifen im Template zu benützen.

Und so ruft man die Smarty Templates auf und und nutzt im Template Variablen:

PHP-Datei:
1
2
3
4
5
<?php
$foo 
'Smarty ist cool!';
$smarty->assign('bar'$foo);
$smarty->display('template.tpl');
?>


Die erste Zeile sollte eigentlich noch klar sein. In der folgenden Zeile wird die Variable an Smarty "übergeben". Die Funktion assign hat zwei Parameter: Einmal der Name der Varialben und dann noch den entsprechenden Wert. Es sind beide Parameter nötig; wobei der erste nicht zwangsläufig den Namen der Variablen tragen muss, dies ist aber aus Gründen der Übersicht zu empfehlen.

Das Template dazu sieht so aus:

template.tpl:
{* Kommentar *}
<div align="center">{$bar}</div>


In der ersten Zeile ist ein Kommentar zu sehen, der nur im Template zu sehen ist und nicht im ausgegebenem Quelltext. Alles, was im Template mit PHP zu tun hat, wird von geschweiften Klammern eingeschlossen, so eben auch die Variable.
Es ist außerdem möglich, Smarty anstatt einer normalen Variable assoziative Arrays zu übergeben. Auf diese wird dann wie folgt zugegriffen:

Arrays in Smarty:
<div align="center">{$array.key}</div>


Kommen wir nun aber zu einem der interessanteren Teile von Smarty, dem Templatescripting. In Smarty ist es, wie bereits schon erwähnt, möglich, if-elseif-else Abfragen zu nutzen sowie foreach-Schleifen.
Eigentlich ist das auch relativ einfach:

beispiel.tpl:
{* if-elsif-else Abfragen und foreach-Schleifen *}
{* ersters Beispiel *}
{if isset($foo)}
<div align="center">{$foo}</div>
{elseif isset($bar)}
<div align="center">{$bar}</div>
{else}
<div align="center">Weder $foo noch $bar wurden definiert</div>
{/if}

{* zweites Beispiel *}
{foreach from=$array item=value key=key}
<div align="left">{$key} => {$value}</div>
{/foreach}


Als erstes ist zu sehen, wie man auf die Kontrollstrukturen in den Templates zugreift. Auch hier kommen wieder die geschweiften Klammern hinzu. Man kann jede in PHP vorhandene Funktion nutzen, allerdings müssen die darin verwendete Variablen vorher in der PHP-Datei Smarty zugewiesen werden.
Das zweite Beispiel zeigt die Anwendung einer foreach-Schleife im Template. Das Array kann in diesem Fall auch ein numerisches sein, muss aber wie alle anderen Variablen und Arrays zuvor auch Smarty zugewiesen worden sein. Der Parameter key ist optional, während item immer angegeben werden muss. Auf diese Variablen, kann man dann ganz einfach, wie auf alle anderen auch, zugreifen.

Es ist mit Smarty auch möglich auf die Umgebungsvariablen ($_SERVER, $_POST, $_GET, $_COOKIE, $_SESSION, $_REQUEST) zuzugreifen, ohne diese zuvor Smarty zugewiesen zu haben, das macht Smarty nämlich schon selbst. Man greift darauf zurück, wie auf alle anderen Arrays in Templates auch:

Umgebungsvariablen in Smarty:
{* $_POST *}
<div align="left">{$smarty.post.key}</div>
{* $_GET *}
<div align="left">{$smarty.get.key}</div>


Auf alle anderen Umgebungsvariablen kann genau im selben Stil zugegriffen werden. Diese werden nämlich durch die Templateengine in die Smarty Variable $smarty geschrieben.

Smarty ermöglicht es ebenfalls Dateien (Templates) mittels einer Include-ähnlichen Funktion einzubinden:

Templates inkludieren:
{* Beispiel 1 *}
{include file="header.tpl"}
<div align="left">Inhalt des Templates</div>
{include file="footer.tpl"}

{* Beispiel 2 *}

{* header.tpl *}
<titel>{$titel}</titel>

{* beispielt.tpl *}
{include file="header.tpl" titel="Beispiel"}
<div align="left">Beispiel</div>
{include file="footer.tpl"}


Hier wird in ein Template der Header und der Footer, die sich in jeweils einem eigenem Template befinden, eingebunden. Es ist auch möglich, Variablen an das eingebundene Template zu übergeben, wie in Beispiel 2 des obigen Quelltextes zu sehen ist. Diese Variable muss im inkludierten Template vorkommen, wie man im zweiten Beispiel sehen kann. Der Name der Variable muss also als Parameter bei der Smartyfunktion include angegeben werden.



Weiterführende Links:
Smarty
Smarty-Download
Smarty-Manual
WinRAR

Geschrieben von michi am 06.09.2004 (21745x gelesen)
weiterempfehlen weiterempfehlen   Druckversion Druckversion   kommentieren kommentieren

Mal so ein paar wirre, freie und wilde Gedanken dazu:

Templates sollen eigentlich die funktionale Ebene des Skriptes von der Ausgabeform trennen. Hier bringe ich aber die Logic ins Template wieder hinein. Letztendlich habe ich eine Art Pseudo-PHP im Template versteckt.
Geschrieben von René
Sehe ich genau so.

Darum mag ich Smarty auch nicht, denn Smarty hat für mich schon zu viel Funktionsumfang für das, was ein Templatesystem haben sollte.

Es ist schon sozusagen ein Basic PHP...
Geschrieben von Phil Marx
Hallo,
gibt es bei Smarty eine Funktion, um eine Druckvorschau zu erzeugen?
Geschrieben von Ludwig
nein gibt es nicht, aber das lässt sich sowieso viel besser mit CSS lösen ;)
Geschrieben von michi
Super tuts was anfänger wie mir stört ist nur.
Man schreibt mach dies und jedes aber man sagt nicht welche datei man das schreiben sollte oder ob man eine neue template datei machen sollte und man sagt auch nciht in welchen erzeichniss.
Also zum schluss ist das ein bissel frustrieren den als newbie hätte man gerne doch diese deteils
mfg
Porto
Geschrieben von Porto
mir ergehts wie porto... :(
Geschrieben von rcw