Smarty einrichten
Sunday, 23 December 2007
Für mein neues Projekt habe ich mich dazu entschlossen, Smarty zu benutzen.
Smarty ist – kurz gesagt – eine PHP-Klasse mit der man PHP-Code und HTML trennen kann.
Es ist grundsätzlich sinnvoll, die lib-Dateien nicht in das library-Verzeichnis von PHP zu kopieren, sondern sie in den Projektordner zu kopieren.
Gegeben ist der Projektordner “balduin” welcher folgende Ordnerstruktur bekommt:
/balduin/inc/ /balduin/lib/ /balduin/php/ /balduin/tpl/ /balduin/tpl_c/
In dem inc-Ordner kommen später Konfigurationsdateien rein, zum Beispiel die Zugangsdaten für die Datenbank.
In dem lib-Ordner kommen die Dateien rein, die im lib-Ordner von Smarty drin sind (siehe INSTALL).
Der php beinhaltet die php-Dateien. Er kann nach eigenem Gutdünken benannt werden.
Im tpl-Ordner sind die Templates (HTML) Dateien drin.
Ich habe im tpl- und im php-Ordner jeweils noch weitere Ordner erstellt, also in diesem Fall ein Ordner für die Startseite (namens “index”):
/balduin/php/index/ /balduin/tpl/index
Darin befindet sich eine index.php bzw. index.tpl.
index.php
<span style="color: #0000BB"><?php<br />$s</span><span style="color: #007700">-></span><span style="color: #0000BB">assign</span><span style="color: #007700">(</span><span style="color: #DD0000">"test"</span><span style="color: #007700">, </span><span style="color: #DD0000">"value"</span><span style="color: #007700">); </span><span style="color: #FF8000">// Deklarierung der Variable $test mit dem Wert "value"<br /></span><span style="color: #0000BB">$s</span><span style="color: #007700">-></span><span style="color: #0000BB">display</span><span style="color: #007700">(</span><span style="color: #DD0000">"index/index.tpl"</span><span style="color: #007700">); </span><span style="color: #FF8000">// Pfad zur dazugehoerigen Template-Datei<br /></span><span style="color: #0000BB">?></span>
</span>
Um die gerade deklarierte Variable auszugeben, reicht es, folgendes in die index.tpl zu schreiben:
{$test}
Aufgerufen wird alles über die index.php im Projektordner, welche folgenden Inhalt benötigt:
<span style="color: #0000BB"><?php<br /></span><span style="color: #FF8000">/** smarty */<br /></span><span style="color: #0000BB">$_application_path </span><span style="color: #007700">= </span><span style="color: #0000BB">getcwd</span><span style="color: #007700">();<br />require_once(</span><span style="color: #0000BB">$_application_path </span><span style="color: #007700">. </span><span style="color: #DD0000">"/lib/Smarty/Smarty.class.php"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$s </span><span style="color: #007700">= new </span><span style="color: #0000BB">Smarty</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$s</span><span style="color: #007700">-></span><span style="color: #0000BB">compile_check </span><span style="color: #007700">= </span><span style="color: #0000BB">true</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$s</span><span style="color: #007700">-></span><span style="color: #0000BB">debugging </span><span style="color: #007700">= </span><span style="color: #0000BB">false</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$s</span><span style="color: #007700">-></span><span style="color: #0000BB">caching </span><span style="color: #007700">= </span><span style="color: #0000BB">false</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$s</span><span style="color: #007700">-></span><span style="color: #0000BB">default_modifiers </span><span style="color: #007700">= array(</span><span style="color: #DD0000">'escape:"htmlall"'</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$s</span><span style="color: #007700">-></span><span style="color: #0000BB">template_dir </span><span style="color: #007700">= </span><span style="color: #0000BB">$_application_path</span><span style="color: #007700">.</span><span style="color: #DD0000">'/tpl'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$s</span><span style="color: #007700">-></span><span style="color: #0000BB">compile_dir </span><span style="color: #007700">= </span><span style="color: #0000BB">$_application_path</span><span style="color: #007700">.</span><span style="color: #DD0000">'/tpl_c'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$s</span><span style="color: #007700">-></span><span style="color: #0000BB">cache_dir </span><span style="color: #007700">= </span><span style="color: #0000BB">$_application_path</span><span style="color: #007700">.</span><span style="color: #DD0000">'/tpl_cache'</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$sites</span><span style="color: #007700">[</span><span style="color: #DD0000">"index"</span><span style="color: #007700">] = array(</span><span style="color: #DD0000">"Die Home Seite"</span><span style="color: #007700">, </span><span style="color: #DD0000">"php/index/index.php"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$sites</span><span style="color: #007700">[</span><span style="color: #DD0000">"test"</span><span style="color: #007700">] = array(</span><span style="color: #DD0000">"Die Test Seite"</span><span style="color: #007700">, </span><span style="color: #DD0000">"php/test/test.php"</span><span style="color: #007700">);<br /><br />if(</span><span style="color: #0000BB">array_key_exists</span><span style="color: #007700">(</span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">"s"</span><span style="color: #007700">], </span><span style="color: #0000BB">$sites</span><span style="color: #007700">)) {<br /> </span><span style="color: #0000BB">$include_file </span><span style="color: #007700">= </span><span style="color: #0000BB">$sites</span><span style="color: #007700">[</span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">"s"</span><span style="color: #007700">]][</span><span style="color: #0000BB">1</span><span style="color: #007700">];<br />} else {<br /> </span><span style="color: #0000BB">$include_file </span><span style="color: #007700">= </span><span style="color: #0000BB">$sites</span><span style="color: #007700">[</span><span style="color: #DD0000">"index"</span><span style="color: #007700">][</span><span style="color: #0000BB">1</span><span style="color: #007700">];<br />}<br /><br />include(</span><span style="color: #0000BB">$include_file</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">?></span>
</span>
In diesem Fall habe ich ausser der index- Datei noch eine test-Datei.
Über folgende URL kann man die Seiten aufrufen:
http://localhost/balduin/index.php?s=index
bzw
http://localhost/balduin/index.php?s=test