frankx: Templateengine PHP MVC

Beitrag lesen

Hellihello dedlfix,

Es gibt zwei Logik-Bereiche (die uns an der Stelle interessieren). Der eine beschäftigt sich mit der Besorgung oder Berechnung von Daten,

Das wäre das Model.

der andere mit der Logik, die zur Ausgabe benötigt wird. Die Ausgabe der in Teil 1, der Geschäftslogik, bereitgestellten Datensätze in einer Schleife ist Ausgabelogik, ebenso die Entscheidung, ob Fehlermeldung, Trösttext oder gar nichts angezeigt werden soll, wenn keine Daten vorliegen.

Die View.

Gibt es Datensätze aus einer Abfrage, oder gibt es keine?
Soll bei einer leeren Menge eine entsprechende Meldung angezeigt werden, oder war etwa ein Fehler aufgetreten, über den berichtet werden soll?

Das waren Fragen, wie sie von der Ausgabelogik zu klären sind. Du solltest sie nicht beantworten. :-)

Naja, wenn meine Ausgabe(logik) so schlau wäre, das von allein zu entscheiden (;-).

Es braucht also vier Definitionen: öffnender und schließender Begrenzer für die Spalten/Variablennamen und selbiges für einen dynamischen Block.

Da brauchst du das Fahrrad nicht nochmal zu erfinden. Es gibt da aus PEAR die schon erwähnte HTML_Template_IT und eine erweiterte Variante HTML_Template_Sigma.

Merci. HTML_Template_IT macht es ja genau so, nur dass sie dem dynamischen Block noch einen individuellen Namen verpassen.

  
<!-- BEGIN cell -->  
   <td>  
    {DATA}  
   </td>  
<!-- END cell -->  

Mit denen hatte ich auch mal angefangen, bevor ich mich vom Gedanken, PHP und HTML ungeachtet der logischen Verarbeitungsschritte strikt trennen zu wollen, verabschiedet hatte.

Das würde mich jetzt interessieren, was das genau bedeutet, weil es ja sein könnte, dass ich dann den selben Prozess auch durchmache.
Ich möchte beispielsweise - in einer aktuellen Test-/Entwicklungsphase -, dass die aufgerufene Methode einer Klasse nicht nur ein Ergebnis mit Datensätzen zurückgibt, sondern noch den Klassennamen, Methodennamen und einen individuellen Kommentar. Ich lasse sie diese vier Infos an eine Methode einer Unter-Klasse der View übergeben, mit eben den vier genannten Parametern $Messageboard::function_feedback(get_class(),__FUNCTION__,$bezeichner,$data).

Jetzt will ich, dass der Klassenname als "h2" "getagged" wird, vielleicht noch einen Präfix bekommt wie "Klasse: ", analog dann Methode und den kurzen Satz, dannach Tabellisiert das Datenarray.

Wie würdest Du das machen? Mit echo "<h1>Klasse: $class_name</h1>\n";? Oder per include <h1>Klasse: [code lang=php]<?php echo $class_name;?></h1>[/code]? Oder die Daten in xml umwandeln und dann per XSL transformieren? Ich denke, Du hast Dich scheinbar mit Dir selbst auf eine gängige Lösung geeinigt und nutzt die dann auch konsequent in allen Bereichen, wo das nötig ist.

Bei mir schaut das momentan so aus:

  
class Messageboard  
{  
 public static $Ausgabe="";  
  
 public static function function_feedback ($class_name, $function_name, $message="no message",$to_Tabelize="no table")  
 {  
  self::$Ausgabe .= '<hr><div class="kontrollmeldung">';  
  self::$Ausgabe .= "<h2>Kontrollmeldung: $class_name :: $function_name</h2>";  
  self::$Ausgabe .= "<h3>Nachricht: $message</h3>";  
  
  if (count($to_Tabelize))  
  {  
   self::$Ausgabe .=  "<h3>Tabelle:</h3>";  
   self::$Ausgabe .= Tabelizer::simple_array($to_Tabelize);  
  }  
  else  
  {  
   self::$Ausgabe .="<p>keine Tabelle übergeben</p>";  
  }  
  self::$Ausgabe .= '<hr></div>';  
 }  
  
 public static function Systemfehler ($class_name, $function_name, $message)  
 {  
  self::$Ausgabe .=  "<h2>Fehlermeldung von: $class_name :: $function_name </h2>";  
  self::$Ausgabe .=  "<p>$message</p>";  
 }  
}//class Messageboard  
  

Aus meiner Sicht ist bei obigem Zustand die Frage nach der Ausgabelogik jetzt "Finetuning", vermutlich sind da aber andere Aspekte noch recht "roh". Es ist ja funktional, Frage halt, ob das vom Handling her bzw. der Übersicht her noch optimierungsfähig ist (zB durch Templates).

Naja, ich hatte gedacht, dass man sich vielleicht auf Begrenzer für Templates "geeinigt" hätte wie beim CSV auf das Komma, die doppelten Hochkommas und den einfachen Absatz. Aber so richtig durchgesetzt hat sich da ja auch nischt. Möglich ja auch was wie <span class="placeholder">name</span>.

Es gliedert sich wohl grob gesehen in zwei Gruppen. Die eine macht es XML/SGML/HTML-ähnlich, mit dem Vorteil eventuelle Editoren und deren Syntax-Unterstützung nutzen zu können, die andere kocht ein eigenes Süppchen.

Mit eigenem Süppchen meinst Du zB die HTML_Template_IT mit den curly braces? Wo aber findet sich HTML-ähnliches (zB. bei PEAR oder ZEND?)? Oder sind dass dann Template-Engines für andere Sprachen?

Dank und Gruß,

frankx

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