Hi,
ich bin grade dabei mir eine minimalistische Templateengine zu schreiben um Platzhalter durch Text und HTML snippets zu ersetzen. Jedoch hapert es am Ansatz.
Das Ganze wird zwar nicht all zu umfangreich, jedoch will ich das aus Lernzwecken mit OOP realisieren, da ich noch Anfänger in Sachen OOP bin. Für Hinweise was mein Stil angeht bin ich also auch offen
Folgende Klasse soll einen gegebenen Platzhalter durch einen gegebenen Block von HTML Code ersetzen:
Folgende Klasse erbt nun von ihr:
Der Aufruf erfolgt beispielsweise wie folgt:
Der Output jedoch enthält noch meine Platzhalter, es wurde also nichts ersetzt. Ich vermute den Fehler bei meiner RegEx, jedoch habe ich die schon erfolgreich getestet. Was mach ich falsch?
Danke für eure Hilfe
MFG
ich bin grade dabei mir eine minimalistische Templateengine zu schreiben um Platzhalter durch Text und HTML snippets zu ersetzen. Jedoch hapert es am Ansatz.
Das Ganze wird zwar nicht all zu umfangreich, jedoch will ich das aus Lernzwecken mit OOP realisieren, da ich noch Anfänger in Sachen OOP bin. Für Hinweise was mein Stil angeht bin ich also auch offen
Folgende Klasse soll einen gegebenen Platzhalter durch einen gegebenen Block von HTML Code ersetzen:
PHP:
abstract class HtmlTemplateEngine {
//Datei in welcher die Rohdaten mit den Platzhaltern stehen
private $templateFile;
//Dieser Konstruktor wird von der abgeleiteten Klasse aufgerufen
public function __construct($template) {
$this -> templateFile = file_get_contents($template);
if ($this -> templateFile == FALSE) {
printf("can't open template file %s", $template);
}
}
//Wird am ende aufgerufen um die bearbeiteten Daten zu erhalten
protected function getTemplateFile() {
return $this -> templateFile;
}
//Kernfunktion, ersetzt einen gegebenen Platzhalter
protected function addElement($placeholder, $element) {
$regex = '/[%]{2}'; //der Platzhalter in den Rohdaten beginnt mit %%
$regex .= $placeholder;
$regex .= '[%]{2}/'; //und endet mit %%
//ersetze %%PLATZHALTER%% mit $element
preg_replace($regex, $element, $this -> templateFile);
}
}
PHP:
class HtmlBasicFrame extends HtmlTemplateEngine {
//Enthält das Grundgerüst für die Seite
private $basicFrame = "include/template/basic.tpl";
private $documentTitle;
private $documentLanguage;
//Elemente der Tab Navigation
private $documentTabs = array();
//Container der Tab Navigation
private $documentTabContainer = array();
function __construct() {
parent::__construct($this->basicFrame);
}
private function addTab($name, $container) {
array_push($this->documentTabs, "<li><a href=#" . $container . ">" . $name . "</a></li>");
}
public function addTabContainer($name, $container) {
$this->addTab($name, $container);
array_push($this->documentTabContainer, $container);
}
public function addTitle($title) {
$this->documentTitle = $title;
}
//Füge Elemente in das Gerüst ein
public function render() {
$tmp = "";
parent::addElement("TITLE", $this->documentTitle);
foreach($this->documentTabs as $tab) {
$tmp .= $tab;
}
parent::addElement("TABS", $tmp);
$tmp = "";
foreach($this->documentTabContainer as $container) {
$tmp .= $container;
}
parent::addElement("TAB_CONTAINER", $tmp);
echo parent::getTemplateFile();
}
}
PHP:
$document = new HtmlBasicFrame();
$document->addTitle("Welcome, please login");
$document->addTabContainer("Login", "login-container");
$document-> render();
Danke für eure Hilfe
MFG