frankx: Templateengine PHP MVC

Beitrag lesen

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ß,

frankx

--
tryin to multitain  - Globus = Planet != Welt