Hier habe ich für euch ein GPTPL Template System:
Das GPTPL ist ein kleines aber durchaus Leistungsintensives Templatesystem welches seine Templates zwischenchachen kann und somit in den Benchmarks sich ganz klar von anderen OSS Templatesystemen abhebt!
Lizenzbestimmungen:
Jeder darf das GPATPL in Version 2.3 und höher frei verwenden. Für kommerzielle oder auch nicht kommerzielle Zwecke, so lange das Template System als Bestand eines Projektes ist, darf es auch frei unter diesen Lizenzbestimmungen weitergegeben werden, verkauft oder vetrieben werden.
Das TPLSYSTEM darf in keinester Weise als Produkt vertrieben werden, wenn es nicht als Bestand eines Produktes ist, und oder von dem Produkt zur berechnung von Templates verwendet wird.
Ich übernehme keinerlei Haftung für jegliche Schäden die durch die Nutzung der Software entstehen können, weder an den Lizenznehmer noch an dritte.
Der Code darf in keinster Weise verändert an dritte weitergegeben werden. Die Hinweise auf den Autor dürfen nicht aus der PHP Datei entfernt werden!
Wer den Lizenzbestimmungen zu wieder handelt für den gilt die Lizenz als erloschen, und somit auch allen dritten, welchen der Lizenznehmer die Software weitergeben hat.
gptpl.php
Installation:
1.) Die datei gptpl wird in ein Verzeichnis (Beispielweise includes) abgespeichert und vor der Verwendung 1x eingebunden. Beispiel:
2. Es wird ein Verzeichnis für die templates angelegt. Beispiel templates/ welches künftig für die Templatedateien Platz hat. Dieses Verzeichnis wird in der gptpl.php in der Variable $_TPLLIB_TPLDIR vermerkt! Bitte kein (/) Backslash am Ende!
3.) Cacheeinstellungen in der gptpl.php vornehmen. Hierzu dient die Variable $_TPLLIB_CACHE! Eine Beschreibung findet ihr im Sourcecode. (1=Chachen = Highspeed)
Funktionsbeschreibung:
Das einfache an diesem Templatesystem ist, dass ihr euch nur um eine Einzige Funktion kümmern müsst.
call_template(TEMPLATE, [optional Template part]);
Liefert das fertig berechnete Template oder [Optional] Template Part zurück.
Anwednungsbeispiele:
Im folgenden erstellt ihr euch ein Template in euren Template Ordner:
test.php.html
Wie ihr erkennen könnt schreib ihr euch enfach die Variablen die künftig im PHP Code bestehen sein sollen und im Template ersetzt werden sollen einfach in den Code herein. Das macht die Sache sehr simpel. Ihr könnt auch Ruhig Array Variablen und oder Objektvariablen einschreiben!
Im zweiten Zug wird eine PHP Datei erzeugt:
test.php
Beispiel: Arbeiten mit Template Parts:
Das GPTPL beitet die Möglichkeit mit Template Parts zu arbeiten. In diesem Beispiel wird gezeigt wie einfach das geht.
Die Parts werden wie folgt im Template markiert:
test.php.tpl
Dabei handelt es sich um ein HTML Kommentar:
<!--#part#parname#part#//-->
Dabei sollte man wissen, dass der Parser künftig diese Parts in einem Array verwalten wird. Deshalb ist der Partname als zulässiger PHP Arrayschlüssel zu wählen. Möglich ist daher:
<!--#part#name#part#//--> oder
<!--#part#name_2#part#//-->
Nicht möglich wären Partnamen wie:
<!--#part#teil 1#part#//--> oder
<!--#part#Hier ist der Part vom Tabellen Kopf#part#//-->
Damit der Parser nie bestehende HTML Kommentare angreift ist das ..#part#.. nie zu entfernen! Ein Template kann unendlich Partteile beinhalten. Der Parser wird jeweils nur das nötige welches Angefordert wird berechnen.
Um das zu verdeutlichen
test.php
Komplexes Beispiel: Eine dymamische Tabelle entsteht!
test.php.html
test.php
Beispiel Templatevererbung:
Das GPTPL bietet die Möglichkeit einem Template mehrere Templates oder Templatesparts zu vererben. Dahinter steckt, es ist von Grund auf nicht wichtig welche Reihnenfolge ihr bei der Programmierung verwendet. In diesem Beispiel möchte ich zeigen wie das funktioniert.
Nehmen wir an eine Webseite hat immer einen Header Part und einen Footer. Wir können uns hier diese Geschichte sparen. Wir fassen unseren Header Part und Footer Part zusammen!
main.php.html
Wie ihr seht ist der Header und der Footer in einem einzigen Template gespeichert. Dazu wollen wir je nach Seite einen Inhalt in das Template einbringen.
lala.php.html
dazu wird einfach wie folgt vorgegangen:
Die Folge ist, das lala.php.html Template steckt nun sicher im main.tpl.html drin am richtigen Ort.
Ich wünsche viel Spass! (Fragen können gebpostet werden).
Das GPTPL ist ein kleines aber durchaus Leistungsintensives Templatesystem welches seine Templates zwischenchachen kann und somit in den Benchmarks sich ganz klar von anderen OSS Templatesystemen abhebt!
Lizenzbestimmungen:
Jeder darf das GPATPL in Version 2.3 und höher frei verwenden. Für kommerzielle oder auch nicht kommerzielle Zwecke, so lange das Template System als Bestand eines Projektes ist, darf es auch frei unter diesen Lizenzbestimmungen weitergegeben werden, verkauft oder vetrieben werden.
Das TPLSYSTEM darf in keinester Weise als Produkt vertrieben werden, wenn es nicht als Bestand eines Produktes ist, und oder von dem Produkt zur berechnung von Templates verwendet wird.
Ich übernehme keinerlei Haftung für jegliche Schäden die durch die Nutzung der Software entstehen können, weder an den Lizenznehmer noch an dritte.
Der Code darf in keinster Weise verändert an dritte weitergegeben werden. Die Hinweise auf den Autor dürfen nicht aus der PHP Datei entfernt werden!
Wer den Lizenzbestimmungen zu wieder handelt für den gilt die Lizenz als erloschen, und somit auch allen dritten, welchen der Lizenznehmer die Software weitergeben hat.
gptpl.php
PHP:
<?
//======================================================
// TPL LIB VERSION 2.1 | 18.06.2007 | TPLLIB2.4 =
//======================================================
//UP. 2.2 Kleine Lücke ausgebessert. $Zeichen bei der Rueckgabe umschreiben
//UP. 2.3 Erweiterung auf Part Verteilte Templates
//UP. 2.4 Doppelte Einlesung von der Festplatte durch ?file_get_contents() ausgebaut
//-----> Definition <------||
$_reg_comp['TPLLIB'] = 2.4;
//-----> Einstellungen <-----||
$_TPLLIB_TPLDIR = 'templates'; //Ordnername zum Templateordner ohne (/) am Ende! Auch absoluter Pfad möglich und https:// Pfad falls Templates auf einem anderen Server liegen.
$_TPLLIB_CACHE = 1; //1 -> Template Cache an. Hat den Vorteil dass der Server die Templates jeweils nur einmal von der HDD ausliest, und dann für ernuete Verwendungen im Speicher bereit hält bis das Script verarbeitet wurde. | 0 -> Template Cahce ist aus. Es wird jedes mal das Template von der HDD ausgelsen, verbleibt aber dafür nicht bis zum Scriptende im Speicher.
/*=======================================================
Author:
GPTPL ist eine TPLIB von (c) Herrn Ceglarski Lukasz. Unter Einhaltung der Lizenzbestimmungen ist die Software für die Verwendung zu kommerziellen sowie nicht komerziellen Zwecken gestattet!
========================================================*/
function call_return_value($notlocal_int)
{
if((eregi('->',$notlocal_int) && eregi('\[',$notlocal_int)) || eregi('->',$notlocal_int))
{
$notlocal_int = explode('->', $notlocal_int);
@eval('global $'.$notlocal_int[0].'; $notlocal_var = $'.$notlocal_int[0].'->'.$notlocal_int[1].';');
return str_replace('$', '$',$notlocal_var);
}
elseif(eregi('\[',$notlocal_int))
{
$notlocal_int_0 = preg_replace("/([^\[]*)\[(.*)\]/",'\\1',$notlocal_int);
$notlocal_int_1 = preg_replace("/([^\[]*)\[(.*)\]/",'\\2',$notlocal_int);
@eval('global $'.$notlocal_int_0.'; $notlocal_var = $'.$notlocal_int_0.'['.$notlocal_int_1.'];');
return str_replace('$', '$',$notlocal_var);
}
else
{
@eval('global $'.$notlocal_int.'; $notlocal_var = $'.$notlocal_int.';');
return str_replace('$', '$',$notlocal_var);
}
return ''; //empty
}
function call_template($tplname,$part = '')
{
global $_TPLLIB_TPLDIR, $_TPLLIB_CACHE, $_TPLLIB_PROTOKOLL, $_TPLLIB_PART;
if ($_TPLLIB_CACHE == 1)
{
global $TPLLIB_TEMPLATES;
if (!isset($TPLLIB_TEMPLATES[$tplname]))
{
$TPLLIB_TEMPLATES[$tplname] = @file_get_contents($_TPLLIB_TPLDIR.'/'.$tplname);
if(empty($TPLLIB_TEMPLATES[$tplname]) && !file_exists($TPLLIB_TEMPLATES[$tplname]))
{
die('TPLLIB ERROR 01: Ein Template ist nicht vorhanden! Das Template ('.$tplname.') konnte nicht gefunden werden.');
}
$x = explode('<!--#part#',$TPLLIB_TEMPLATES["$tplname"]);
for($i = 0; $i <= count($x)-1; $i++)
{
$dt = explode('#part#//-->',$x[$i]);
$_TPLLIB_PART[$tplname][$dt[0]] = $dt[1];
unset($dt);
}
}
}
else
{
$TPLLIB_TEMPLATES[$tplname] = @file_get_contents($_TPLLIB_TPLDIR.'/'.$tplname);
if(empty($TPLLIB_TEMPLATES[$tplname]) && !file_exists($TPLLIB_TEMPLATES[$tplname]))
{
die('TPLLIB ERROR 01: Ein Template ist nicht vorhanden! Das Template ('.$tplname.') konnte nicht gefunden werden.');
}
$x = explode('<!--#part#',$TPLLIB_TEMPLATES["$tplname"]);
for($i = 0; $i <= count($x)-1; $i++)
{
$dt = explode('#part#//-->',$x[$i]);
$_TPLLIB_PART[$tplname][$dt[0]] = $dt[1];
unset($dt);
}
}
if (!empty($part))
{
$template = $_TPLLIB_PART[$tplname][$part];
}
else
{
$template = $TPLLIB_TEMPLATES[$tplname];
}
$muster = array(
'/(\$)([a-z0-9_]*\[[a-z0-9_\[\]\'"]*\])([^\]])/miUe',
'/(\$)([a-z0-9_]*\[[a-z0-9_\[\]\'"]*\])([^\]])/miUe',
'/(\$)([a-z0-9_]*|[a-z0-9_]*\[[a-z0-9_\[\]\'"]*\]|[a-z0-9_]*->[a-z0-9_]*\[[a-z0-9_\[\]\'"]*\]|[a-z0-9_]*->[a-z0-9_]*)([^a-z0-9->_\'"\[\]])/miUe',
'/(\$)([a-z0-9_]*|[a-z0-9_]*\[[a-z0-9_\[\]\'"]*\]|[a-z0-9_]*->[a-z0-9_]*\[[a-z0-9_\[\]\'"]*\]|[a-z0-9_]*->[a-z0-9_]*)([^a-z0-9->_\'"\[\]])/miUe',
'/(\$)([a-z0-9_]*\[[a-z0-9_\[\]\'"]*\]|[a-z0-9_]*->[a-z0-9_]*\[[a-z0-9_\[\]\'"]*\]|[a-z0-9_]*->[a-z0-9_]*|[a-z0-9_]*)([^a-z0-9_>\[\]])/miUe',
'/(\$)([a-z0-9_]*\[[a-z0-9_\[\]\'"]*\]|[a-z0-9_]*->[a-z0-9_]*\[[a-z0-9_\[\]\'"]*\]|[a-z0-9_]*->[a-z0-9_]*|[a-z0-9_]*)([^a-z0-9_>\[\]])/miUe',
);
return preg_replace($muster,"''.call_return_value('\\2').return_escape_template('\\3').''",$template);
}
function return_escape_template($int)
{
if ($int == '\"')
{
return '"';
}
else
{
return $int;
}
}
?>
Installation:
1.) Die datei gptpl wird in ein Verzeichnis (Beispielweise includes) abgespeichert und vor der Verwendung 1x eingebunden. Beispiel:
PHP:
<?
require('includes/gptpl.php');
?>
2. Es wird ein Verzeichnis für die templates angelegt. Beispiel templates/ welches künftig für die Templatedateien Platz hat. Dieses Verzeichnis wird in der gptpl.php in der Variable $_TPLLIB_TPLDIR vermerkt! Bitte kein (/) Backslash am Ende!
PHP:
<?
$_TPLLIB_TPLDIR = 'templates'; //Ordnername zum Templateordner ohne (/) am Ende! Auch absoluter Pfad möglich und https:// Pfad falls Templates auf einem anderen Server liegen.
?>
3.) Cacheeinstellungen in der gptpl.php vornehmen. Hierzu dient die Variable $_TPLLIB_CACHE! Eine Beschreibung findet ihr im Sourcecode. (1=Chachen = Highspeed)
Funktionsbeschreibung:
Das einfache an diesem Templatesystem ist, dass ihr euch nur um eine Einzige Funktion kümmern müsst.
call_template(TEMPLATE, [optional Template part]);
Liefert das fertig berechnete Template oder [Optional] Template Part zurück.
Anwednungsbeispiele:
Im folgenden erstellt ihr euch ein Template in euren Template Ordner:
test.php.html
HTML:
<html>
<head>
<title>test.php</title>
</head>
<body>
Hallo mein name ist $mein_name!<br>
</body>
</html>
Wie ihr erkennen könnt schreib ihr euch enfach die Variablen die künftig im PHP Code bestehen sein sollen und im Template ersetzt werden sollen einfach in den Code herein. Das macht die Sache sehr simpel. Ihr könnt auch Ruhig Array Variablen und oder Objektvariablen einschreiben!
Im zweiten Zug wird eine PHP Datei erzeugt:
test.php
PHP:
<?php
require('includes/gptpl.php');
$mein_name = 'Mustermann';
echo call_template('test.php.html');
?>
Beispiel: Arbeiten mit Template Parts:
Das GPTPL beitet die Möglichkeit mit Template Parts zu arbeiten. In diesem Beispiel wird gezeigt wie einfach das geht.
Die Parts werden wie folgt im Template markiert:
test.php.tpl
HTML:
<!--#part#anfang#part#//-->
<html>
<head>
<title>test.php</title>
</head>
<body>
<!--#part#hallo#part#//-->
Hallo mein name ist $mein_name!<br>
<!--#part#wiedersehen#part#//-->
Auf wiedersehen!<br>
<!--#part#ende#part#//-->
</body>
</html>
Dabei handelt es sich um ein HTML Kommentar:
<!--#part#parname#part#//-->
Dabei sollte man wissen, dass der Parser künftig diese Parts in einem Array verwalten wird. Deshalb ist der Partname als zulässiger PHP Arrayschlüssel zu wählen. Möglich ist daher:
<!--#part#name#part#//--> oder
<!--#part#name_2#part#//-->
Nicht möglich wären Partnamen wie:
<!--#part#teil 1#part#//--> oder
<!--#part#Hier ist der Part vom Tabellen Kopf#part#//-->
Damit der Parser nie bestehende HTML Kommentare angreift ist das ..#part#.. nie zu entfernen! Ein Template kann unendlich Partteile beinhalten. Der Parser wird jeweils nur das nötige welches Angefordert wird berechnen.
Um das zu verdeutlichen
test.php
PHP:
<?php
require('includes/gptpl.php');
$mein_name = 'Mustermann';
//wir geben den Part anfang aus
echo call_template('test.php.html','anfang');
//wir geben den Part hallo aus
echo call_template('test.php.html','hallo');
//der part wiedersehen wird nicht ausgegeben!
//wir geben den part ende aus
echo call_template('test.php.html','ende');
?>
Komplexes Beispiel: Eine dymamische Tabelle entsteht!
test.php.html
HTML:
<!--#part#anfang#part#//-->
<html>
<head>
<title>test.php</title>
</head>
<body>
<!--#part#tabellenkopf#part#//-->
<table border="1" cellpadding="2" cellspacing="2" align="center">
<tr valign="middle">
<td align="center">
<b>Zeilenzahl:</b>
</td>
</tr>
<!--#part#zeile#part#//-->
<tr valign="middle">
<td align="center">
$i
</td>
</tr>
<!--#part#tabellenfuss#part#//-->
</table>
<!--#part#ende#part#//-->
</body>
</html>
test.php
PHP:
<?php
require('includes/gptpl.php');
//wir geben den Part anfang aus
echo call_template('test.php.html','anfang');
//wir geben den Part tabellenkopf aus
echo call_template('test.php.html','tabellenkopf');
//Wir möchten mehrfach den Part zeile ausgeben mit unterschiedlichen Inhalten!
for ($i = 1; $i <= 30; $i++)
{
echo call_template('test.php.html','zeile');
}
//wir geben den part tabellenfuss aus
echo call_template('test.php.html','tabellenfuss');
//wir geben den part ende aus
echo call_template('test.php.html','ende');
?>
Beispiel Templatevererbung:
Das GPTPL bietet die Möglichkeit einem Template mehrere Templates oder Templatesparts zu vererben. Dahinter steckt, es ist von Grund auf nicht wichtig welche Reihnenfolge ihr bei der Programmierung verwendet. In diesem Beispiel möchte ich zeigen wie das funktioniert.
Nehmen wir an eine Webseite hat immer einen Header Part und einen Footer. Wir können uns hier diese Geschichte sparen. Wir fassen unseren Header Part und Footer Part zusammen!
main.php.html
HTML:
<html>
<head>
<title>Header und Footer</title>
</head>
<body>
Link1 Link2 Link3<br><br>
$site_inhalt
</body>
</html>
Wie ihr seht ist der Header und der Footer in einem einzigen Template gespeichert. Dazu wollen wir je nach Seite einen Inhalt in das Template einbringen.
lala.php.html
HTML:
<font color="Green">
<b>Ich binn hier das lala.php.html Template! Es ist jetzt $zeit Uhr!</b>
</font>
dazu wird einfach wie folgt vorgegangen:
PHP:
<?
require('includes/gptpl.php');
//Wir berechnen die Zeit für das Template lala.php.html dabei sind wir nicht gebunden an eine Reihenfolge
$zeit = date("H:i:s");
//wir füllen die Variable $site_inhalt mit dem Inahlt des brechneten Templates lala.php.html
$site_inhalt = call_template('lala.php.html');
//nun vererben wir das Template an unser Main Template
echo call_template('main.php.html');
?>
Die Folge ist, das lala.php.html Template steckt nun sicher im main.tpl.html drin am richtigen Ort.
Ich wünsche viel Spass! (Fragen können gebpostet werden).
Zuletzt bearbeitet:
Nehme ich in das nächste Update rein!