TinyTemplate - PHP form class
Software: |
TinyTemplate - PHP form class |
|
Datei: |
class.tinytemplate.php |
Download |
Version: | 1.3 |
Ziel
TinyTemplate ist für kleinste Systeme gedacht, die wenig Leistung und Speicher bieten.
Merkmale:
-
Die Template-Dateien für TinyTemplate können ausgenommen von PHP-Code
beliebigen Code enthalten (HTML,JS,CSS). Es wird kein PHP-Code im Template ausgeführt.
-
TinyTemplate kennt nur einen Platzhalter {{ key_name | 'defaultvalue' }}.
-
Die Methoden der Klasse liefern wieder Code (Strings), es werden keine Ausgaben getätigt,
ebenso wird die Ausgabepufferung nicht benötigt
-
TinyTemplates können belibig verschachtelt werden, so kann ein Platzhalter
auch ein Template zugewiesen bekommen. Es gibt keine 'Subtemplates'.
-
Templates mit Code können mehrere Sektionen enthalten, die durch spezielle
Kommentare getrennt werden. Auf jede Sektion kann wie auf ein separates Template
zugegriffen werden.
-
TinyTemplate ist mit ca. 8k Code nicht nur extrem klein, sondern auch sehr schnell.
Es ist damit auch für Systeme mit wenig Leistung und Speicher gut geeignet.
-
Template-Cache mit variabler Cachezeit
Benutzung
Die Nutzung der PHP TinyTemplate Class gestaltet sich extrem einfach.
Mit dem Einbinden einer einzigen Datei (ca.8 KB) mittels require/include ist die Klasse bereits nutzbar.
Es werden keine weiteren Dateien oder Installationen benötigt.
Der Konstruktor bekommt als Parameter den Dateiname inklusive Pfad des Templates mitgeliefert.
Nichtvorhandene oder nichtlesbare Templates werden mit einer Exception (Fatal Error) quittiert.
Die Templates kennen nur einen Platzhalter
{{ key_name | 'defaultvalue' }} oder
{{ key_name }}
der als Container für Werte und Code dient. Die Angabe | 'defaltvalue' ist optional, wird aber empfohlen.
Womit der Platzhalter per assign-Methode sinnvoll befüllt werden kann ist allein von der Stellung des Platzhalters im Template-Code abhängig.
Der per assign zugewiesene Code darf auch neue Platzhalter enthalten, z.B. kann auch eine zweites Template zugewiesen werden.
Templates können mittels spezieller Kommentare in mehrere Sektionen unterteilt werden,
auf die einzeln zugegriffen werden kann. Für die Kennzeichnung einer Sektion im HTML ist
ein Kommentar der Form
<!--: kennung :-->
vorgesehen. Sektionen für Javascript und CSS werden mit
/*: kennung :*/
gekennzeichnet. Diese speziellen Kommentare befinden sich in einer extra Zeile und die Kennung sollte aus Buchstaben und Ziffern bestehen.
Einfaches Beispiel
Vorlage example1.tpl.html
<!DOCTYPE html>
<html>
<head>
<title>{{title | 'unknown'}}</title>
</head>
<body>
{{ foobar | 'Hello World'}}<br>
</body>
</html>
example1.php
<?php
require '../../class/class.tinytemplate.php';
$tp = new TinyTemplate('example1.tpl.html');
$tp -> assign( 'title' , 'TinyTemplate Example1');
$tp -> assign('foobar','Hallo world from example1');
echo $tp -> renderCode();
?>
HTML
<!DOCTYPE html>
<html>
<head>
<title>TinyTemplate Example1</title>
</head>
<body>
Hallo world from example1<br>
</body>
</html>
Beispiel mit Template-Cache
example1cache.php
<?php
require '../../class/class.tinytemplate.php';
$tp = new TinyTemplate('example1.tpl.html');
if( $tp -> isCacheExpired('example1cache.html',30) ) {
//Simulation einer aufwendigen DB Abfrage mit 100ms
usleep(100000);
$result = 'DB Abfrage von '.date('H:i:s');
$assArr = array(
'title' => 'TinyTemplate Example1 with Cache',
'foobar' => $result,
);
$tp -> assign($assArr);
}
echo $tp -> renderCode();
?>
Ausgabe (Scriptlaufzeit: 105.1 ms)
DB Abfrage von 12:58:11
Mit der Methode isCacheExpired wird der Template-Cache aktiviert.
Die Datei example1cache.html dient als Speicher. Ist die Datei älter als 30 Sekunden,
liefert isCacheExpired() den wert true und die simulierte DB-Abfrage und das Assign werden ausgeführt.
Die Ausgabe zeigt dann die aktuelle Zeit. Wird die Seite innerhalb von 30 Sekunden
mit F5 aktualisiert wird die Ausgabe aus dem Cache geholt, die Zeit im Fenster Ausgabe bleibt stehen.
Beispiel mit Template-Sektionen
Vorlage example5.tpl.html
<!--: main :-->
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>{{title | 'unknown'}}</title>
</head>
<body>
<h2>Beispiel für Templatesektionen</h2>
<ul>
{{ liste | 'liste' }}
</ul>
</body>
</html>
<!--: listelement :-->
<li>{{ listelement | 'listelement' }}</li>
example5.php
<?php
require '../../class/class.tinytemplate.php';
$tp = new TinyTemplate('example5.tpl.html');
//Listelemente generieren
$liste = '';
for($i=1;$i<4;$i++) {
$tp->assign('listelement','Element '.$i);
$liste .= $tp->renderSection('listelement');
}
$tp -> assign('liste',$liste);
echo $tp->renderSection('main');
?>
HTML
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>unknown</title>
</head>
<body>
<h2>Beispiel für Templatesektionen</h2>
<ul>
<li>Element 1</li>
<li>Element 2</li>
<li>Element 3</li>
</ul>
</body>
</html>
Methoden
Name | Bedeutung |
assign($name_or_array, $content) |
Nimmt eine Zuweisung von $content für einen Platzhalter $name vor.
Alternativ kann ein Array mit dem Schema array('name' => 'Inhalt',..) benutzt werden.
Die Methode liefert false, wenn ein oder mehrere Platzhalter nicht im Template vorhanden sind, sonst true.
|
renderCode([$noParse]) |
Liefert den Code des Templates mit den per assign() getätigten Ersetzungen.
Für diese Methode kann auch der Templatecache aktiviert werden.
noParse ist ein optionales Array, welches Schlüssel für Container enthält,
die von den Ersetzungen ausgenommen werden.
Damit können Templates mit partiellen Ersetzungen erzeugt werden.
|
renderSection($Start , [$End, [$noParse]]) |
Liefert den Code einer Sektion des Templates mit den per assign() getätigten Ersetzungen.
Ist $Start angegeben und nicht NULL, wird die Sektion ab $Start geliefert.
Ohne eine Angabe von $End wird nur diese Sektion geliefert.
Mit einer Angabe von $End wird Code bis vor $End geliefert.
Ein Wert '*' für $End liefert den Code bis zum Ende des Templates.
noParse ist ein optionales Array, welches Schlüssel für Container enthält,
die von den Ersetzungen ausgenommen werden.
|
getSection($Start , [$End]) |
Liefert den Inhalt einer Sektion des Templates ohne die per assign() getätigten Ersetzungen.
|
isCacheExpired($FileName, [$CacheTime]) |
Die Methode aktiviert den Templatecache und liefert als Rückgabewert true,
wenn die Cachedatei nicht vorhanden ist oder älter als $CacheTime ist.
CacheTime akzeptiert einen numerischen Wert für eine Zeit in Sekunden
oder ein String mit einem gültigen relativen Intervall ('10 Minutes', '2 hours', '5 days').
Fehlt CacheTime oder hat den Wert 0, wird die Cachedatei immer neu erzeugt.
Liefert die Methode false, dann wird mit der Methode renderCode der Cache ausgeliefert.
Alternativ kann dann auch auf 'FileName' zugegriffen werden.
Die Methode renderSektion arbeitet immer ohne Cache.
|