Basis Installation
Technische Bemerkung:
Dieser Leitfaden geht davon aus, dass Sie Ihr Webserver- und
PHP-Setup kennen und mit den Namenskonventionen für Dateien
und Verzeichnisse Ihres Betriebssystems vertraut sind. Im
Folgenden wird ein Unix-Dateisystem verwendet, stellen Sie also
sicher, dass sie die für Ihr Betriebssystem nötigen
Änderungen vornehmen.
Das Beispiel geht davon aus, dass '/php/includes' in Ihrem
PHP-'include_path' liegt. Konsultieren Sie das PHP-Manual
für weiterführende Informationen hierzu.
Installieren Sie als erstes die Smarty-Library Dateien (den
/libs/-Ordner der Smarty Distribution).
Diese Dateien sollten von Ihnen NICHT editiert und von allen Applikationen
verwendet werden. Sie werden nur erneuert, wenn Sie eine neue Version von
Smarty installieren.
In the examples below the Smarty tarball has been unpacked to:
Technische Bemerkung:
Wir empfehlen keine Änderungen an den Smarty-Library Dateien
vorzunehmen. Dies macht ein mögliches Upgrade wesentlich
einfacher. Sie müssen diese Dateien auch nicht anpassen, um
Smarty zu konfigurieren! Benutzen Sie für diesen Zwecke eine
Instanz der Smarty-Klasse.
Folgende Library Dateien werden mit Smarty geliefert und werden benötigt:
Beispiel 2-1. Benötigte Smarty-Library Dateien Smarty.class.php
Smarty_Compiler.class.php
Config_File.class.php
debug.tpl
/internals/*.php (alle)
/plugins/*.php (alle) |
|
Sie können diese Dateien entweder in Ihrem PHP-'include_path'
oder auch in irgend einem anderen Verzeichnis ablegen, solange die
Konstante SMARTY_DIR auf den korrekten
Pfad zeigt. Im Folgenden werden Beispiele für beide
Fälle aufgezeigt. SMARTY_DIR muss in jedem
Fall am Ende einen Slash ("/", unter Windows ggf. einen
Backslash "\") enthalten.
So erzeugt man eine Instanz der Smarty-Klasse im PHP-Skript:
Beispiel 2-2. Smarty Instanz erstellen:
<?php require('Smarty.class.php'); $smarty = new Smarty; ?>
|
|
Versuchen Sie das Skript auszuführen. Wenn Sie eine
Fehlermeldung erhalten dass Smarty.class.php
nicht gefunden werden konnte, versuchen Sie folgendes:
Beispiel 2-3. Manuelles setzen der SMARTY_DIR-Konstanten
<?php // *nix-Stil define('SMARTY_DIR', '/usr/local/lib/php/Smarty-v.e.r/libs/');
// Windows-Stil define('SMARTY_DIR', 'c:/webroot/libs/Smarty-v.e.r/libs/');
// Ein kleiner Hack der unter *nix und Windows funktioniert wenn Smarty // in einem Verzeichnis 'includes/' unterhalb des Beispielskriptes liegt define('SMARTY_DIR',str_replace("\\","/",getcwd()).'/includes/Smarty-v.e.r/libs/');
require_once(SMARTY_DIR . 'Smarty.class.php'); $smarty = new Smarty(); ?>
|
|
Beispiel 2-4. SMARTY_DIR manuell setzen
<?php define('SMARTY_DIR','/usr/local/lib/php/Smarty/'); require(SMARTY_DIR.'Smarty.class.php'); $smarty = new Smarty; ?>
|
|
Beispiel 2-5. Absoluter Pfad übergeben
<?php require('/usr/local/lib/php/Smarty/Smarty.class.php'); $smarty = new Smarty; ?>
|
|
Beispiel 2-6. Library Verzeichnis dem Include-Pfad hinzufügen
;;;;;;;;;;;;;;;;;;;;;;;;; ; Paths and Directories ; ;;;;;;;;;;;;;;;;;;;;;;;;;
; *nix: "/path1:/path2" include_path = ".:/usr/share/php:/usr/local/lib/Smarty-v.e.r/libs/"
; Windows: "\path1;\path2" include_path = ".;c:\php\includes;c:\webroot\libs\Smarty-v.e.r\libs\"
|
|
Beispiel 2-7. Library Verzeichnis dem Include-Pfad mit
ini_set() hinzufügen
<?php // *nix ini_set('include_path', ini_get('include_path').PATH_SEPARATOR.'/usr/local/lib/Smarty-v.e.r/libs/');
// windows ini_set('include_path', ini_get('include_path').PATH_SEPARATOR.'c:/webroot/lib/Smarty-v.e.r/libs/'); ?>
|
|
Jetzt, wo die Library Dateien an ihrem Platz sind, wird es Zeit,
die Smarty Verzeichnisse zu erstellen.
Für unser Beispiel werden wir die Smarty Umgebung für
eine Gästebuch-Applikation konfigurieren. Wir verwenden den
Applikationsnamen nur, um die Verzeichnis-Struktur zu
verdeutlichen. Sie können die selbe Umgebung für alle
Ihre Applikationen verwenden indem Sie 'guestbook' durch dem Namen
Ihrer Applikation ersetzen.
Stellen Sie sicher, dass Sie die DocumentRoot Ihres Webservers
kennen. In unserem Beispiel lautet sie
'/web/www.domain.com/docs/'.
Die Smarty Verzeichnisse werden in den Klassen-Variablen $template_dir, $compile_dir, $config_dir und $cache_dir definiert. Die
Standardwerte sind: templates, templates_c, configs und cache. Für unser Beispiel legen
wir alle diese Verzeichnisse unter /web/www.domain.com/smarty/guestbook/
an.
Technische Bemerkung:
Wir empfehlen, diese Verzeichnisse ausserhalb der DocumentRoot
anzulegen, um mögliche Direktzugriffe zu verhindern.
In Ihrer DocumentRoot muss mindestens eine Datei liegen, die
für Browser zugänglich ist. Wir nennen dieses Skript
index.php, und legen es in das Verzeichnis
/guestbook/ in unserer
DocumentRoot.
Technische Bemerkung:
Bequem ist es, den Webserver so zu konfigurieren, dass
index.php als Standard-Verzeichnis-Index
verwendet wird. Somit kann man das Skript direkt mit
'http://www.domain.com/guestbook/' aufrufen. Falls Sie Apache
verwenden, lässt sich dies konfigurieren indem Sie
index.php als letzten Eintrag für
DirectoryIndex verwenden. (Jeder Eintrag
muss mit einem Leerzeichen abgetrennt werden).
Die Dateistruktur bis jetzt:
Beispiel 2-8. Beispiel der Dateistruktur /usr/local/lib/php/Smarty/Smarty.class.php
/usr/local/lib/php/Smarty/Smarty_Compiler.class.php
/usr/local/lib/php/Smarty/Config_File.class.php
/usr/local/lib/php/Smarty/debug.tpl
/usr/local/lib/php/Smarty/plugins/*.php
/usr/local/lib/php/Smarty/core/*.php
/web/www.example.com/smarty/guestbook/templates/
/web/www.example.com/smarty/guestbook/templates_c/
/web/www.example.com/smarty/guestbook/configs/
/web/www.example.com/smarty/guestbook/cache/
/web/www.example.com/docs/guestbook/index.php |
|
Technische Bemerkung:
Falls Sie kein Caching und keine Konfigurationsdateien verwenden,
ist es nicht erforderlich die Verzeichnisse '$config_dir' und
'$cache_dir' zu erstellen. Es wird jedoch trotzdem empfohlen, da
diese Funktionalitäten eventuell später genutzt werden
sollen.
Smarty benötigt Schreibzugriff auf die Verzeichnisse $compile_dir und $cache_dir. Stellen Sie also
sicher, dass der Webserver-Benutzer (normalerweise Benutzer
'nobody' und Gruppe 'nogroup') in diese Verzeichnisse schreiben
kann. (In OS X lautet der Benutzer normalerweise 'www' und ist in
der Gruppe 'www'). Wenn Sie Apache verwenden, können Sie in
der httpd.conf (gewöhnlich in '/usr/local/apache/conf/')
nachsehen, unter welchem Benutzer Ihr Server läuft.
Beispiel 2-9. Dateirechte einrichten chown nobody:nobody /web/www.example.com/smarty/guestbook/templates_c/
chmod 770 /web/www.example.com/smarty/guestbook/templates_c/
chown nobody:nobody /web/www.example.com/smarty/guestbook/cache/
chmod 770 /web/www.example.com/smarty/guestbook/cache/ |
|
Technische Bemerkung:
'chmod 770' setzt ziemlich strenge Rechte und erlaubt nur dem
Benutzer 'nobody' und der Gruppe 'nobody' Lese-/Schreibzugriff
auf diese Verzeichnisse. Falls Sie die Rechte so setzen
möchten, dass auch andere Benutzer die Dateien lesen
können (vor allem für Ihren eigenen Komfort), so
erreichen Sie dies mit 775.
Nun müssen wir die index.tpl Datei
erstellen, welche Smarty laden soll. Die Datei wird in Ihrem
$template_dir
abgelegt.
Beispiel 2-10. Editieren von /web/www.example.com/smarty/guestbook/templates/index.tpl {* Smarty *}
Hallo {$name}, herzlich Willkommen! |
|
Technische Bemerkung:
{* Smarty *} ist ein Template-Kommentar. Der
wird zwar nicht benötigt, es ist jedoch eine gute Idee jedes
Template mit einem Kommentar zu versehen. Dies erleichtert die
Erkennbarkeit des Templates, unabhängig von der verwendeten
Dateierweiterung. (Zum Beispiel für Editoren die
Syntax-Highlighting unterstützen.)
Als nächstes editieren wir die Datei
index.php. Wir erzeugen eine Smarty-Instanz,
weisen dem Template mit assign()
eine Variable zu und geben index.tpl mit
display aus.
Beispiel 2-11. Editieren von /web/www.example.com/docs/guestbook/index.php
<?php
define('SMARTY_DIR','/usr/local/lib/php/Smarty/'); require(SMARTY_DIR.'Smarty.class.php');
$smarty = new Smarty();
$smarty->template_dir = '/web/www.example.com/smarty/guestbook/templates/'; $smarty->compile_dir = '/web/www.example.com/smarty/guestbook/templates_c/'; $smarty->config_dir = '/web/www.example.com/smarty/guestbook/configs/'; $smarty->cache_dir = '/web/www.example.com/smarty/guestbook/cache/';
$smarty->assign('name','Ned');
//** Die folgende Zeile "einkommentieren" um die Debug-Konsole anzuzeigen //$smarty->debugging = true;
$smarty->display('index.tpl'); ?>
|
|
Technische Bemerkung:
In unserem Beispiel verwenden wir durchwegs absolute Pfadnamen zu
den Smarty-Verzeichnissen. Falls /web/www.example.com/smarty/guestbook/
in Ihrem PHP-'include_path' liegt, wäre dies nicht
nötig. Es ist jedoch effizienter und weniger
fehleranfällig die Pfade absolut zu setzen. Und es
garantiert, dass Smarty die Templates aus dem geplanten
Verzeichnis lädt.
Wenn Sie index.php nun in Ihrem Webbrowser
öffnen, sollte 'Hallo, Ned, herzlich Willkommen!' ausgegeben werden.
Die Basis-Installation von Smarty wäre somit beendet.