Die Vorteile des Smarty-Syntax
Smarty wird seit Beginn der CMS/ms-Entwicklung als Template-Engine verwendet. Jedoch liest man immer wieder Meinungen, die sich mit den unterschiedlichsten Argumenten (die allerdings nicht Gegenstand dieser Seite sein sollen) gegen die Verwendung von Smarty aussprechen. Lassen wir dazu einfach den Programmierer von Smarty Monte Orth zu Wort kommen, der sich dazu im Smarty-Forum zu den Vorteilen des Smarty-Syntax aus seiner Sicht geäußert hat - hier eine freie deutsche Übersetzung:
Über die Jahre haben mir die Entwickler einige Fragen über Smarty gestellt. Eine der häufigsten ist wohl folgende: Warum sollte ich noch eine Code-Ebene über PHP legen, wo doch PHP bereits selbst eine Template-Sprache ist?
Um es frei heraus zu sagen, PHP hat einen häßlichen Template-Syntax. Es funktioniert perfekt für die "geschäftliche" Seite des Codes, aber auf der Präsentationsseite benötigt es eine bessere Lösung. Beginnen wir mit einem einfachen Vergleich:
PHP:
<?=$foo?>
Smarty:
{$foo}
Da gibt es keinen großen Unterschied. Wie Sie jedoch feststellen können, benötigt PHP 5 "Sonderzeichen", um eine Variable anzuzeigen (<?=?>), währenddessen Smarty nur 2 benötigt: {}. An diesem kurzen Beispiel lässt sich der Vorteil noch nicht so gut erkennen. Versuchen wir, auf ein Array zuzugreifen:
PHP:
<?=$foo['bar']?>
Smarty:
{$foo.bar}
PHP benötigt 9 Sonderzeichen, Smarty nur 3. Und wie sieht es mit der Öffnung einer einfachen foreach-Schleife aus:
PHP:
<?php foreach($foo as $bar): ?>
Smarty:
{foreach $foo as $bar}
PHP benötigt 10 Sonderzeichen, Smarty nur 2. Versuchen wir es nun mit einem Beispiel aus der Praxis und mischen das Ganze mit ein paar HTML-Tags:
PHP:
<?php if(!empty($foo)): ?>
<?php foreach($foo as $bar): ?>
<a href="<?=$bar['zig']?>"><?=$bar['zag']?></a>
<a href="<?=$bar['zig2']?>"><?=$bar['zag2']?></a>
<a href="<?=$bar['zig3']?>"><?=$bar['zag3']?></a>
<?php endforeach; ?>
<?php else: ?> Es wurden keine Zeilen gefunden.
<?php endif; ?>
Smarty:
{foreach $foo as $bar}
<a href="{$bar.zig}">{$bar.zag}</a>
<a href="{$bar.zig2}">{$bar.zag2}</a>
<a href="{$bar.zig3}">{$bar.zag3}</a>
{foreachelse} Es wurden keine Zeilen gefunden.
{/foreach}
In diesem kurzen Beispiel hat Smarty 110 Zeichen und damit 36% weniger benötigt. Wenn der Server keine kurzen PHP-Tags erlaubt, wird der Unterschied noch viel deutlicher:
PHP:
<?php echo $foo; ?>
Smarty:
{$foo}
Hier werden 13 Zeichen und damit 69% gespart, um das gleiche Ergebnis anzuzeigen! Sehen wir uns das ganze gemischt mit etwas HTML an:
PHP:
<a href="<?php echo $bar['zig']; ?>"><?php echo $bar['zag']; ?></a>
<a href="<?php echo $bar['zig2']; ?>"><?php echo $bar['zag2']; ?></a>
<a href="<?php echo $bar['zig3']; ?>"><?php echo $bar['zag3']; ?></a>
Smarty:
<a href="{$bar.zig}">{$bar.zag}</a>
<a href="{$bar.zig2}">{$bar.zag2}</a>
<a href="{$bar.zig3}">{$bar.zag3}</a>
Der Smarty-Syntax ist viel sauberer und einfacher nachvollziehbar. Außerdem spielt hier noch ein anderes Thema mit hinein: PHP verwendet einen Syntax, der dem HTML-Snytax ähnlich ist. Diese vermischen sich fast zu gut und es ist schwierig, beide auseinanderzuhalten. Der kurze Smarty-Syntax dagegen ist wesentlich angenehmer zu lesen (im Gegensatz zu HTML). Für einen Designer ist dies der Schlüssel für eine einfache Template-Pflege und schnelle Änderungen. Und dessen Arbeitgeber profitiert von höherer Effizienz und glücklicheren Mitarbeitern. (Wenn Sie einen Mitarbeiter wirklich zur Resignation bringen wollen, lassen Sie ihn für eine Weile einige XML/XSLT-basierte Templates pflegen. XSLT ist perfekt für Computer, aber ein Horror für Menschen.)
Ein weiterer wichtiger Punkt, der für den Smarty-Syntax spricht, ist die Template-Sicherheit. Lassen Sie mich dies anhand einer Analogie verdeutlichen. Auf dem Tisch liegt ein Brot. Welches Werkzeug werden Sie verwenden, um davon eine Scheibe abzuschneiden: ein Brotmesser oder eine Kettensäge? Mit dem Brotmesser können Sie sauber und mit geringem Aufwand eine Scheibe davon abschneiden. Auch mit der Kettensäge wird es funktionieren, aber Sie müssen dabei extrem vorsichtig sein. Sie müssen aufpassen, nicht das ganze Brot zu zerfetzen, oder in den Tisch oder schlimmstenfalls in Ihr Bein zu sägen.
Der Vorteil des Smarty-Syntax ist nun, dass sich die Template-Logik auf das beschränkt, was sie tun soll und nicht mehr. Präsentationsseitig mit allen Möglichkeiten von PHP zu arbeiten ist wie das Brotschneiden mit der Kettensäge: der HTML-Programmierer kann in den Templates einige sehr gefährliche Fehler machen (entweder versehentlich oder absichtlich).
Sie werden bemerkt haben, dass der foreach-Syntax nicht der von Smarty 2 ist. Dies ist der kommende (einfachere) Syntax von Smarty 3. Sie werden nun vielleicht denken, ja, {} ist zwar nicht wie HTML, dafür aber wie JavaScript/CSS, so dass die Problematik der Maskierung auch weiterhin vorhanden ist. Sie werden daher erfreut sein, dass JavaScript/CSS in Smarty 3 nicht maskiert werden muss - es müssen lediglich 2 zusätzliche Leerzeichen nach bzw. vor dem Delimiter eingefügt werden (also nur noch { javascript/css } anstatt {literal}javascript/css{/literal}).
© Copyright 2006-2024 by Andreas Just