13 Zeilen PHP-Code kommen natürlich nie an Giganten wie Smarty heran, aber ich bin ja immer für einfache und flexible Lösungen und das ist diese Template-Engine sicher.
Die Funktion
<?php
/**
* Render template files
*
* @param string $template
* Name of the template file
* @param array $variables
* Array of alle variables to set availalbe in the template.
* Key = name; Value = content
* @copyright
* Michael Bertsch (www.michaelbertsch.eu)
*/
function render($template, $variables = array()) {
if(file_exists('templates/'. $template .'.tpl.php')) {
// Set variables available
if(count($variables)) {
extract($variables, EXTR_SKIP);
}
// Start output buffering
ob_start();
include 'templates/'. $template .'.tpl.php';
$contents = ob_get_contents();
ob_end_clean();
return $contents;
}
}
?>
Die Funktion setzt einen Ordner "templates" voraus, in dem alle Template-Dateien mit der Endung ".tpl.php" abgelegt sind. Also z.B. templates/blog.tpl.php.
Wenn das Template nun existiert werden die Variablen "entpackt", das Template geladen und per output buffering als string zurück gegeben.
Ein Beispiel
Vorab: <?= $var ?> ist nur ein anderer/kürzerer Syntax für <? echo $var ?>.
Das Template sieht folgendermaßen aus:
<h3><?= $title ?></h3>
<div><?= $content ?></div>
Und gerendert wird das dann so:
<?php
$content = render('test', array(
'title' => 'hello world!',
'content' => 'Lorem ipsum dolor sit amet...')
);
?>
Mit statischem Text macht das ganze natürlich nur wenig Sinn.
Beispiel zum Download
Ich habe aus dem ganzen Code ein Beispielskript gebaut, welches die Anwendung (auch zusammen mit MySQL) klar machen soll:

Daniel am 05. Juni 2007, 17:54 Uhr
Das deine Engine nicht in Smarty herankommen kann stimmt zwar, dennoch kann ich vieles was mit Smarty möglich ist auch in deiner Engine machen. Für Schleifen, Abfragen (if) etc. kann ich ja ganz einfach die PHP-Funktionen verwenden :)
Was ich aber eigentlich sagen wollte: Tolles Script ;)