L
Lukasz
Hallo
Ich habe ein kleines TPL Systemchen geschrieben, was von anderen abweicht. Deshalb frage ich mich, ob es eins ist oder nicht. Dahinter erfüllt es den Zweck oder auch nicht. Ich sehe mir oft andere Templatesysteme an, und merke, andere abrbeiten mit Klassen oder implode() etc... Das alles ist bei mir nicht der Fall.
Ich bin zwar kein Parser Spezialsit, habe aber das ganze so realisiert, dass der Name einer Variable eines Arrays oder einer Klasse in ihren Wert ersetzt wird. Das wars auch schon.
Als kleine Firewall ersetze ich $ in HTML Code falls es der Inhalt einer Variable sein sollte, damit keine unerwünschte Markierung auftaucht.
Also hier folgt der Code. Einige meinen, es hat nicht mit einem Templatesystem zu tun, aber es funktioniert doch so und erfüllt auch selbigen zweck. Eure Meinung bitte:
Nun ist es eins oder ist es keins? Die Variablen schreibe ich einfach in die Templates rein, so wie wenn man es in PHP auch einschreiben würde.
Ich habe ein kleines TPL Systemchen geschrieben, was von anderen abweicht. Deshalb frage ich mich, ob es eins ist oder nicht. Dahinter erfüllt es den Zweck oder auch nicht. Ich sehe mir oft andere Templatesysteme an, und merke, andere abrbeiten mit Klassen oder implode() etc... Das alles ist bei mir nicht der Fall.
Ich bin zwar kein Parser Spezialsit, habe aber das ganze so realisiert, dass der Name einer Variable eines Arrays oder einer Klasse in ihren Wert ersetzt wird. Das wars auch schon.
Als kleine Firewall ersetze ich $ in HTML Code falls es der Inhalt einer Variable sein sollte, damit keine unerwünschte Markierung auftaucht.
Also hier folgt der Code. Einige meinen, es hat nicht mit einem Templatesystem zu tun, aber es funktioniert doch so und erfüllt auch selbigen zweck. Eure Meinung bitte:
PHP:
//-----> Definition <------||
$_reg_comp[] = 'TPLLIB2.1';
//-----> Einstellungen <-----||
$_TPLLIB_TPLDIR = 'templates'; //Ordnername zum Templateordner ohne (/) am Ende! Auch absoluter Pfad möglich und http:// 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.
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 $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 $notlocal_var;
} else {
@eval('global $'.$notlocal_int.'; $notlocal_var = $'.$notlocal_int.';');
return $notlocal_var;
}
return ''; //empty
}
function call_template($tplname) {
global $_TPLLIB_TPLDIR, $_TPLLIB_CACHE, $_TPLLIB_PROTOKOLL;
if ($_TPLLIB_CACHE == 1) {
global $TPLLIB_TEMPLATES;
if (!isset($TPLLIB_TEMPLATES["$tplname"])) {
$TPLLIB_TEMPLATES["$tplname"] = @file_get_contents($_TPLLIB_TPLDIR.'/'.$tplname) ? file_get_contents($_TPLLIB_TPLDIR.'/'.$tplname) : die('TPLLIB ERROR 01: Ein Template ist nicht vorhanden! Das Template ('.$tplname.') konnte nicht gefunden werden.');
}
} else {
$TPLLIB_TEMPLATES["$tplname"] = @file_get_contents($_TPLLIB_TPLDIR.'/'.$tplname) ? file_get_contents($_TPLLIB_TPLDIR.'/'.$tplname) : die('TPLLIB ERROR 01: Ein Template ist nicht vorhanden! Das Template ('.$tplname.') konnte nicht gefunden werden.');
}
$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').''",$TPLLIB_TEMPLATES["$tplname"]);
}
function return_escape_template($int) {
if ($int == '\"') {
return '"';
} else {
return $int;
}
}
function call_outlook_eml($tplname) {
$tpl = call_template($tplname);
$emlmuster = array(
'/(.*)(Version[^0-9\.0-9])(.*)/si'
);
return preg_replace($emlmuster,'\\2\\3',$tpl);
}
Nun ist es eins oder ist es keins? Die Variablen schreibe ich einfach in die Templates rein, so wie wenn man es in PHP auch einschreiben würde.