jspit.de
Impressum

TinyTemplate - PHP form class

Software: TinyTemplate - PHP form class LGPL-Logo
Datei: class.tinytemplate.php Download
Version: 1.3

Ziel

TinyTemplate ist für kleinste Systeme gedacht, die wenig Leistung und Speicher bieten. Merkmale:

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: 130.3 ms)
DB Abfrage von 11:49:34

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

NameBedeutung
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.