Blog

PHP/MySQL-Anwendungen: Ein Plädoyer für Smarty

Was sind nun die Vorteile? Schliesslich hat man ca. doppelt so viele Dateien zu bearbeiten, da Smarty php-Code und Templates getrennt verwaltet - aber genau das ist auch der Vorteil: Code/Logik und Präsentation werden weitestgehend getrennt. Die Mischung von HTML und PHP störte mich schon immer:

Ohne Smarty:

echo '<div id="artikelbox">'." ";
for($i = 0; $i <count($produkte); $i++) {
  echo '<div class="artikel">'." ";
  echo '<a href="detail.html?id='.$produkte[$i][id].'&amp;kat='.
$_GET['kat'].'"><img src="'.$produkte[$i][id].'.jpg" alt="'.$produkte[$i][name].'" /></a>'." ";
  $produktname = (strlen($produkte[$i][name]) > 40) ? substr($produkte[$i][name],0,40).'...' : $produkte[$i][name]; 
  echo '<p><a href="detail.html?id='.$produkte[$i][id].
'&amp;kat='.$_GET['kat'].'">'.$produktname."</a> vom '.date_mysql2german($produkte[$i][datum]).'</p> ";
  echo '</div>'." ";
}
echo '</div>'." ";

Mit Smarty:

<div id="artikelbox">
{foreach from=$alleProdukte item=einProdukt}
  <div class="artikel"><a
  href="detail.html?id={$einProdukt.id}&amp;kat={$smarty.get.kat}">
  <img src="{$einProdukt.id}.jpg" alt="{$einProdukt.name}" />
  <p><a href="detail.html?id={$einProdukt.id}&amp;kat={$smarty.get.kat}">
  {$einProdukt.name|truncate:40:"..."} vom
  {$einProdukt.datum|date_format:"%d.%m.%Y"}</p>
  </div>
{/foreach}
</div>

Die Variable $alleProdukte wird in der entspechenden php-Datei einfach aus der Datenbank befüllt. (Das "foreach" macht aus dieser Variable durch das item=einProdukt einfach $einProdukt, was jeweils einen Datensatz darstellt.)

Nun ist das Ganze sehr viel übersichtlicher. Auch kann das Design somit von Leuten geändert werden, die kaum PHP können und keine Angst haben zu brauchen, etwas kaputt zu machen. Ein weiterer Vorteil ist die Debugging Konsole: einfach {debug} ins Template schreiben und ab sofort erscheint ein Popup-Fenster, in dem alle verwendeten Variablen ausgegeben werden.

Es gibt sehr viele Plugins und Modifier für Smarty, so z.B. eine tolle Implementierung des besten DHTML-Kalenders oder SmartyValidate, das Formulare nach gegebenen Kriterien validiert (z.B. isNumber oder isEmail). Auch Ideen für i18n gibt es bereits. Derzeit bastle ich noch einer einfache(re)n Art, PDFs zu erzeugen, deren Design aus einem Smartytemplate kommt.

Software mit Smarty

Erst wenige Weblogsysteme laufen bisher unter Smarty: sunlog und bBlog. Demnächst wird auch ein Wiki mit Smarty auf den Markt kommen :) Weitere Projekte, die Smarty benutzen, finden sich auf Resources.

Wichtig ist, zu erkennen, wann man Smarty einsetzen kann (Wenn man einen Hammer hat, sieht alles wie ein Nagel aus ;-)): Bisher habe ich es nur bei Datenbankprojekten benutzt. Es ist sicher auch bei Flatfile-Projekten einsetzbar, allerdings werden sich die Anwendungsfälle dafür in Grenzen halten.

Ich habe den Artikel bewusst kurz gehalten - weitere Infos hinter den Links oder auf Nachfrage ;-)

24.11.04 | in

0 Kommentare bisher

Kommentare geschlossen.

|

Suche

Meta

RSS / Atom

Archiv

CC CreativeCommons

Ich lese:

uninformation.org, Gerrit, Jens, Oliver, jot-be, fukami und viele andere mehr...