sync with en

This commit is contained in:
messju
2005-06-09 09:57:02 +00:00
parent 9d5ea77198
commit a9d7cd21f4

View File

@@ -1,221 +1,334 @@
<?xml version="1.0" encoding="iso-8859-1"?> <?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ --> <!-- $Revision$ -->
<!-- EN-Revision: 1.10 Maintainer: andreas Status: partial --> <!-- EN-Revision: 1.10 Maintainer: andreas Status: ready -->
<part id="getting.started"> <part id="getting.started">
<title>Erste Schritte</title> <title>Erste Schritte</title>
<chapter id="what.is.smarty"> <chapter id="what.is.smarty">
<title>Was ist Smarty?</title> <title>Was ist Smarty?</title>
<para> <para>
Smarty ist eine Template-Engine f&uuml;r PHP. Genauer gesagt erlaubt es Smarty ist eine Template-Engine f&uuml;r PHP. Genauer gesagt
die einfache Trennung von Applikations-Logik und Design/Ausgabe. Dies erlaubt es die einfache Trennung von Applikations-Logik und
ist vor allem w&uuml;nschenswert, wenn der Applikationsentwickler nicht Design/Ausgabe. Dies ist vor allem w&uuml;nschenswert, wenn der
die selbe Person ist wie der Designer. Nehmen wir zum Beispiel eine Applikationsentwickler nicht die selbe Person ist wie der
Webseite die Zeitungsartikel ausgibt. Der Titel, die Einf&uuml;hrung, Designer. Nehmen wir zum Beispiel eine Webseite die Zeitungsartikel
der Author und der Inhalt selbst enthalten keine Informationen dar&uuml;ber ausgibt. Der Titel, die Einf&uuml;hrung, der Author und der Inhalt
wie sie dargestellt werden sollen. Also werden sie von der Applikation selbst enthalten keine Informationen dar&uuml;ber wie sie
an Smarty &uuml;bergeben, damit der Designer in den Templates mit einer Kombination von dargestellt werden sollen. Also werden sie von der Applikation an
HTML- und Template-Tags die Ausgabe (Tabellen, Hintergrundfarben, Smarty &uuml;bergeben, damit der Designer in den Templates mit
Schriftgr&ouml;ssen, Stylesheets, etc.) gestalten kann. Falls nun die einer Kombination von HTML- und Template-Tags die Ausgabe
Applikation eines Tages angepasst werden muss, ist dies f&uuml;r den (Tabellen, Hintergrundfarben, Schriftgr&ouml;ssen, Stylesheets,
Designer nicht von Belang, da die Inhalte immer noch genau gleich etc.) gestalten kann. Falls nun die Applikation eines Tages
&uuml;bergeben werden. Genauso kann der Designer die Ausgabe der angepasst werden muss, ist dies f&uuml;r den Designer nicht von
Daten beliebig ver&auml;ndern, ohne dass eine &Auml;nderung der Belang, da die Inhalte immer noch genau gleich &uuml;bergeben
Applikation vorgenommen werden muss. Somit k<EFBFBD>nnen der Programmierer werden. Genauso kann der Designer die Ausgabe der Daten beliebig
die Applikations-Logik und der Designer die Ausgabe frei anpassen, ver&auml;ndern, ohne dass eine &Auml;nderung der Applikation
ohne sich dabei in die Quere zu kommen. vorgenommen werden muss. Somit k<>nnen der Programmierer die
</para> Applikations-Logik und der Designer die Ausgabe frei anpassen, ohne
<para> sich dabei in die Quere zu kommen.
Was Smarty nicht kann: Smarty versucht nicht die gesamte Logik aus dem </para>
Template zu verbannen. Solange die verwendete Logik ausschlie<69>lich f&uuml;r die <para>
Ausgabe verwendet wird, kann sie auch im Template eingebettet werden. Ein Tip: Was Smarty nicht kann: Smarty versucht nicht die gesamte Logik aus
versuchen Sie Applikations-Logik aus dem Template und Pr&auml;sentations-Logik dem Template zu verbannen. Solange die verwendete Logik
aus der Applikation herauszuhalten. Nur so bleibt die Applikation auf absehbere Zeit ausschlie<EFBFBD>lich f&uuml;r die Ausgabe verwendet wird, kann sie auch
gut skalier- und wartbar. im Template eingebettet werden. Ein Tip: versuchen Sie
</para> Applikations-Logik aus dem Template und Pr&auml;sentations-Logik
<para> aus der Applikation herauszuhalten. Nur so bleibt die Applikation
Einer der einzigartigen Aspekte von Smarty ist die Kompilierung der auf absehbere Zeit gut skalier- und wartbar.
Templates. Smarty liest die Template-Dateien und generiert daraus neue </para>
PHP-Skripte; von da an werden nur noch diese Skripte verwendet. Deshalb <para>
m&uuml;ssen Templates nicht f&uuml;r jeden Seitenaufruf performance-intensiv Einer der einzigartigen Aspekte von Smarty ist die Kompilierung der
neu geparst werden und jedes Template kann voll von PHP Compiler-Cache Templates. Smarty liest die Template-Dateien und generiert daraus
L&ouml;sungen profitieren. neue PHP-Skripte; von da an werden nur noch diese Skripte
(Zend, <ulink url="&url.zend;">&url.zend;</ulink>; PHP Accelerator, <ulink url="&url.php-accelerator;">&url.php-accelerator;</ulink>) verwendet. Deshalb m&uuml;ssen Templates nicht f&uuml;r jeden
</para> Seitenaufruf performance-intensiv neu geparst werden und jedes
<para> Template kann voll von PHP Compiler-Cache L&ouml;sungen
Ein paar Smarty Charakteristiken profitieren. (Zend, <ulink url="&url.zend;">&url.zend;</ulink>;
</para> PHP Accelerator, <ulink
<itemizedlist> url="&url.php-accelerator;">&url.php-accelerator;</ulink>)
<listitem><para>Sehr schnell.</para></listitem> </para>
<listitem><para>Sehr effizient, da der PHP-Parser die 'schmutzige' Arbeit &uuml;bernimmt.</para></listitem> <para>
<listitem><para>Kein Overhead durch Template-Parsing, nur einmaliges kompilieren.</para></listitem> Ein paar Smarty Charakteristiken
<listitem><para>Re-kompiliert nur g&auml;nderte Templates.</para></listitem> </para>
<listitem><para>Sie k&ouml;nnen die Engine um <link linkend="language.custom.functions">individuelle Funktionen</link> und <link linkend="language.modifiers">Variablen-Modifikatoren</link> erweitern.</para></listitem> <itemizedlist>
<listitem><para>Konfigurierbare Syntax f<>r <link linkend="variable.left.delimiter">Template-Tags</link>: Sie k&ouml;nnen {}, {{}}, &lt;!--{}--&gt;, etc. verwenden.</para></listitem> <listitem>
<listitem><para><link linkend="language.function.if">'if/elseif/else/endif'-Konstrukte</link> werden direkt dem PHP-Parser &uuml;bergeben. Somit k&ouml;nnen {if ...} Ausdr<64>cke sowohl sehr einfach als auch sehr komplex sein.</para></listitem> <para>
<listitem><para>Unbegrenzte Verschachtelung von <link linkend="language.function.section">'section'</link>, 'if' und anderen Bl&ouml;cken.</para></listitem> Sehr schnell.
<listitem><para>Erm&ouml;glicht die direkte <link linkend="language.function.php">Einbettung von PHP-Code</link>. (Obwohl es weder ben&ouml;tigt noch empfohlen wird, da die Engine einfach erweiterbar ist.)</para></listitem> </para>
<listitem><para>Eingebauter <link linkend="caching">Caching-Support</link></para></listitem> </listitem>
<listitem><para>Beliebige <link linkend="template.resources">Template-Quellen</link></para></listitem> <listitem>
<listitem><para>Eigene <link linkend="section.template.cache.handler.func">Cache-Handling Funktionen</link></para></listitem> <para>
<listitem><para><link linkend="plugins">Plugin</link> Architektur</para></listitem> Sehr effizient, da der PHP-Parser die 'schmutzige' Arbeit
</itemizedlist> &uuml;bernimmt.
</para>
</listitem>
<listitem>
<para>
Kein Overhead durch Template-Parsing, nur einmaliges kompilieren.
</para>
</listitem>
<listitem>
<para>
Re-kompiliert nur g&auml;nderte Templates.
</para>
</listitem>
<listitem>
<para>
Sie k&ouml;nnen die Engine um <link
linkend="language.custom.functions">individuelle Funktionen</link>
und <link
linkend="language.modifiers">Variablen-Modifikatoren</link>
erweitern.
</para>
</listitem>
<listitem>
<para>
Konfigurierbare Syntax f<>r <link
linkend="variable.left.delimiter">Template-Tags</link>: Sie
k&ouml;nnen {}, {{}}, &lt;!--{}--&gt;, etc. verwenden.
</para>
</listitem>
<listitem>
<para>
<link
linkend="language.function.if">'if/elseif/else/endif'-Konstrukte</link>
werden direkt dem PHP-Parser &uuml;bergeben. Somit k&ouml;nnen {if
...} Ausdr<64>cke sowohl sehr einfach als auch sehr komplex sein.
</para>
</listitem>
<listitem>
<para>
Unbegrenzte Verschachtelung von <link
linkend="language.function.section">'section'</link>, 'if' und
anderen Bl&ouml;cken.
</para>
</listitem>
<listitem>
<para>
Erm&ouml;glicht die direkte <link
linkend="language.function.php">Einbettung von
PHP-Code</link>. (Obwohl es weder ben&ouml;tigt noch empfohlen
wird, da die Engine einfach erweiterbar ist.)
</para>
</listitem>
<listitem>
<para>
Eingebauter <link linkend="caching">Caching-Support</link>
</para>
</listitem>
<listitem>
<para>
Beliebige <link linkend="template.resources">Template-Quellen</link>
</para>
</listitem>
<listitem>
<para>
Eigene <link
linkend="section.template.cache.handler.func">Cache-Handling
Funktionen</link>
</para>
</listitem>
<listitem>
<para>
<link linkend="plugins">Plugin</link> Architektur
</para>
</listitem>
</itemizedlist>
</chapter> </chapter>
<chapter id="installation"> <chapter id="installation">
<title>Installation</title> <title>Installation</title>
<sect1 id="installation.requirements"> <sect1 id="installation.requirements">
<title>Anforderungen</title> <title>Anforderungen</title>
<para> <para>
Smarty ben&ouml;tigt einen Webserver mit PHP >=4.0.6. Smarty ben&ouml;tigt einen Webserver mit PHP >=4.0.6.
</para> </para>
</sect1> </sect1>
<sect1 id="installing.smarty.basic"> <sect1 id="installing.smarty.basic">
<title>Basis Installation</title> <title>Basis Installation</title>
<note> <note>
<title>Technische Bemerkung</title> <title>Technische Bemerkung</title>
<para> <para>
Dieser Leitfaden geht davon aus, dass Sie Ihr Webserver- und PHP-Setup kennen Dieser Leitfaden geht davon aus, dass Sie Ihr Webserver- und
und mit den Namenskonventionen f&uuml;r Dateien und Verzeichnisse Ihres Betriebssystems PHP-Setup kennen und mit den Namenskonventionen f&uuml;r Dateien
vertraut sind. Im Folgenden wird ein Unix-Dateisystem verwendet, stellen Sie also und Verzeichnisse Ihres Betriebssystems vertraut sind. Im
sicher, dass sie die f&uuml;r Ihr Betriebssystem n&ouml;tigen &Auml;nderungen vornehmen. Folgenden wird ein Unix-Dateisystem verwendet, stellen Sie also
</para> sicher, dass sie die f&uuml;r Ihr Betriebssystem n&ouml;tigen
<para> &Auml;nderungen vornehmen.
Das Beispiel geht davon aus, dass '/php/includes' in Ihrem PHP-'include_path' </para>
liegt. Konsultieren Sie das PHP-Manual f&uuml;r weiterf&uuml;hrende Informationen hierzu. <para>
</para> Das Beispiel geht davon aus, dass '/php/includes' in Ihrem
</note> PHP-'include_path' liegt. Konsultieren Sie das PHP-Manual
<para> f&uuml;r weiterf&uuml;hrende Informationen hierzu.
Installieren Sie als erstes die Smarty-Library Dateien. Diese Dateien </para>
sollten von Ihnen NICHT editiert und von allen Applikationen </note>
verwendet werden. Sie werden nur erneuert, wenn Sie eine neue Version von Smarty installieren. <para>
</para> Installieren Sie als erstes die Smarty-Library Dateien. Diese
<note> Dateien sollten von Ihnen NICHT editiert und von allen
<title>Technische Bemerkung</title> Applikationen verwendet werden. Sie werden nur erneuert, wenn Sie
<para> eine neue Version von Smarty installieren.
Wir empfehlen keine &Auml;nderungen an den Smarty-Library Dateien vorzunehmen. </para>
Dies macht ein m&ouml;gliches Upgrade wesentlich einfacher. Sie m&uuml;ssen <note>
diese Dateien auch nicht anpassen, um Smarty zu konfigurieren! Benutzen Sie f<>r <title>Technische Bemerkung</title>
diesen Zwecke eine Instanz der Smarty-Klasse. <para>
</para>
</note>
<para> Wir empfehlen keine &Auml;nderungen an den Smarty-Library Dateien
Folgende Library Dateien werden mit Smarty geliefert und werden ben&ouml;tigt: vorzunehmen. Dies macht ein m&ouml;gliches Upgrade wesentlich
</para> einfacher. Sie m&uuml;ssen diese Dateien auch nicht anpassen, um
<example> Smarty zu konfigurieren! Benutzen Sie f<>r diesen Zwecke eine
<title>Ben<EFBFBD>tigte Smarty-Library Dateien</title> Instanz der Smarty-Klasse.
<screen> </para>
</note>
<para>
Folgende Library Dateien werden mit Smarty geliefert und werden ben&ouml;tigt:
</para>
<example>
<title>Ben<EFBFBD>tigte Smarty-Library Dateien</title>
<screen>
<![CDATA[
Smarty.class.php Smarty.class.php
Smarty_Compiler.class.php Smarty_Compiler.class.php
Config_File.class.php Config_File.class.php
debug.tpl debug.tpl
/internals/*.php (alle) /internals/*.php (alle)
/plugins/*.php (alle)</screen> /plugins/*.php (alle)
</example> ]]>
</screen>
<para> </example>
Sie k&ouml;nnen diese Dateien entweder in Ihrem PHP-'include_path' oder <para>
auch in irgend einem anderen Verzeichnis ablegen, solange die Konstante Sie k&ouml;nnen diese Dateien entweder in Ihrem PHP-'include_path'
<link linkend="constant.smarty.dir">SMARTY_DIR</link> auf den korrekten oder auch in irgend einem anderen Verzeichnis ablegen, solange die
Pfad zeigt. Im Folgenden werden Beispiele f&uuml;r beide F&auml;lle aufgezeigt. Konstante <link linkend="constant.smarty.dir">SMARTY_DIR</link>
</para> auf den korrekten Pfad zeigt. Im Folgenden werden Beispiele
<para> f&uuml;r beide F&auml;lle aufgezeigt.
So erzeugt man eine Instanz der Smarty-Klasse im PHP-Skript: </para>
</para> <para>
So erzeugt man eine Instanz der Smarty-Klasse im PHP-Skript:
<example> </para>
<title>Smarty Instanz erstellen:</title> <example>
<screen> <title>Smarty Instanz erstellen:</title>
<programlisting role="php">
<![CDATA[
<?php
require('Smarty.class.php'); require('Smarty.class.php');
$smarty = new Smarty;</screen> $smarty = new Smarty;
</example> ?>
]]>
</programlisting>
</example>
<para> <para>
Versuchen Sie das Skript auszuf&uuml;hren. Wenn Sie eine Fehlermeldung erhalten dass Versuchen Sie das Skript auszuf&uuml;hren. Wenn Sie eine
<filename>Smarty.class.php</filename> nicht gefunden werden konnte, versuchen Sie folgendes: Fehlermeldung erhalten dass <filename>Smarty.class.php</filename>
</para> nicht gefunden werden konnte, versuchen Sie folgendes:
</para>
<example> <example>
<title>Absoluter Pfad &uuml;bergeben</title> <title>Absoluter Pfad &uuml;bergeben</title>
<screen> <programlisting role="php">
<![CDATA[
<?php
require('/usr/local/lib/php/Smarty/Smarty.class.php'); require('/usr/local/lib/php/Smarty/Smarty.class.php');
$smarty = new Smarty;</screen> $smarty = new Smarty;</screen>
</example> ?>
]]>
</programlisting>
</example>
<example> <example>
<title>Library Verzeichnis dem Include-Pfad hinzuf&uuml;gen</title> <title>Library Verzeichnis dem Include-Pfad hinzuf&uuml;gen</title>
<screen> <programlisting role="php">
<![CDATA[
<?php
// editieren Sie php.ini, f&uuml;gen Sie das Smarty // editieren Sie php.ini, f&uuml;gen Sie das Smarty
// Verzeichnis Ihrem include_path hinzu, und starten Sie den Webserver neu // Verzeichnis Ihrem include_path hinzu, und starten Sie den Webserver neu
// Danach sollte folgendes Funktionieren. // Danach sollte folgendes Funktionieren.
require('Smarty.class.php'); require('Smarty.class.php');
$smarty = new Smarty;</screen> $smarty = new Smarty;
</example>
<example> ?>
<title>SMARTY_DIR manuell setzen</title> ]]>
<screen> </programlisting>
</example>
<example>
<title>SMARTY_DIR manuell setzen</title>
<programlisting role="php">
<![CDATA[
<?php
define('SMARTY_DIR','/usr/local/lib/php/Smarty/'); define('SMARTY_DIR','/usr/local/lib/php/Smarty/');
require(SMARTY_DIR.'Smarty.class.php'); require(SMARTY_DIR.'Smarty.class.php');
$smarty = new Smarty;</screen> $smarty = new Smarty;
</example> ]]>
</programlisting>
</example>
<para>
<para> Jetzt, wo die Library Dateien an ihrem Platz sind, wird es Zeit,
Jetzt, wo die Library Dateien an ihrem Platz sind, wird es die Smarty Verzeichnisse zu erstellen.
Zeit, die Smarty Verzeichnisse zu erstellen. </para>
</para> <para>
<para> F&uuml;r unser Beispiel werden wir die Smarty Umgebung f&uuml;r
F&uuml;r unser Beispiel werden wir die Smarty Umgebung f&uuml;r eine eine G&auml;stebuch-Applikation konfigurieren. Wir verwenden den
G&auml;stebuch-Applikation konfigurieren. Wir verwenden den Applikationsnamen Applikationsnamen nur, um die Verzeichnis-Struktur zu
nur, um die Verzeichnis-Struktur zu verdeutlichen. Sie k&ouml;nnen die selbe verdeutlichen. Sie k&ouml;nnen die selbe Umgebung f&uuml;r alle
Umgebung f&uuml;r alle Ihre Applikationen verwenden indem Sie 'guestbook' Ihre Applikationen verwenden indem Sie 'guestbook' durch dem Namen
durch dem Namen Ihrer Applikation ersetzen. Ihrer Applikation ersetzen.
</para> </para>
<para> <para>
Stellen Sie sicher, dass Sie die DocumentRoot Ihres Webservers kennen. Stellen Sie sicher, dass Sie die DocumentRoot Ihres Webservers
In unserem Beispiel lautet sie '/web/www.domain.com/docs/'. kennen. In unserem Beispiel lautet sie
</para> '/web/www.domain.com/docs/'.
<para> </para>
Die Smarty Verzeichnisse werden in den Klassen-Variablen <link linkend="variable.template.dir">$template_dir</link>, <para>
<link linkend="variable.compile.dir">$compile_dir</link>, <link linkend="variable.config.dir">$config_dir</link> und <link linkend="variable.cache.dir">$cache_dir</link> definiert. Die Standardwerte sind: Die Smarty Verzeichnisse werden in den Klassen-Variablen <link
<filename class="directory">templates</filename>, <filename class="directory">templates_c</filename>, <filename class="directory">configs</filename> und <filename class="directory">cache</filename>. F&uuml;r unser Beispiel linkend="variable.template.dir">$template_dir</link>, <link
legen wir alle diese Verzeichnisse unter <filename class="directory">/web/www.domain.com/smarty/guestbook/</filename> an. linkend="variable.compile.dir">$compile_dir</link>, <link
</para> linkend="variable.config.dir">$config_dir</link> und <link
linkend="variable.cache.dir">$cache_dir</link> definiert. Die
<note> Standardwerte sind: <filename
<title>Technische Bemerkung</title> class="directory">templates</filename>, <filename
<para> class="directory">templates_c</filename>, <filename
Wir empfehlen, diese Verzeichnisse ausserhalb der DocumentRoot anzulegen, class="directory">configs</filename> und <filename
um m&ouml;gliche Direktzugriffe zu verhindern. class="directory">cache</filename>. F&uuml;r unser Beispiel legen
</para> wir alle diese Verzeichnisse unter <filename
</note> class="directory">/web/www.domain.com/smarty/guestbook/</filename>
an.
<para> </para>
In Ihrer DocumentRoot muss mindestens eine Datei liegen, die f&uuml;r Browser <note>
zug&auml;nglich ist. Wir nennen dieses Skript <filename>index.php</filename>, und legen <title>Technische Bemerkung</title>
es in das Verzeichnis <filename class="directory">/guestbook/</filename> in unserer DocumentRoot. <para>
</para> Wir empfehlen, diese Verzeichnisse ausserhalb der DocumentRoot
anzulegen, um m&ouml;gliche Direktzugriffe zu verhindern.
<note>
<title>Technische Bemerkung</title>
<para>
Bequem ist es, den Webserver so zu konfigurieren, dass <filename>index.php</filename> als
Standard-Verzeichnis-Index verwendet wird. Somit kann man das Skript
direkt mit 'http://www.domain.com/guestbook/' aufrufen. Falls Sie Apache
verwenden, l&auml;sst sich dies konfigurieren indem Sie <filename>index.php</filename>
als letzten Eintrag f&uuml;r <emphasis>DirectoryIndex</emphasis> verwenden. (Jeder Eintrag muss
mit einem Leerzeichen abgetrennt werden).
</para> </para>
</note> </note>
<para>
<para> In Ihrer DocumentRoot muss mindestens eine Datei liegen, die
Die Dateistruktur bis jetzt: f&uuml;r Browser zug&auml;nglich ist. Wir nennen dieses Skript
</para> <filename>index.php</filename>, und legen es in das Verzeichnis
<filename class="directory">/guestbook/</filename> in unserer
DocumentRoot.
</para>
<example> <note>
<title>Beispiel der Dateistruktur</title> <title>Technische Bemerkung</title>
<screen> <para>
Bequem ist es, den Webserver so zu konfigurieren, dass
<filename>index.php</filename> als Standard-Verzeichnis-Index
verwendet wird. Somit kann man das Skript direkt mit
'http://www.domain.com/guestbook/' aufrufen. Falls Sie Apache
verwenden, l&auml;sst sich dies konfigurieren indem Sie
<filename>index.php</filename> als letzten Eintrag f&uuml;r
<emphasis>DirectoryIndex</emphasis> verwenden. (Jeder Eintrag
muss mit einem Leerzeichen abgetrennt werden).
</para>
</note>
<para>
Die Dateistruktur bis jetzt:
</para>
<example>
<title>Beispiel der Dateistruktur</title>
<screen>
<![CDATA[
/usr/local/lib/php/Smarty/Smarty.class.php /usr/local/lib/php/Smarty/Smarty.class.php
/usr/local/lib/php/Smarty/Smarty_Compiler.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/Config_File.class.php
@@ -228,82 +341,102 @@ $smarty = new Smarty;</screen>
/web/www.example.com/smarty/guestbook/configs/ /web/www.example.com/smarty/guestbook/configs/
/web/www.example.com/smarty/guestbook/cache/ /web/www.example.com/smarty/guestbook/cache/
/web/www.example.com/docs/guestbook/index.php</screen> /web/www.example.com/docs/guestbook/index.php
</example> ]]>
</screen>
<note> </example>
<title>Technische Bemerkung</title>
<para>
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&auml;ten eventuell sp&auml;ter
genutzt werden sollen.
</para>
</note>
<para>
Smarty ben&ouml;tigt <emphasis role="bold">Schreibzugriff</emphasis> auf die Verzeichnisse <link linkend="variable.compile.dir">$compile_dir</link> und <link linkend="variable.cache.dir">$cache_dir</link>.
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&ouml;nnen Sie in der httpd.conf (gew<65>hnlich in '/usr/local/apache/conf/')
nachsehen, unter welchem Benutzer Ihr Server l&auml;uft.
</para>
<example>
<title>Dateirechte einrichten</title>
<screen>
<note>
<title>Technische Bemerkung</title>
<para>
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&auml;ten eventuell sp&auml;ter genutzt werden
sollen.
</para>
</note>
<para>
Smarty ben&ouml;tigt <emphasis
role="bold">Schreibzugriff</emphasis> auf die Verzeichnisse <link
linkend="variable.compile.dir">$compile_dir</link> und <link
linkend="variable.cache.dir">$cache_dir</link>. 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&ouml;nnen Sie in
der httpd.conf (gew<65>hnlich in '/usr/local/apache/conf/')
nachsehen, unter welchem Benutzer Ihr Server l&auml;uft.
</para>
<example>
<title>Dateirechte einrichten</title>
<programlisting role="shell">
<![CDATA[
chown nobody:nobody /web/www.example.com/smarty/guestbook/templates_c/ chown nobody:nobody /web/www.example.com/smarty/guestbook/templates_c/
chmod 770 /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/ chown nobody:nobody /web/www.example.com/smarty/guestbook/cache/
chmod 770 /web/www.example.com/smarty/guestbook/cache/</screen> chmod 770 /web/www.example.com/smarty/guestbook/cache/</screen>
</example> ]]>
</programlisting>
</example>
<note> <note>
<title>Technische Bemerkung</title> <title>Technische Bemerkung</title>
<para> <para>
'chmod 770' setzt ziemlich strenge Rechte und erlaubt nur dem Benutzer 'nobody' 'chmod 770' setzt ziemlich strenge Rechte und erlaubt nur dem
und der Gruppe 'nobody' Lese-/Schreibzugriff auf diese Verzeichnisse. Falls Sie Benutzer 'nobody' und der Gruppe 'nobody' Lese-/Schreibzugriff
die Rechte so setzen m&ouml;chten, dass auch andere Benutzer die Dateien lesen auf diese Verzeichnisse. Falls Sie die Rechte so setzen
k&ouml;nnen (vor allem f&uuml;r Ihren eigenen Komfort), so erreichen Sie dies mit 775. m&ouml;chten, dass auch andere Benutzer die Dateien lesen
</para> k&ouml;nnen (vor allem f&uuml;r Ihren eigenen Komfort), so
</note> erreichen Sie dies mit 775.
</para>
</note>
<para> <para>
Nun m&uuml;ssen wir die <filename>index.tpl</filename> Datei erstellen, welche Smarty laden soll. Nun m&uuml;ssen wir die <filename>index.tpl</filename> Datei
Die Datei wird in Ihrem <link linkend="variable.template.dir">$template_dir</link> abgelegt. erstellen, welche Smarty laden soll. Die Datei wird in Ihrem
</para> <link linkend="variable.template.dir">$template_dir</link>
abgelegt.
</para>
<example> <example>
<title>Editieren von /web/www.example.com/smarty/guestbook/templates/index.tpl</title> <title>Editieren von /web/www.example.com/smarty/guestbook/templates/index.tpl</title>
<screen> <screen>
<![CDATA[
{* Smarty *} {* Smarty *}
Hallo, {$name}!</screen> Hallo, {$name}!
</example> ]]>
</screen>
</example>
<note>
<title>Technische Bemerkung</title>
<para>
{* Smarty *} ist ein <link
linkend="language.syntax.comments">Template-Kommentar</link>. Der
wird zwar nicht ben&ouml;tigt, es ist jedoch eine gute Idee jedes
Template mit einem Kommentar zu versehen. Dies erleichtert die
Erkennbarkeit des Templates, unabh&auml;ngig von der verwendeten
Dateierweiterung. (Zum Beispiel f&uuml;r Editoren die
Syntax-Highlighting unterst&uuml;tzen.)
</para>
</note>
<note> <para>
<title>Technische Bemerkung</title> Als n&auml;chstes editieren wir die Datei
<para> <filename>index.php</filename>. Wir erzeugen eine Smarty-Instanz,
{* Smarty *} ist ein <link linkend="language.syntax.comments">Template-Kommentar</link>. Der wird zwar nicht ben&ouml;tigt, weisen dem Template eine Variable zu und geben
es ist jedoch eine gute Idee jedes Template mit einem Kommentar zu versehen. <filename>index.tpl</filename> aus.
Dies erleichtert die Erkennbarkeit des Templates, unabh&auml;ngig von der </para>
verwendeten Dateierweiterung. (Zum Beispiel f&uuml;r Editoren die Syntax-Highlighting
unterst&uuml;tzen.)
</para>
</note>
<para> <example>
Als n&auml;chstes editieren wir die Datei <filename>index.php</filename>. Wir erzeugen eine <title>Editieren von /web/www.example.com/docs/guestbook/index.php</title>
Smarty-Instanz, weisen dem Template eine Variable zu und geben <filename>index.tpl</filename> aus. <programlisting role="php">
</para> <![CDATA[
<?php
<example>
<title>Editieren von /web/www.example.com/docs/guestbook/index.php</title>
<screen>
define('SMARTY_DIR','/usr/local/lib/php/Smarty/'); define('SMARTY_DIR','/usr/local/lib/php/Smarty/');
require(SMARTY_DIR.'Smarty.class.php'); require(SMARTY_DIR.'Smarty.class.php');
@@ -318,44 +451,56 @@ $smarty->cache_dir = '/web/www.example.com/smarty/guestbook/cache/';
$smarty->assign('name','Ned'); $smarty->assign('name','Ned');
$smarty->display('index.tpl');</screen> $smarty->display('index.tpl');</screen>
</example> ?>
]]>
</programlisting>
</example>
<note> <note>
<title>Technische Bemerkung</title> <title>Technische Bemerkung</title>
<para> <para>
In unserem Beispiel verwenden wir durchwegs absolute Pfadnamen zu den In unserem Beispiel verwenden wir durchwegs absolute Pfadnamen zu
Smarty-Verzeichnissen. Falls <filename class="directory">/web/www.example.com/smarty/guestbook/</filename> in den Smarty-Verzeichnissen. Falls <filename
Ihrem PHP-'include_path' liegt, w&auml;re dies nicht n&ouml;tig. Es ist jedoch class="directory">/web/www.example.com/smarty/guestbook/</filename>
effizienter und weniger fehleranf&auml;llig die Pfade absolut zu setzen. in Ihrem PHP-'include_path' liegt, w&auml;re dies nicht
Und es garantiert, dass Smarty die Templates aus dem geplanten Verzeichnis l&auml;dt. n&ouml;tig. Es ist jedoch effizienter und weniger
</para> fehleranf&auml;llig die Pfade absolut zu setzen. Und es
</note> garantiert, dass Smarty die Templates aus dem geplanten
Verzeichnis l&auml;dt.
</para>
</note>
<para> <para>
Wenn Sie <filename>index.php</filename> nun in Ihrem Webbrowser &ouml;ffnen, sollte 'Hallo, Ned!' ausgegeben werden. Wenn Sie <filename>index.php</filename> nun in Ihrem Webbrowser
</para> &ouml;ffnen, sollte 'Hallo, Ned!' ausgegeben werden.
<para> </para>
Die Basis-Installation von Smarty w&auml;re somit beendet. <para>
</para> Die Basis-Installation von Smarty w&auml;re somit beendet.
</sect1> </para>
<sect1 id="installing.smarty.extended"> </sect1>
<sect1 id="installing.smarty.extended">
<title>Erweiterte Konfiguration</title> <title>Erweiterte Konfiguration</title>
<para> <para>
Dies ist eine Weiterf&uuml;hrung der <link
Dies ist eine Weiterf&uuml;hrung der <link linkend="installing.smarty.basic">Basis Installation</link>, bitte lesen Sie diese zuerst! linkend="installing.smarty.basic">Basis Installation</link>, bitte
lesen Sie diese zuerst!
</para> </para>
<para> <para>
Ein flexiblerer Weg um Smarty aufzusetzen ist, die Klasse zu erweitern und Ein flexiblerer Weg um Smarty aufzusetzen ist, die Klasse zu
eine eigene Smarty-Umgebung zu initialisieren. Anstatt immer wieder erweitern und eine eigene Smarty-Umgebung zu
die Verzeichnisse zu definieren, kann diese Aufgabe auch in einer einzigen initialisieren. Anstatt immer wieder die Verzeichnisse zu
Datei erledigt werden. Beginnen wir, indem wir ein neues Verzeichnis namens '/php/includes/guestbook/' definieren, kann diese Aufgabe auch in einer einzigen Datei
erstellen und eine Datei namens 'setup.php' darin anlegen. erledigt werden. Beginnen wir, indem wir ein neues Verzeichnis
namens '/php/includes/guestbook/' erstellen und eine Datei namens
'setup.php' darin anlegen.
</para> </para>
<example> <example>
<title>Editieren von /php/includes/guestbook/setup.php</title> <title>Editieren von /php/includes/guestbook/setup.php</title>
<screen> <programlisting role="php">
<![CDATA[
<?php
// Smarty Library Dateien laden // Smarty Library Dateien laden
define('SMARTY_DIR','/usr/local/lib/php/Smarty/'); define('SMARTY_DIR','/usr/local/lib/php/Smarty/');
@@ -368,41 +513,45 @@ class Smarty_GuestBook extends Smarty {
function Smarty_GuestBook() function Smarty_GuestBook()
{ {
// Konstruktor. Diese Werte werden f&uuml;r jede Instanz automatisch gesetzt // Konstruktor. Diese Werte werden f&uuml;r jede Instanz automatisch gesetzt
$this->Smarty(); $this->Smarty();
$this->template_dir = '/web/www.example.com/smarty/guestbook/templates/'; $this->template_dir = '/web/www.example.com/smarty/guestbook/templates/';
$this->compile_dir = '/web/www.example.com/smarty/guestbook/templates_c/'; $this->compile_dir = '/web/www.example.com/smarty/guestbook/templates_c/';
$this->config_dir = '/web/www.example.com/smarty/guestbook/configs/'; $this->config_dir = '/web/www.example.com/smarty/guestbook/configs/';
$this->cache_dir = '/web/www.example.com/smarty/guestbook/cache/'; $this->cache_dir = '/web/www.example.com/smarty/guestbook/cache/';
$this->caching = true; $this->caching = true;
$this->assign('app_name','Guest Book'); $this->assign('app_name','Guest Book');
} }
}</screen> }
</programlisting>
</example> </example>
<note> <note>
<title>Technische Bemerkung</title> <title>Technische Bemerkung</title>
<para> <para>
In unserem Beispiel werden die Library Dateien ausserhalb der DocumentRoot In unserem Beispiel werden die Library Dateien ausserhalb der
abgelegt. Diese Dateien k&ouml;nnten sensitive Informationen enthalten, DocumentRoot abgelegt. Diese Dateien k&ouml;nnten sensitive
die wir nicht zug&auml;nglich machen m&ouml;chten. Informationen enthalten, die wir nicht zug&auml;nglich machen
Deshalb legen wir alle Library Dateien in '/php/includes/guestbook/' ab m&ouml;chten. Deshalb legen wir alle Library Dateien in
und laden sie in unserem 'setup.php' Skript, wie Sie im oben gezeigten '/php/includes/guestbook/' ab und laden sie in unserem 'setup.php'
Beispiel sehen k&ouml;nnen. Skript, wie Sie im oben gezeigten Beispiel sehen k&ouml;nnen.
</para> </para>
</note> </note>
<para> <para>
Nun passen wir <filename>index.php</filename> an, um 'setup.php' zu verwenden: Nun passen wir <filename>index.php</filename> an, um 'setup.php'
</para> zu verwenden:
</para>
<example> <example>
<title>Editieren von /web/www.example.com/docs/guestbook/index.php</title> <title>Editieren von /web/www.example.com/docs/guestbook/index.php</title>
<screen> <programlisting role="php">
<![CDATA[
<?php
require('guestbook/setup.php'); require('guestbook/setup.php');
@@ -410,12 +559,14 @@ $smarty = new Smarty_GuestBook;
$smarty->assign('name','Ned'); $smarty->assign('name','Ned');
$smarty->display('index.tpl');</screen> $smarty->display('index.tpl');
</example> ]]>
</programlisting>
</example>
<para> <para>
Wie Sie sehen k&ouml;nnen, ist es sehr einfach eine Instanz von Smarty zu erstellen. Wie Sie sehen k&ouml;nnen, ist es sehr einfach eine Instanz von
Mit Hilfe von Smarty_GuestBook werden alle Variablen automatisch initialisiert. Smarty zu erstellen. Mit Hilfe von Smarty_GuestBook werden alle
Variablen automatisch initialisiert.
</para> </para>
</sect1> </sect1>