dedlfix: Pro/Contra Smarty

Beitrag lesen

Tach!

Wenn da eine Template-Engine zum Einsatz kommt, muss ein Frontend-Entwickler überhaupt kein PHP lernen, sondern nur die Template-Sprache (zusätzlich zu HTML, CSS und ggfs. JavaScript, versteht sich).

Man muss ja PHP nicht komplett lernen, um Templates damit schreiben zu können. Den Aufwand, die Template-Engine-Syntax zu lernen und die vergleichbaren PHP-Elemente, betrachte ich nicht als allzu unterschiedlich.

Zusammen mit den Kontrollstrukturen in alternativer Syntax(!) hat man dann genau die Mächtigkeit einer Template-Sprache.

Ob alternative Syntax oder Klammern sehe ich als eine Sache der persönlichen Vorliebe. Hat beides seine Vor- und Nachteile.

<ul>
<?php foreach ($results as $result): ?>
	<li><?= htmlspecialchars($result) ?></li>
<?php endforeach; ?>
</ul>

in Smarty:

<ul>
{foreach $results as $result}
	<li>{$result|escape}</li>
{/foreach}
</ul>

Und siehe da, so großartig unterscheidet sich PHP in diesem Beispiel nicht von Smarty.

Großer Pluspunkt für die Template-Sprache: der beschränkte Sprachumfang.

Der große Pluspunkt ist gleichzeitig auch ein großer Minuspunkt: die eingeschränkte Flexibilität, wenn man Lösungen abseits dessen braucht, was die Template-Engine mitbringt. Andererseits ist Smarty sehr mächtig und sein Sprachumfang nicht allzu eingeschränkt. Außerdem kann man Smarty mit Plugins erweitern und es damit noch weniger eingeschränkt machen.

Man kann nur das verwenden, was man an der Stelle (der Ausgabe) verwenden sollte.

Anders formuliert: man kann nur das verwenden, was die Template-Engine-Entwickler als das angesehen haben, was man braucht. (Generell gesprochen, Smarty als Ausnahme ist ja recht flexibel gestaltet.)

Bei PHP könnte man in Versuchung kommen, da Dinge zu tun, die nichts mit der Ausgabe zu tun haben.

Speziell mit Smarty kann man das auch. Die Sprache kennt Variablen, man kann rechnen, man hat Schleifen und if-else-Kontrollstrukturen. Selbst Funktionen kann man sich definieren. Man kann damit eine ganze Menge Aufgaben erledigen, die man besser vor dem Aufruf der Template-Engine erledigt.

Der Einsatz einer Template-Engine zwingt zu sauberer Programmierung.

Das sehe ich noch nicht so. Die grundlegende Philosophie ist zwar, dass man für das Template eine separate Datei anlegt und man vor dessen Aufruf erstmal alle Werte zusamengesammelt haben muss - also das gute alte EVA-Prinzip - aber Smarty bietet auch an, Strings als Tempate-Quelle zu verarbeiten, und es hindert mich auch nicht daran, mitten im V-Teil mal eben schnell ein Template ausgeben zu lassen und dann mit der Verarbeitung der Daten fortzufahren. Die Disziplin muss schon von einem selbst kommen.

dedlfix.