Hellihello Vinzenz,
merci.
warum findet sich Deine Klasse mitten im restlichen PHP-Code wieder?
Warum verwendest Du Output-Buffering? Was versprichst Du Dir davon?
Oh sorry, nur für den Einstieg. Jetzt schaut es so aus:
File: "test_STE.php"
<?php
include("Small_Template_Handler.php");
$template = file_get_contents("test.template.html");
$data["name"] = "Müller";
$data["contact"] = "Telefon";
$data["since"] = "1.1.1800";
$output = Small_Template_Handler::handle($template, $data);
var_dump($output);
?>
File "test.template.html"
<td>{name}</td><td>{contact}</td><td>{since}</td>
File "Small_Template_Handler.php"
<?php
// expects template as string and data as array
// finds used placeholders machting pattern "{placeholder}"
// replaces all found placeholders with values, if key exists in data-hash
class Small_Template_Handler
{
private static $template = ""; // template string given as parameter
private static $used_placeholders = array(); //list of all found placeholders
private static $data = array();//data-hash (associative array where keys match placholders name)
private static $output = ""; //replaced template
// finds used placeholders machting "{placeholder}"
// and stores them as array in class-variable $used_placeholders;
private function find_used_placeholders ()
{
$pattern = '/\{(.*?)\}/'; // pattern machting "{placeholder}"
$subject = self::$template;
preg_match_all($pattern, $subject, $matches);
self::$used_placeholders = array_unique($matches[1]);
}
// loops class-variable $used_placeholders
// and replaces all found placeholders with values, if key exists in data-hash
private function replace_placeholders ()
{
foreach (self::$used_placeholders as $placeholder) //all found placeholders
{
if (isset(self::$data[$placeholder])) //if key exists in data-hash replace placeholder by data-hash-value
{
$search="{".$placeholder."}";
$replacement = self::$data[$placeholder];
$subject = self::$output;
self::$output = str_replace($search, $replacement, $subject);
}
}
}
// callable function, sets class-vars to given parameters
// calls both necessary functions
// returns replaced template as string
public static function handle ($template, $data)
{
self::$output = self::$template = $template;
self::$data = $data;
self::find_used_placeholders();
self::replace_placeholders ();
return self::$output;
}
}
?>
Was hat Dein Beispielcode mit MVC zu tun?
Nun, eben, das ist ja die Frage. Offenbar ja doch nichts. In o.g. Link aus dem PHP-Forum gibt der Poster eigentlich das wieder, was ich jetzt auch erstmal gedacht hätte. Ob nun MVC oder nicht, ich such(t)e eine sinnvolle (die sinnvollste?) Trennung von HTML (=View) und PHP (=control).
Warum ist Dein Code nicht kommentiert?
Nun ist er. Ich hatte gehofft, er kommentiert sich durch die Wahl der Variablennamen und Funktionsnamen selbst (;-).
Verbesserungsvorschläge, von den wichtigsten zu den unwichtigeren:
Kommentiere Deinen Code.
Kommentiere Deinen Code.
Kommentiere Deinen Code.[... lange nichts besonders wichtiges ...]
geschehen (s.o.).
Lagere Klassen in eigene Dateien aus.
geschehen (s.o.).
Templates und Template-Snippets gehören in eigene Dateien.
geschehen (s.o.).
Verwende kein Output-Buffering, wenn Du es nicht brauchst.
geschehen (s.o.).
Dank und Gruß,