mirror of
https://github.com/smarty-php/smarty.git
synced 2025-08-06 03:14:27 +02:00
sync with en
This commit is contained in:
@@ -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ür PHP. Genauer gesagt erlaubt es
|
Smarty ist eine Template-Engine fü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ünschenswert, wenn der Applikationsentwickler nicht
|
Design/Ausgabe. Dies ist vor allem wü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ührung,
|
Designer. Nehmen wir zum Beispiel eine Webseite die Zeitungsartikel
|
||||||
der Author und der Inhalt selbst enthalten keine Informationen darüber
|
ausgibt. Der Titel, die Einführung, der Author und der Inhalt
|
||||||
wie sie dargestellt werden sollen. Also werden sie von der Applikation
|
selbst enthalten keine Informationen darüber wie sie
|
||||||
an Smarty ü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 übergeben, damit der Designer in den Templates mit
|
||||||
Schriftgrö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ür den
|
(Tabellen, Hintergrundfarben, Schriftgrössen, Stylesheets,
|
||||||
Designer nicht von Belang, da die Inhalte immer noch genau gleich
|
etc.) gestalten kann. Falls nun die Applikation eines Tages
|
||||||
übergeben werden. Genauso kann der Designer die Ausgabe der
|
angepasst werden muss, ist dies für den Designer nicht von
|
||||||
Daten beliebig verändern, ohne dass eine Änderung der
|
Belang, da die Inhalte immer noch genau gleich ü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ändern, ohne dass eine Ä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ü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ä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ü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ä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üssen Templates nicht fü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ö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üssen Templates nicht für jeden
|
||||||
</para>
|
Seitenaufruf performance-intensiv neu geparst werden und jedes
|
||||||
<para>
|
Template kann voll von PHP Compiler-Cache Lö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 ü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änderte Templates.</para></listitem>
|
</para>
|
||||||
<listitem><para>Sie kö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önnen {}, {{}}, <!--{}-->, etc. verwenden.</para></listitem>
|
<listitem>
|
||||||
<listitem><para><link linkend="language.function.if">'if/elseif/else/endif'-Konstrukte</link> werden direkt dem PHP-Parser übergeben. Somit kö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öcken.</para></listitem>
|
Sehr schnell.
|
||||||
<listitem><para>Ermöglicht die direkte <link linkend="language.function.php">Einbettung von PHP-Code</link>. (Obwohl es weder benö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>
|
übernimmt.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Kein Overhead durch Template-Parsing, nur einmaliges kompilieren.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Re-kompiliert nur gänderte Templates.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Sie kö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önnen {}, {{}}, <!--{}-->, etc. verwenden.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<link
|
||||||
|
linkend="language.function.if">'if/elseif/else/endif'-Konstrukte</link>
|
||||||
|
werden direkt dem PHP-Parser übergeben. Somit kö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öcken.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Ermöglicht die direkte <link
|
||||||
|
linkend="language.function.php">Einbettung von
|
||||||
|
PHP-Code</link>. (Obwohl es weder benö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ötigt einen Webserver mit PHP >=4.0.6.
|
Smarty benö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ür Dateien und Verzeichnisse Ihres Betriebssystems
|
PHP-Setup kennen und mit den Namenskonventionen fü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ür Ihr Betriebssystem nötigen Änderungen vornehmen.
|
Folgenden wird ein Unix-Dateisystem verwendet, stellen Sie also
|
||||||
</para>
|
sicher, dass sie die für Ihr Betriebssystem nötigen
|
||||||
<para>
|
Änderungen vornehmen.
|
||||||
Das Beispiel geht davon aus, dass '/php/includes' in Ihrem PHP-'include_path'
|
</para>
|
||||||
liegt. Konsultieren Sie das PHP-Manual für weiterfü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ür weiterfü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 Änderungen an den Smarty-Library Dateien vorzunehmen.
|
</para>
|
||||||
Dies macht ein mögliches Upgrade wesentlich einfacher. Sie mü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 Änderungen an den Smarty-Library Dateien
|
||||||
Folgende Library Dateien werden mit Smarty geliefert und werden benötigt:
|
vorzunehmen. Dies macht ein mögliches Upgrade wesentlich
|
||||||
</para>
|
einfacher. Sie mü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ö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önnen diese Dateien entweder in Ihrem PHP-'include_path' oder
|
<para>
|
||||||
auch in irgend einem anderen Verzeichnis ablegen, solange die Konstante
|
Sie kö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ür beide Fälle aufgezeigt.
|
Konstante <link linkend="constant.smarty.dir">SMARTY_DIR</link>
|
||||||
</para>
|
auf den korrekten Pfad zeigt. Im Folgenden werden Beispiele
|
||||||
<para>
|
für beide Fä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ühren. Wenn Sie eine Fehlermeldung erhalten dass
|
Versuchen Sie das Skript auszufü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 übergeben</title>
|
<title>Absoluter Pfad ü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ügen</title>
|
<title>Library Verzeichnis dem Include-Pfad hinzufügen</title>
|
||||||
<screen>
|
<programlisting role="php">
|
||||||
|
<![CDATA[
|
||||||
|
<?php
|
||||||
// editieren Sie php.ini, fügen Sie das Smarty
|
// editieren Sie php.ini, fü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ür unser Beispiel werden wir die Smarty Umgebung für
|
||||||
Für unser Beispiel werden wir die Smarty Umgebung für eine
|
eine Gästebuch-Applikation konfigurieren. Wir verwenden den
|
||||||
Gästebuch-Applikation konfigurieren. Wir verwenden den Applikationsnamen
|
Applikationsnamen nur, um die Verzeichnis-Struktur zu
|
||||||
nur, um die Verzeichnis-Struktur zu verdeutlichen. Sie können die selbe
|
verdeutlichen. Sie können die selbe Umgebung für alle
|
||||||
Umgebung fü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ü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ögliche Direktzugriffe zu verhindern.
|
class="directory">cache</filename>. Fü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ür Browser
|
<note>
|
||||||
zugä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ö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ässt sich dies konfigurieren indem Sie <filename>index.php</filename>
|
|
||||||
als letzten Eintrag fü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ür Browser zugä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ässt sich dies konfigurieren indem Sie
|
||||||
|
<filename>index.php</filename> als letzten Eintrag fü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äten eventuell später
|
|
||||||
genutzt werden sollen.
|
|
||||||
</para>
|
|
||||||
</note>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
Smarty benö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önnen Sie in der httpd.conf (gew<65>hnlich in '/usr/local/apache/conf/')
|
|
||||||
nachsehen, unter welchem Benutzer Ihr Server lä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äten eventuell später genutzt werden
|
||||||
|
sollen.
|
||||||
|
</para>
|
||||||
|
</note>
|
||||||
|
<para>
|
||||||
|
Smarty benö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önnen Sie in
|
||||||
|
der httpd.conf (gew<65>hnlich in '/usr/local/apache/conf/')
|
||||||
|
nachsehen, unter welchem Benutzer Ihr Server lä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öchten, dass auch andere Benutzer die Dateien lesen
|
auf diese Verzeichnisse. Falls Sie die Rechte so setzen
|
||||||
können (vor allem für Ihren eigenen Komfort), so erreichen Sie dies mit 775.
|
möchten, dass auch andere Benutzer die Dateien lesen
|
||||||
</para>
|
können (vor allem für Ihren eigenen Komfort), so
|
||||||
</note>
|
erreichen Sie dies mit 775.
|
||||||
|
</para>
|
||||||
|
</note>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Nun müssen wir die <filename>index.tpl</filename> Datei erstellen, welche Smarty laden soll.
|
Nun mü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ö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.)
|
||||||
|
</para>
|
||||||
|
</note>
|
||||||
|
|
||||||
<note>
|
<para>
|
||||||
<title>Technische Bemerkung</title>
|
Als nä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ö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ängig von der
|
</para>
|
||||||
verwendeten Dateierweiterung. (Zum Beispiel für Editoren die Syntax-Highlighting
|
|
||||||
unterstützen.)
|
|
||||||
</para>
|
|
||||||
</note>
|
|
||||||
|
|
||||||
<para>
|
<example>
|
||||||
Als nä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äre dies nicht nötig. Es ist jedoch
|
class="directory">/web/www.example.com/smarty/guestbook/</filename>
|
||||||
effizienter und weniger fehleranfällig die Pfade absolut zu setzen.
|
in Ihrem PHP-'include_path' liegt, wäre dies nicht
|
||||||
Und es garantiert, dass Smarty die Templates aus dem geplanten Verzeichnis lädt.
|
nötig. Es ist jedoch effizienter und weniger
|
||||||
</para>
|
fehleranfällig die Pfade absolut zu setzen. Und es
|
||||||
</note>
|
garantiert, dass Smarty die Templates aus dem geplanten
|
||||||
|
Verzeichnis lädt.
|
||||||
|
</para>
|
||||||
|
</note>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Wenn Sie <filename>index.php</filename> nun in Ihrem Webbrowser öffnen, sollte 'Hallo, Ned!' ausgegeben werden.
|
Wenn Sie <filename>index.php</filename> nun in Ihrem Webbrowser
|
||||||
</para>
|
öffnen, sollte 'Hallo, Ned!' ausgegeben werden.
|
||||||
<para>
|
</para>
|
||||||
Die Basis-Installation von Smarty wäre somit beendet.
|
<para>
|
||||||
</para>
|
Die Basis-Installation von Smarty wä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ührung der <link
|
||||||
Dies ist eine Weiterfü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ür jede Instanz automatisch gesetzt
|
// Konstruktor. Diese Werte werden fü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önnten sensitive Informationen enthalten,
|
DocumentRoot abgelegt. Diese Dateien könnten sensitive
|
||||||
die wir nicht zugänglich machen möchten.
|
Informationen enthalten, die wir nicht zugänglich machen
|
||||||
Deshalb legen wir alle Library Dateien in '/php/includes/guestbook/' ab
|
mö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önnen.
|
Skript, wie Sie im oben gezeigten Beispiel sehen kö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önnen, ist es sehr einfach eine Instanz von Smarty zu erstellen.
|
Wie Sie sehen kö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>
|
||||||
|
Reference in New Issue
Block a user