Webstatt.org - Community seit 2006 - 2012 (2024?)

template engine

user-333
04.03.2007 07:06

Morgen zusammen,

ich hab mal einen kleinne diskussionsanstoss zum thema template engine.
ich bin naemlich momentan auf der suche nach einer, welche mir die moeglichkeit gibt, design und logik zu trennen (was natuerlich der hauptgrund hinter der ganzen sache ist).
Zudem moechte ich "variablenreplacement" ( z.B. {$variable} ) nutzen koennen. Wichtig sind auch arrays, welche ich per while schleife generiere, mit daten aus einer sql-db fuelle und dann in das template einbinden koennen (wozu ich wahrscheinlich loops brauche).

Smarty ist meines wissens einfach zu maechtig fuer diesen kleinen anwendungsbereich. Den ganzen cache-quatsch und schni-schna-schnacki brauch ich nicht.

Was kann man da so empfehlen?

Avatar user-287
04.03.2007 07:42

Hier meine:

<?php
class tpl {

var $templates = array();
var $templatevars = array();
var $templatebitvars = array();
var $templatefolder;
var $templatefile;


/* Klasse erstellen */
function tpl($templatefolder="templates/"zwinkern {
$this->templatefolder = $templatefolder;
}

/* template als Variable */
function get($templatename, $templatefile) {

$this->$templatefile = $this->templatefolder.$templatefile.".tpl";

if(file_exists($this->$templatefile)) {
$this->templates[$templatename]=implode("",file($this->$templatefile));
} else {
//Sucht Template im Standart-Template-Odner
$this->$templatefile = "templates/".$templatefile.".tpl";

if(file_exists($this->$templatefile)) {
$this->templates[$templatename]=implode("",file($this->$templatefile));
} else {
$this->templates[$templatename]="Template &quot;".$templatename."&quot; (".$this->$templatefile."zwinkern doesnt exist";
}
}

return $this->templates[$templatename];
}
/* template als Variable BIT */
function getbit($templatename, $templatefile) {

$this->$templatefile = $this->templatefolder.$templatefile.".tpl";

if(file_exists($this->$templatefile)) {
$this->templates[$templatename].=implode("",file($this->$templatefile));

//Variablen werden sofort ersetzt
reset ($this->templatebitvars);
while (list($key, $value) = each($this->templatebitvars)) {
$this->templates[$templatename] = str_replace($key ,$value, $this->templates[$templatename]);
}

} else {
//Sucht Template im Standart-Template-Odner
$this->$templatefile = "templates/".$templatefile.".tpl";

if(file_exists($this->$templatefile)) {
$this->templates[$templatename].=implode("",file($this->$templatefile));

//Variablen werden sofort ersetzt
reset ($this->templatebitvars);
while (list($key, $value) = each($this->templatebitvars)) {
$this->templates[$templatename] = str_replace($key ,$value, $this->templates[$templatename]);
}
} else {
$this->templates[$templatename]="Template &quot;".$templatename."&quot; (".$this->$templatefile."zwinkern doesnt exist";
}
}

return $this->templates[$templatename];
}

/* Gibt template aus */
function output($template) {
$template = $this->parse($template);
print($template);
}

/* Sprachvariablen in Variablen für Template */
function set_lang($key, $value) {
$this->templatevars["{lang_".strtolower($key)."}"] = $value;
}

/* Variablen in Variablen für Template */
function set_var($key, $value=""zwinkern {
$this->templatevars["{var_".$key."}"] = $value;
}

/* Bit Variablen in Variablen für Template (Bei Schleifen) */
function set_bit($key, $value=""zwinkern {
$this->templatebitvars["{bit_".$key."}"] = $value;
}

/* Array in Variablen für Template */
function set_vars($array) {
foreach($array as $key => $value) {
$this->templatevars["{var_".$key."}"] = $value;
}
}
/* Array in Array für Template */
function set_arr($arrayname, $array) {
foreach($array as $key => $value) {
if(is_array($value)) {
$arrayname .= ":".$key;
$this->set_arr($arrayname, $value);
} else {
$arrayname .= ":".$key;
$this->templatevars["{arr_".$arrayname."}"] = $value;
}
}
}

/* Template parsen */
function parse ($template) {

//Subtemplates parsen
reset ($this->templates);
while (list($key, $value) = each($this->templates)) {
$template = str_replace('{tpl_' . $key . '}',$value, $template);
}

//Varibalen parsen + Sprachvariablen parsen
reset ($this->templatevars);
while (list($key, $value) = each($this->templatevars)) {
$template = str_replace($key ,$value, $template);
}

// Fix for German "Umlaute"
$template = str_replace('ä', '&auml;', $template);
$template = str_replace('ö', '&ouml;', $template);
$template = str_replace('ü', '&uuml;', $template);
$template = str_replace('Ä', '&Auml;', $template);
$template = str_replace('Ö', '&Ouml;', $template);
$template = str_replace('Ü', '&Uuml;', $template);
$template = str_replace('ß', '&szlig;', $template);

//Sucht nicht verwendete tpl|lang|var|arr|bit Variablen und elemeniert sie
$suchmuster = "#{(tpl|lang|var|arr|bit)_(.*)}#U";
$template = preg_replace($suchmuster, '', $template);

return $template;
}


}
?>


user-333
04.03.2007 21:26

kannst du mir dazu noch ne kleine einleitung geben?

jegliche alternativen? hab gehoert vLib ist ziemlich gut...

Avatar user-236
04.03.2007 22:02

http://de.wikipedia.org/wiki/Template_Engine
--------------------------------------------------------

http://www.phpguru.org/static/template.html

http://www.thewebmasters.net/php/FastTemplate.phtml

http://phpsavant.com/yawiki/


übrigens... wenn du von caching quatsch sprichst. kommt natürlich auf den programmierstil an, aber du wirst vielleicht merken, dass auch schon bei kleinen seiten die geschwindigkeit in den keller geht

signature in progress
Avatar user-253
07.03.2007 14:54

Nur halb beim Thema: Ich nutze momentan XML und XSLT. Also die Anwendung baut die Daten in eine XML Datenstruktur und mit einem XSLT Stylesheet für die entsprechende Seite, wird es in Form gebracht. Wenn man die XSLT Stylesheets hierarchisch klappt das bestens. Das Parsen übernimmt PHP.

Die Vorteile:
- Datenstruktur ist portabel
- Die Templatesprache (XSLT) ist mächtig und schon implementiert
- Es ist zwingend eine umfassende Trenneun

Nachteile:
- Das Parsen mit PHP ist nicht das schnellste aber der Opera kann eben kein XSLT
- Man muss noch XSLT beherrschen