dedlfix: Templateengine PHP MVC

Beitrag lesen

echo $begrüßung;

Mit denen [HTML_Template_IT, HTML_Template_Sigma] 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.

Du bist noch nicht beim MVC angekommen. Die View kümmert sich um sämtliche Ausgabelogik-Dinge. Du betrachtest, so scheint es mir, nur ein Template. Die Entscheidungen, was ausgegeben werden muss, und die Wiederholungen bei Massendaten, willst du möglicherweise dem Controller-Teil aufhalsen.

Hier mal ein Beispiel für ein kleines Projekt. MVC ist dabei übertrieben und kommt auch eher aus der Desktop-Programm-Welt. So ein Webseiten-Request läuft doch mehr gradlinig durch, eher nach dem guten, alten EVA-Prinzip. Bei der Verarbeitung seien die beiden Arrays $errors und $data entstanden. Beide können leer oder gefüllt sein. Bei $errors ist der Fall klar. Wenn $errors leer ist und $data ebenfalls, ergab die Abfrage einfach nur eine leere Menge. Der folgende Teil wird vom Controller-Teil des Scripts inkludiert, nachdem die Daten ermittelt wurden. Da das Projekt überschaubar klein ist, sind die Variablen einfach global angelegt.

<html>  
<head><title>Beispiel</title></head>  
<body>  
  <div>Navigation usw.</div>  
  
<?php if ($errors): ?>  
  
  <div>Es sind Fehler aufgetreten:  
    <ul class="errors">  
      <?php foreach ($errors as $error): ?>  
        <li><?php echo htmlspecialchars($error) ?></li>  
      <?php endforeach; ?>  
    </ul>  
  </div>  
  
<?php else: ?>  
  
  <?php if ($data): ?>  
  
    <table>  
      <tr>  
        <th>Überschrift</th>  
        <th>Überschrift</th>  
      </tr>  
      <?php foreach ($data as $record): ?>  
        <tr>  
          <td><?php echo htmlspecialchars($record[0]) ?></td>  
          <td><?php echo htmlspecialchars($record[1]) ?></td>  
        </tr>  
      <?php endforeach; ?>  
    </table>  
  
  <?php else: ?>  
  
    <div>Die Anfrage brachte kein Ergebnis.</div>  
  
  <?php endif; ?>  
  
<?php endif; ?>  
</body>  
</html>

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.

Das würde ich nicht wollen. Das bedeutet, dass der Ausgabeteil noch deutlich mehr vom Rest wissen muss als nur die auszugebenden Daten und ihre Struktur. Namen von Bezeichnern des Programms sind für mich allenfalls für das Debugging interessant.

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?

Auf die einfachste Art, die dem Projektumfang angemessen ist. Je komplexer eine Lösung ist, desto fehleranfälliger wird sie.

Mit echo "<h1>Klasse: $class_name</h1>\n";? Oder per include <h1>Klasse: <?php echo $class_name;?></h1>?

Die erste Variante ist einfach nur ein String. Die zweite kann vom Editor oder der IDE als HTML-Code angesehen und auch so formatiert und schnelltippunterstützt werden.

Oder die Daten in xml umwandeln und dann per XSL transformieren?

Das käme dann infrage, wenn irgendjemand anderes für die Darstellung verantwortlich wäre, und der Umweg über XML sinnvoll ist.

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?

Alles was nicht nach HTML/XML aussieht, zähle ich mal in die Eigenes-Süppchen-Gruppe. Zeichen, die in HTML/XML keine Bedeutung haben, wie {} und [] oder $ oder # als Unklammerung oder Einleiter von besonders zu bearbeitenden Dingen. Zu den HTML/XML-ähnlichen, die eigene Elemente verwenden oder Attribute in die Elemente einfügen, zählt beispielsweise PHPTAL.

echo "$verabschiedung $name";