Willkommen in der Webstatt Zum Webstatt Blog und Stories
trefixxx am 04.03.07 08: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?

netcup.de Warum gibt es hier Werbung?
Rebel4s Rebel4s am 04.03.07 08: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/") {
$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.") 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.") 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="") {
$this->templatevars["{var_".$key."}"] = $value;
}

/* Bit Variablen in Variablen für Template (Bei Schleifen) */
function set_bit($key, $value="") {
$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;
}


}
?>

trefixxx am 04.03.07 22:26

kannst du mir dazu noch ne kleine einleitung geben?

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

mab mab am 04.03.07 23: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

Michael Michael am 07.03.07 15: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

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt