<?php
class Template
{
private $templateDir = "";
private $languageDir = "";
//Platzhalter.
private $leftDelimiter = '{';
private $rightDelimiter = '}';
//Standard-Platzhalter.
private $leftDelimiterV = '{$';
private $rightDelimiterV = '}';
//Der linke Delimter für eine Funktion.
private $leftDelimiterF = '{';
private $rightDelimiterF = '}';
//Der linke Delimter für ein Kommentar.
private $leftDelimiterC = '\{\*';
private $rightDelimiterC = '\*\}';
//Der linke Delimter für eine Sprachvariable
private $leftDelimiterL = '\{L_';
private $rightDelimiterL = '\}';
//Der komplette Pfad der Templatedatei.
private $templateFile = "";
private $languageFile = "";
//Der Dateiname der Templatedatei.
private $templateName = "";
//Der Inhalt des Templates.
private $template = "";
//Die Pfade festlegen.
public function __construct($tpl_dir = "", $lang_dir = "") {
// Template Ordner
if ( !empty($tpl_dir) ) {
$this->templateDir = $tpl_dir;
}
// Sprachdatei Ordner
if ( !empty($lang_dir) ) {
$this->languageDir = $lang_dir;
}
}
//Eine Templatedatei öffnen.
public function load($file) {
// Eigenschaften zuweisen
$this->templateName = $file;
$this->templateFile = $this->templateDir.$file;
// Wenn ein Dateiname übergeben wurde, versuchen, die Datei zu öffnen
if( !empty($this->templateFile) ) {
if( file_exists($this->templateFile) ) {
$this->template = file_get_contents($this->templateFile);
} else {
return false;
}
} else {
return false;
}
// Funktionen parsen
if (!empty($this->template))
$this->parseFunctions();
}
//Einen Standard-Platzhalter ersetzen.
public function assign($replace, $replacement) {
if (!empty($this->template))
$this->template = @str_replace( $this->leftDelimiterV.$replace.$this->rightDelimiterV,$replacement, $this->template );
}
//Die Sprachdateien öffnen und Sprachvariablem im Template ersetzen.
public function loadLanguage($files) {
$this->languageFiles = $files;
// Versuchen, alle Sprachdateien einzubinden
for( $i = 0; $i < count( $this->languageFiles ); $i++ ) {
if ( !file_exists( $this->languageDir .$this->languageFiles[$i] ) ) {
return false;
} else {
include_once( $this->languageDir .$this->languageFiles[$i] );
// Jetzt steht das Array $lang zur Verfügung
}
}
// Die Sprachvariablen mit dem Text ersetzen
if (!empty($this->template) and isset($lang))
$this->replaceLangVars($lang);
// $lang zurückgeben, damit $lang auch im PHP-Code verwendet werden kann
if (isset($lang))
return $lang;
}
//Die Sprachvariablem im Template ersetzen.
public function setLanguage($lang) {
// Die Sprachvariablen mit dem Text ersetzen
if (!empty($this->template) and isset($lang))
$this->replaceLangVars($lang);
// $lang zurückgeben, damit $lang auch im PHP-Code verwendet werden kann
if (isset($lang))
return $lang;
}
//Sprachvariablen im Template ersetzen.
private function replaceLangVars($lang) {
if (!empty($this->template) and isset($lang) and is_array($lang))
$this->template = @preg_replace("/\{L_(.*)\}/isUe", "\$lang[strtolower('\\1')]", $this->template);
}
//Includes parsen und Kommentare aus dem Template entfernen.
private function parseFunctions() {
if (!empty($this->template)){
// Includes ersetzen ( {include file="..."} )
while( @preg_match( "/" .$this->leftDelimiterF ."include file=\"(.*)\.(.*)\"".$this->rightDelimiterF ."/isUe", $this->template) ){
$this->template = @preg_replace( "/" .$this->leftDelimiterF ."include file=\"(.*)\.(.*)\"".$this->rightDelimiterF."/isUe","file_get_contents(\$this->templateDir.'\\1'.'.'.'\\2')",$this->template );
}
// Includes ersetzen ( {include file="..."} )
//while( @preg_match( "/" .$this->leftDelimiterF ."include file=\"(.*)\.(.*)\"".$this->rightDelimiterF ."/isUe", $this->template) ){
// $this->template = @preg_replace( "/" .$this->leftDelimiterF ."include file=\"(.*)\.(.*)\"".$this->rightDelimiterF."/isUe","file_get_contents(\$this->templateDir.'\\1'.'.'.'\\2')",$this->template );
//}
// Kommentare löschen
$this->template = @preg_replace( "/" .$this->leftDelimiterC ."(.*)" .$this->rightDelimiterC ."/isUe","", $this->template );
}
}
//Alle Platzhalter ersetzen.
private function clear() {
if (!empty($this->template))
$this->template = @preg_replace( "/" .$this->leftDelimiter ."(.*)" .$this->rightDelimiter ."/isUe","", $this->template );
}
//Das "fertige Template" ausgeben.
public function display($clear=False) {
if ($clear == True)
$this->clear();
echo $this->template;
}
//Das "fertige Template" ausgeben.
public function _Return($clear=False) {
if ($clear == True)
$this->clear();
return $this->template;
}
}
?>