frankx: Templateengine PHP MVC

Beitrag lesen

Hellihello

gibt es einen "gängigen" Weg bezüglich der Verarbeitung von Templates bei der Realisierung von MVC fragte ich mich. Nach kurzem Googlen (http://www.phpforum.de/forum/showthread.php?t=205289, http://de.wikipedia.org/wiki/Template_Engine) finde ich aber u.a. bei Wikipedia den Satz: "Aufgrund eines Missverständnisses werden viele Template Engines von Programmierern eingesetzt, um im Kontext von Web-Applikationen Programm-Code (einer Programmiersprache) vom Design zu trennen."

U.g. Beispiel ist aber gerade aus dem Bedürfnis enstanden, HTML-Code herzustellen, ohne

<?php echo Document::$title?>

oder Domfunktionen wie

$simple_xml->$title="mein Titel";

oder gar

  
foreach ($data as $datum)  
{  
  echo "<td>$datum</td>\n";  
}  

zu bemühen. Ist u.g. zielführend, verbesserungsfähig und/oder Geschmacksache?

  
Verwendung von Templateengine in PHP  
<?php  
ob_start()  
?>  
 <td>{name}</td><td>{contact}</td><td>{since}</td>  
<?php  
$template = ob_get_clean();  
  
class Small_Template_Handler  
{  
 private static $template = "";  
 private static $used_placeholders = array();  
 private static $data = array();  
 private static $output = "";  
  
 private function find_used_placeholders ()  
 {  
  $pattern = '/\{(.*?)\}/';  
  $subject = self::$template;  
  preg_match_all($pattern, $subject, $matches);  
  self::$used_placeholders = array_unique($matches[1]);  
 }  
  
 private function replace_placeholders ()  
 {  
  foreach (self::$used_placeholders as $placeholder)  
  {  
   if (isset(self::$data[$placeholder]))  
   {  
    $search="{".$placeholder."}";  
    $replacement = self::$data[$placeholder];  
    $subject = self::$output;  
    self::$output = str_replace($search, $replacement, $subject);  
   }  
  }  
 }  
  
 public static function handle ($template, $data)  
 {  
  self::$output = self::$template = $template;  
  self::$data = $data;  
  self::find_used_placeholders();  
  self::replace_placeholders ();  
  return self::$output;  
 }  
}  
$data["name"] = "Müller";  
$data["contact"] = "Telefon";  
$data["since"] = "1.1.1800";  
$output = Small_Template_Handler::handle($template, $data);  
var_dump($output);  
?>  

Das ganze müsste ja im zweiten Schritt noch irgendwie rekursiv aufgerufen werden können mit einem Template a la:

<!-- /DBLOCK --><td>{name}</td><td>{contact}</td><td>{since}</td><!-- DBLOCK/ -->

um Übersichten für Lists of Hashes herzustellen. Der Framesworks hierzu scheint es ja einige zu geben, eine Art "Standard" (a la CSV für ein Tabellenformat) aber scheints nicht, oder?

Dank und Gruß,

frankx

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