Morgen!
Wie gesagt habe ich mir nochmal in Ruhe meine alte
TemplateEngine angesehen und einige
"Mängel" behoben. Das ganze ist nun, meiner Meinung nach, deutlich übersichtlicher und funktionaler. Unnötiger SchnickSchnack wurde von mir entfernt. Wie immer habe ich versucht meinen Quellcode so verständlich wie nur irgendwie möglich zu dokumentieren.
Die Optionen der alten Klasse Kommentar in das Template einzufügen, habe ich rausgenommen, weil man in HTML selbst dokumentieren kann und das sollte, finde ich, reichen.
Die Möglichkeit zu Includen habe ich deswegen gestrichen, da man das besser und flexibler selbst lösen kann. Einfach mit der
parse()-Methode eine Datei aufrufen und den von dieser erzeugten HTML-Code in einer Variabel abspeichern und dann via
assign() einen Platzhalter zuweisen. Sehe gehe ich auch sicher, dass logische Strukturen, wie Schleifen oder Bedingungen, nicht in der Template-Datei zu finden sind.
Das direkte Ausgeben des Templates via
out() wurde auch geändert. An dieser Stelle steht nun die Methode
getTpl(). Diese liefert den HTML-Code des Templates zurück. Wieso nicht gleich ausgeben? Manchmal möchte man ja Templates verschachteln und das wird dadurch möglich. Ruft man nun zwei Templates in zwei verschiedenen
Instanzen der Klasse
TemplateEngine auf und füllt diese mit Daten, kann man den HTML-Code des einen Templates in einer Variabel speichern und diesen teil via
assign() in das andere Template einfügen. So kann man zum Beispiel meinen geliebten Boxen in der Sidebar ein eigenes Template erstellen und sie dennoch ganz einfach und komfortabel in die Website integrieren.
Ich wäre euch sehr dankbar für eure Meinungen, Anregungen und Hinweise.
MfG, Andy
TemplateEngine.php- Code: Alles auswählen
<?php
error_reporting(E_ALL);
/***
* Template class allows filling templates with life
*
* @package TemplateEngine
* @version 0.7
* @author Andreas Wilhelm <Andreas2209@web.de>
* @copyright Andreas Wilhelm
**/
class TemplateEngine
{
/* the template itself */
protected $template;
/**
* Cunstructor - Loads template file from $path
*
* @access public
* @param Str $path
* @return boolean
*/
public function __construct($path = '')
{
if ($tpl = file_get_contents($path))
{
$this->template = $tpl;
return $tpl;
}
else
{
throw new Exception("Failed to open $path.");
}
}
/**
* assign() - Replaces the placeholders with the intended content
*
* @access public
* @param Str $placeholder
* @param Str $replacement
* @return String
*/
public function assign($placeholder, $replacement)
{
$this->template = str_replace('{$'.$placeholder.'}', $replacement, $this->template);
return $this->template;
}
/**
* parse() - Parses a file and saves it to a string
*
* @access public
* @param Str $path
* @return String
*/
public function parse($path)
{
ob_start();
include($path);
$parsed = ob_get_contents();
ob_end_clean();
return $parsed;
}
/**
* getTpl() - Returns the parsed template
*
* @access public
* @return String
*/
public function getTpl()
{
return $this->template;
}
}
?>