Tach!
das ist sicherlich ein Punkt, der zu beachten ist. Allerdings sollte man vielleicht nicht jeden Deppen ans System lassen und zweitens entsprechende Template-Variablen zur Verfügung stellen, die er nur noch per echo auszugeben hat. Alle Logik passiert sowieso nicht im Template (wobei wir wieder bei strikter Trennung von Ausgabe und Logik wären, ich weiß, ich weiß).
Das würde ich nicht als allgemeine Regel propagieren. Es gibt Logik, die für den eigentlich zu lösenden Anwendungsfall benötigt wird, die Geschäftslogik. Und es gibt Logik, die für die Ausgabe benötigt wird. Als Beispiel sei die Frage genommen, ob es Fehlermeldungen auszugeben gibt oder nicht. Die Antwort darauf führt zu unterschiedlichem HTML. Ohne Meldungen braucht es gar nichts, mit Meldungen braucht es einen Block mit Überschrift und einer Liste mit den Meldungstexten - oder irgendetwas ähnliches. Wenn du die Logik aus den Templates raushalten willst, muss du selbst das entsprechende HTML schreiben, es in eine Variable packen, die dann nur noch auszugeben ist. Ohne Fehler ist sie ein Leerstring, mit Fehlern das HTML. Und das darf dann auch nicht noch einmal vom Template maskiert werden. Du musst also schon in der dem Template vorgeschalteten Ausgabelogik wissen, was der Ausgabekontext ist, um korrekten Code zu liefern. Zudem kann nun der Designer nichts mehr an dem Code designen.
Eine Alternative dazu ist, einige Logik-Elemente (in dem Fall if und for(each)) in die Template-Sprache aufzunehmen. Das aber widerspräche dem strikten Trennungsprinzip. Noch eine Möglichkeit wäre, ein System mit Blöcken zu verwenden, deren Anzeige von der vorgelagerten Logik gesteuert wird. Man muss dann aber als Programmierer gegebenenfalls enger mit dem Designer zusammenarbeiten, weil der ja die Schachtlung von Blöcken ändern kann und dann eventuelle Änderungen an der Logik zu vollziehen sind. Wenn die Logik in der Template-Syntax selbst verankert ist (und der Designer sie anzuwenden versteht), dann kann er selbst die zu seinen Änderungen passende Logik nachziehen, und man muss als Programmierer nur die Rohdaten zur Verfügung stellen.
Zusammengefasst: Eine Trennung nach Ausgabe und Logik halte ich nicht für erstrebenswert, wohl aber eine Trennung nach Geschäftslogik und Ausgabelogik.
dedlfix.