sync with en

This commit is contained in:
messju
2005-06-20 14:44:30 +00:00
parent cef4ae2676
commit 5dc51d227d
3 changed files with 358 additions and 325 deletions

View File

@@ -1,136 +1,177 @@
<?xml version="1.0" encoding="iso-8859-1"?> <?xml version="1.0" encoding="iso-8859-1"?>
<!-- EN-Revision: 1.4 Maintainer: andreas Status: ready --> <!-- EN-Revision: 1.9 Maintainer: andreas Status: ready -->
<!-- $Revision$ --> <!-- $Revision$ -->
<chapter id="tips"> <chapter id="tips">
<title>Tips &amp; Tricks</title> <title>Tips &amp; Tricks</title>
<para>
</para>
<sect1 id="tips.blank.var.handling">
<title>Handhabung unangewiesener Variablen</title>
<para> <para>
Manchmal m<>chten Sie vielleicht, dass anstatt einer Leerstelle ein
Standardwert ausgegeben wird - zum Beispiel um im
Tabellenhintergrund "&amp;nbsp;" auszugeben, damit er korrekt
angezeigt wird. Damit daf<61>r keine <link
linkend="language.function.if">{if}</link> Anweisung verwendet
werden muss, gibt es in Smarty eine Abk<62>rzung: die Verwendung des
<emphasis>default</emphasis> Variablen-Modifikators.
</para> </para>
<sect1 id="tips.blank.var.handling"> <example>
<title>Handhabung unangewiesener Variablen</title> <title>"&amp;nbsp;" ausgeben wenn eine Variable nicht zugewiesen ist</title>
<para> <programlisting>
Manchmal m&ouml;chten Sie vielleicht, dass anstatt einer Leerstelle ein Standardwert ausgegeben wird - zum <![CDATA[
Beispiel um im Tabellenhintergrund "&amp;nbsp;" auszugeben, damit er korrekt angezeigt wird. Damit daf&uuml;r
keine {if} Anweisung verwendet werden muss, gibt es in Smarty eine Abk&uuml;rzung: die Verwendung des <emphasis>default</emphasis>
Variablen-Modifikators.
</para>
<example>
<title>"&amp;nbsp;" ausgeben wenn eine Variable nicht zugewiesen ist</title>
<programlisting>
{* kompliziert *} {* kompliziert *}
{if $titel eq ""} {if $titel eq ""}
&amp;nbsp; &amp;nbsp;
{else} {else}
{$titel} {$titel}
{/if} {/if}
{* einfach *} {* einfach *}
{$titel|default:"&amp;nbsp;"}</programlisting> {$titel|default:"&amp;nbsp;"}
</example> ]]>
</sect1> </programlisting>
</example>
<para>
Siehe auch <link linkend="language.modifier.default">default
(Standardwert)</link> und <link
linkend="tips.default.var.handling">Handhabung von
Standardwerten</link>.
</para>
</sect1>
<sect1 id="tips.default.var.handling"> <sect1 id="tips.default.var.handling">
<title>Handhabung von Standardwerten</title> <title>Handhabung von Standardwerten</title>
<para> <para>
Wenn eine Variable in einem Template h&auml;ufig zum Einsatz kommt, Wenn eine Variable in einem Template h<EFBFBD>ufig zum Einsatz kommt,
kann es ein bisschen st&ouml;rend wirken, den 'default'-Modifikator jedes mal anzuwenden. kann es ein bisschen st<EFBFBD>rend wirken, den <link
Sie k&ouml;nnen dies umgehen, indem Sie der Variable mit der <link linkend="language.function.assign">assign</link> Funktion linkend="language.modifier.default"><emphasis>default</emphasis></link>-Modifikator
einen Standardwert zuweisen. jedes mal anzuwenden. Sie k<>nnen dies umgehen, indem Sie der
</para> Variable mit der <link
<example> linkend="language.function.assign">{assign}</link> Funktion einen
<title>Zuweisen des Standardwertes einer Variable</title> Standardwert zuweisen.
<programlisting> </para>
<example>
<title>Zuweisen des Standardwertes einer Variable</title>
<programlisting>
<![CDATA[
{* schreiben sie dieses statement an den Anfang des Templates *} {* schreiben sie dieses statement an den Anfang des Templates *}
{assign var="titel" value=$titel|default:"kein Titel"} {assign var="titel" value=$titel|default:"kein Titel"}
{* fall 'titel' bei der Anweisung leer war, enth&auml;lt es nun den Wert 'kein Titel' wenn Sie es ausgeben *} {* falls 'titel' bei der Anweisung leer war, enth<EFBFBD>lt es nun den Wert
'kein Titel' wenn Sie es ausgeben *}
{$titel} {$titel}
</programlisting> ]]>
</example> </programlisting>
</sect1> </example>
<sect1 id="tips.passing.vars"> <para>
<title>Variablen an eingebundene Templates weitergeben</title> Siehe auch <link linkend="language.modifier.default">default
<para> (Standardwert)</link> und <link
Wenn die Mehrzahl Ihrer Templates den gleichen Header und Footer verwenden, linkend="tips.blank.var.handling">Handhabung nicht zugewiesener
lagert man diese meist in eigene Templates aus und bindet diese ein. Was Variablen</link>.
geschieht aber wenn der Header einen seitenspezifischen Titel haben soll? </para>
Smarty bietet die M&ouml;glichkeit, dem eingebundenen Template, Variablen </sect1>
zu &uuml;bergeben.
</para>
<example>
<title>Die Titel-Variable dem Header-Template zuweisen</title>
<programlisting>
ersteseite.tpl <sect1 id="tips.passing.vars">
------------ <title>Variablen an eingebundene Templates weitergeben</title>
<para>
Wenn die Mehrzahl Ihrer Templates den gleichen Header und Footer
verwenden, lagert man diese meist in eigene Templates aus und
bindet diese mit<link
linkend="language.function.include">{include}</link> ein. Was
geschieht aber wenn der Header einen seitenspezifischen Titel
haben soll? Smarty bietet die M<>glichkeit, dem eingebundenen
Template, Variablen zu <20>bergeben.
</para>
<example>
<title>Die Titel-Variable dem Header-Template zuweisen</title>
<para>
<filename>mainpage.tpl</filename>
</para>
<programlisting>
<![CDATA[
{include file="header.tpl" title="Erste Seite"} {include file="header.tpl" title="Hauptseite"}
{* template body hier *} {* template body hier *}
{include file="footer.tpl"} {include file="footer.tpl"}
]]>
</programlisting>
archiv.tpl <para>
------------ <filename>archives.tpl</filename>
</para>
<programlisting>
<![CDATA[
{config_load file="archiv.conf"} {config_load file="archiv.conf"}
{include file="header.tpl" title=#archivSeiteTitel#} {include file="header.tpl" title=#archivSeiteTitel#}
{* template body hier *} {* template body hier *}
{include file="footer.tpl"} {include file="footer.tpl"}
]]>
</programlisting>
header.tpl <para>
---------- <filename>header.tpl</filename>
&lt;HTML&gt; </para>
&lt;HEAD&gt; <programlisting>
&lt;TITLE&gt;{$title|default:"Nachrichten"}&lt;/TITLE&gt; <![CDATA[
&lt;/HEAD&gt; <html>
&lt;BODY&gt; <head>
<title>{$title|default:"Nachrichten"}</title>
</head>
footer.tpl <body>
---------- ]]>
&lt;/BODY&gt; </programlisting>
&lt;/HTML&gt;</programlisting> <para>
</example> <filename>footer.tpl</filename>
<para> </para>
Sobald die erste Seite geparsed wird, wird der Titel 'Erste Seite' <programlisting>
dem header.tpl &uuml;bergeben und fortan als Titel verwendet. Wenn <![CDATA[
die Archivseite ausgegeben wird, wird der Titel 'Archive' ausgegeben. </BODY>
Wie Sie sehen k&ouml;nnen, wird der Wert daf&uuml;r aus der Datei </HTML>
'archiv.conf' geladen und nicht von einem &uuml;bergebenen Wert. Der ]]>
Standardwert 'Nachrichten' wird verwendet, wenn die '$titel' leer ist. </programlisting>
Erneut wird daf&uuml;r der <emphasis>default</emphasis>-Modifikator angewandt. </example>
</para> <para>
</sect1> Sobald die erste Seite geparsed wird, wird der Titel 'Erste Seite'
<sect1 id="tips.dates"> dem <filename>header.tpl</filename> <20>bergeben und fortan als Titel
<title>Zeitangaben</title> verwendet. Wenn die Archivseite ausgegeben wird, wird der Titel
<para> 'Archive' ausgegeben. Wie Sie sehen k<>nnen, wird der Wert daf<61>r
Um dem Template Designer h&ouml;chstm&ouml;gliche Kontrolle &uuml;ber die Ausgabe aus der Datei <filename>'archiv_page.conf'</filename> geladen und
von Zeitangaben/Daten zu erm&ouml;glichen, ist es empfehlenswert Daten immer nicht von einem <20>bergebenen Wert. Der Standardwert 'Nachrichten'
als Timestamp zu &uuml;bergeben. Der Designer kann danach die Funktion wird verwendet, wenn die '$titel' leer ist. Erneut wird daf<61>r der
<link linkend="language.modifier.date.format">date_format</link> f&uuml;r <link
die Formatierung verwenden. linkend="language.modifier.default">default</link>-Modifikator
</para> angewandt.
<para> </para>
Bemerkung: Seit Smarty 1.4.0 ist es m&ouml;glich jede Timestamp zu </sect1>
&uuml;bergeben, welche mit strtotime() ausgewertet werden kann. Dazu <sect1 id="tips.dates">
geh&ouml;ren Unix-Timestamps und MySQL-Timestamps. <title>Zeitangaben</title>
</para> <para>
<example> Um dem Template Designer h<>chstm<74>gliche Kontrolle <20>ber die Ausgabe
<title>Die Verwendung von date_format</title> von Zeitangaben/Daten zu erm<72>glichen, ist es empfehlenswert Daten
<programlisting> immer als Timestamp zu <20>bergeben. Der Designer kann danach die
Funktion <link
linkend="language.modifier.date.format">date_format</link> f<>r die
Formatierung verwenden.
</para>
<para>
Bemerkung: Seit Smarty 1.4.0 ist es m<>glich jede Timestamp zu
<20>bergeben, welche mit strtotime() ausgewertet werden kann. Dazu
geh<65>ren Unix-Timestamps und MySQL-Timestamps.
</para>
<example>
<title>Die Verwendung von date_format</title>
<programlisting>
<![CDATA[ <![CDATA[
{$startDate|date_format} {$startDate|date_format}
]]> ]]>
</programlisting> </programlisting>
<para> <para>
AUSGABE: AUSGABE:
</para> </para>
<screen>
<screen>
<![CDATA[ <![CDATA[
Jan 4, 2001 Jan 4, 2001
]]> ]]>
@@ -151,21 +192,24 @@ AUSGABE:
<programlisting> <programlisting>
<![CDATA[ <![CDATA[
{if $datum1 < $datum2} {if $datum1 < $datum2}
... ...
{/if} {/if}
]]> ]]>
</programlisting> </programlisting>
</example> </example>
<para> <para>
Falls {html_select_date} in einem Template verwendet wird, hat der Programmierer Falls <link
die M&ouml;glichkeit den Wert wieder in ein Timestamp-Format zu &auml;ndern. Dies linkend="language.function.html.select.date">{html_select_date}</link>
kann zum Beispiel wie folgt gemacht werden: in einem Template verwendet wird, hat der Programmierer die
</para> M<>glichkeit den Wert wieder in ein Timestamp-Format zu
<example> <20>ndern. Dies kann zum Beispiel wie folgt gemacht werden:
<title>Formular Datum-Elemente nach Timestamp konvertieren</title> </para>
<programlisting> <example>
<title>Formular Datum-Elemente nach Timestamp konvertieren</title>
<programlisting role="php">
<![CDATA[ <![CDATA[
<?php <?php
// hierbei wird davon ausgegangen, dass Ihre Formular Elemente wie folgt benannt sind // hierbei wird davon ausgegangen, dass Ihre Formular Elemente wie folgt benannt sind
// startDate_Day, startDate_Month, startDate_Year // startDate_Day, startDate_Month, startDate_Year
@@ -173,219 +217,201 @@ $startDate = makeTimeStamp($startDate_Year,$startDate_Month,$startDate_Day);
function makeTimeStamp($year="",$month="",$day="") function makeTimeStamp($year="",$month="",$day="")
{ {
if(empty($year)) if(empty($year)) {
$year = strftime("%Y"); $year = strftime("%Y");
if(empty($month)) }
$month = strftime("%m"); if(empty($month)) {
if(empty($day)) $month = strftime("%m");
$day = strftime("%d"); }
if(empty($day)) {
return mktime(0,0,0,$month,$day,$year); $day = strftime("%d");
}
return mktime(0, 0, 0, $month, $day, $year);
} }
]]> ]]>
</programlisting> </programlisting>
</example>
</example> <para>
</sect1> Siehe auch
<sect1 id="tips.wap"> <link linkend="language.function.html.select.date">{html_select_date}</link>,
<title>WAP/WML</title> <link linkend="language.function.html.select.time">{html_select_time}</link>,
<para> <link linkend="language.modifier.date.format">date_format</link>
WAP/WML Templates verlangen, dass ein Content-Type Header im Template und <link linkend="language.variables.smarty.now">$smarty.now</link>,
angegeben wird. Der einfachste Weg um dies zu tun, w&auml;re, eine Funktion </para>
zu schreiben, welche den Header ausgibt. Falls sie den Caching Mechanismus </sect1>
verwenden, sollten Sie auf das 'insert'-Tag zur&uuml;ckgreifen ('insert'-Tags <sect1 id="tips.wap">
werden nicht gecached), um ein optimales Ergebnis zu erzielen. Achten Sie darauf, <title>WAP/WML</title>
dass vor der Ausgabe des Headers keine Daten an den Client gesendet werden, da <para>
die gesendeten Header-Daten ansonsten von Client verworfen werden. WAP/WML Templates verlangen, dass ein Content-Type Header im
</para> Template angegeben wird. Der einfachste Weg um dies zu tun, w<>re,
<example> eine Funktion zu schreiben, welche den Header ausgibt. Falls sie
<title>Die verwendung von 'insert' um einen WML Content-Type header zu senden</title> den Caching Mechanismus verwenden, sollten Sie auf das
<programlisting> 'insert'-Tag zur<75>ckgreifen ('insert'-Tags werden nicht gecached),
um ein optimales Ergebnis zu erzielen. Achten Sie darauf, dass vor
der Ausgabe des Headers keine Daten an den Client gesendet werden,
da die gesendeten Header-Daten ansonsten von Client verworfen
werden.
</para>
<example>
<title>Die verwendung von 'insert' um einen WML Content-Type header zu senden</title>
<programlisting>
<![CDATA[ <![CDATA[
<?php <?php
// stellen Sie sicher, dass Apache mit .wml Dateien umgehen kann! // stellen Sie sicher, dass Apache mit .wml Dateien umgehen kann!
// schreiben Sie folgende Funktion in Ihrer Applikation, oder in Smarty.addons.php // schreiben Sie folgende Funktion in Ihrer Applikation, oder in Smarty.addons.php
function insert_header() { function insert_header($params)
// this function expects $content argument {
// folgende Funktion erwartet ein $inhalt argument // folgende Funktion erwartet ein $inhalt argument
extract(func_get_arg(0)); if (empty($params['inhalt'])) {
if(empty($inhalt))
return; return;
header($inhalt); }
header($params['inhalt']);
return; return;
} }
?> ?>
]]> ]]>
</programlisting> </programlisting>
<para> <para>
// Ihr Template _muss_ danach wie folgt beginnen: Ihr Template <emphasis>muss</emphasis> danach wie folgt beginnen:
</para> </para>
<programlisting> <programlisting>
<![CDATA[ <![CDATA[
{insert name=header inhalt="Content-Type: text/vnd.wap.wml"} {insert name=header inhalt="Content-Type: text/vnd.wap.wml"}
&lt;?xml version="1.0"?&gt; <?xml version="1.0"?>
&lt;!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&gt; <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
&lt;!-- neues wml deck --&gt; <!-- neues wml deck -->
&lt;wml&gt; <wml>
&lt;!-- erste karte --&gt; <!-- erste karte -->
&lt;card&gt; <card>
&lt;do type="accept"&gt; <do type="accept">
&lt;go href="#zwei"/&gt; <go href="#zwei"/>
&lt;/do&gt; </do>
&lt;p&gt; <p>
Welcome to WAP with Smarty! Welcome to WAP with Smarty!
Willkommen bei WAP mit Smarty! Willkommen bei WAP mit Smarty!
OK klicken um weiterzugehen... OK klicken um weiterzugehen...
&lt;/p&gt; </p>
&lt;/card&gt; </card>
&lt;!-- zweite karte --&gt; <!-- zweite karte -->
&lt;card id="zwei"&gt; <card id="zwei">
&lt;p&gt; <p>
Einfach, oder? Einfach, oder?
&lt;/p&gt; </p>
&lt;/card&gt; </card>
&lt;/wml&gt; </wml>
]]> ]]>
</programlisting> </programlisting>
</example> </example>
</sect1> </sect1>
<sect1 id="tips.componentized.templates"> <sect1 id="tips.componentized.templates">
<title>Template/Script Komponenten</title> <title>Template/Script Komponenten</title>
<para> <para>
Dieser Tip ist nicht ausgiebig getestet, aber dennoch eine nette Idee. Verwendung auf eigene Gefahr. ;-) Normalerweise werden Variablen dem Template wie folgt zugewiesen:
</para> In Ihrer PHP-Applikation werden die Variablen zusammengestellt
<para> (zum Beispiel mit Datenbankabfragen). Danach kreieren Sie eine
Normalerweise werden Variablen dem Template wie folgt zugewiesen: Instanz von Smarty, weisen die Variablen mit <link
In Ihrer PHP-Applikation werden die Variablen zusammengestellt linkend="api.assign">assign()</link> zu und geben das Template mit
(zum Beispiel mit Datenbankabfragen). Danach kreieren Sie eine <link linkend="api.display">display()</link> aus. Wenn wir also
Instanz von Smarty, weisen die Variablen zu und geben das Template aus. zum Beispiel einen B<>rsenticker in unserem Template haben, stellen
Wenn wir also zum Beispiel einen B&ouml;rsenticker in unserem wir die Kursinformationen in unserer Anwendung zusammen, weisen
Template haben, stellen wir die Kursinformationen in unserer Anwendung Sie dem Template zu und geben es aus. W<>re es jedoch nicht nett
zusammen, weisen Sie dem Template zu und geben es aus. W&auml;re es jedoch nicht diesen B<>rsenticker einfach in ein Template einer anderen
nett diesen B&ouml;rsenticker einfach in ein Template einer anderen Applikation Applikation einbinden zu k<>nnen ohne deren Programmcode zu <20>ndern?
einbinden zu k&ouml;nnen ohne deren Programmcode zu &auml;ndern? </para>
</para> <para>
Sie k<>nnen PHP-Code mit {php}{/php} in Ihre Templates einbetten.
So k<>nnen Sie Templates erstellen, welche die Datenstrukturen zur
<para> Anweisung der eigenen Variablen enthalten. Durch die Bindung von
Sie k&ouml;nnen PHP-Code mit {php}{/php} in Ihre Templates einbetten. Template und Logik entsteht so eine eigenst<73>ndig lauff<66>hige
So k&ouml;nnen Sie Templates erstellen, welche die Datenstrukturen Komponente.
zur Anweisung der eigenen Variablen enthalten. Durch die Bindung von </para>
Template und Logik entsteht so eine eigenst&auml;ndig lauff&auml;hige Komponente. <example>
</para> <title>Template/Script Komponenten</title>
<example> <para>
<title>Template/Script Komponenten</title> <filename>function.load_ticker.php</filename> -
<programlisting> Diese Datei geh<65>rt ins <link
linkend="variable.plugins.dir">$plugins directory</link>
</para>
<programlisting role="php">
<![CDATA[ <![CDATA[
<?php <?php
// drop file "function.load_ticker.php" in plugin directory
// setup our function for fetching stock data // setup our function for fetching stock data
function fetch_ticker($symbol) function fetch_ticker($symbol)
{ {
// put logic here that fetches $ticker_info // put logic here that fetches $ticker_info
// from some ticker resource // from some ticker resource
return $ticker_info; return $ticker_info;
} }
function smarty_function_load_ticker($params, &$smarty) function smarty_function_load_ticker($params, $smarty)
{ {
// call the function // call the function
$ticker_info = fetch_ticker($params['symbol']); $ticker_info = fetch_ticker($params['symbol']);
// assign template variable // assign template variable
$smarty->assign($params['assign'], $ticker_info); $smarty->assign($params['assign'], $ticker_info);
} }
?> ?>
]]> ]]>
</programlisting> </programlisting>
<para>
<filename>index.tpl</filename>
</para>
<programlisting> <programlisting>
<![CDATA[ <![CDATA[
index.tpl
---------
{* Smarty *}
{load_ticker symbol="YHOO" assign="ticker"} {load_ticker symbol="YHOO" assign="ticker"}
Stock Name: {$ticker.name} Stock Price: {$ticker.price} Stock Name: {$ticker.name} Stock Price: {$ticker.price}
]]> ]]>
</programlisting> </programlisting>
</example> </example>
<para> </sect1>
Seit Smarty 1.5.0, gibt es einen noch einfacheren und auch saubereren Weg <sect1 id="tips.obfuscating.email">
in dem man die Logik mit {include_php ...} einbindet. So kann man weiterhin <title>Verschleierung von E-mail Adressen</title>
die Logik vom Design getrennt halten. Mehr Informationen gibt es in der <link linkend="language.function.include.php">include_php</link> Dokumentation. <para>
</para> Haben Sie sich auch schon gewundert, wie Ihre E-mail Adresse auf
<example> so viele Spam-Mailinglisten kommt? Ein Weg, wie Spammer E-mail
<title>Template/Script Komponenten mit include_php</title> Adressen sammeln, ist <20>ber Webseiten. Um dieses Problem zu
<programlisting> bek<65>mpfen, k<>nnen sie den 'mailto'-Plugin verwenden. Er <20>ndert
load_ticker.php die Zeichenfolge mit Javascript so, dass sie im HTML Quellcode
--------------- nicht lesbar ist, jedoch von jedem Browser wieder zusammengesetzt
werden kann. Den <link
linkend="language.function.mailto">{mailto}</link>-Plugin gibt es
im Smarty-Repository auf http://smarty.php.net. Laden sie den
Plugin herunter und speichern Sie ihn im 'plugins' Verzeichnis.
</para>
<example>
<title>Beispiel von verschleierung von E-mail Adressen</title>
<programlisting>
{* in index.tpl *}
&lt;?php Anfragen bitte an
// unsere funktion um die b&ouml;rsenkurse zu holen
function fetch_ticker($symbol,&amp;$ticker_name,&amp;$ticker_price) {
// hier wird $ticker_name und $ticker_price zugewiesen
}
// aufruf der funktion
fetch_ticker("YHOO",$ticker_name,$ticker_price);
// zuweisung der variablen
$this->assign("ticker_name",$ticker_name);
$this->assign("ticker_price",$ticker_price);
?&gt;
index.tpl
---------
{* Smarty *}
{include_php file="load_ticker.php"}
Symbol: {$ticker_name} Preis: {$ticker_price}</programlisting>
</example>
</sect1>
<sect1 id="tips.obfuscating.email">
<title>Verschleierung von E-mail Adressen</title>
<para>
Haben Sie sich auch schon gewundert, wie Ihre E-mail Adresse auf so viele
Spam-Mailinglisten kommt? Ein Weg, wie Spammer E-mail Adressen sammeln, ist
&uuml;ber Webseiten. Um dieses Problem zu bek&auml;mpfen, k&ouml;nnen sie
den 'mailto'-Plugin verwenden. Er &auml;ndert die Zeichenfolge mit Javascript
so, dass sie im HTML Quellcode nicht lesbar ist, jedoch von jedem Browser
wieder zusammengesetzt werden kann. Den 'mailto'-Plugin gibt es im Smarty-Repository
auf http://smarty.php.net. Laden sie den Plugin herunter und speichern Sie ihn im
'plugins' Verzeichnis.
</para>
<example>
<title>Beispiel von verschleierung von E-mail Adressen</title>
<programlisting>
index.tpl
---------
Fragen bitte an
{mailto address=$EmailAddress encode="javascript" subject="Hallo"} {mailto address=$EmailAddress encode="javascript" subject="Hallo"}
senden senden
</programlisting>
</programlisting> </example>
</example> <note>
<note> <title>Technische Details</title>
<title>Technische Details</title> <para>
<para> Die Codierung mit Javascript ist nicht sehr sicher, da ein
Die Codierung mit Javascript ist nicht sehr sicher, da ein m&ouml;glicher m<>glicher Spammer die Decodierung in sein Sammelprogramm
Spammer die Decodierung in sein Sammelprogramm einbauen k&ouml;nnte. Es wird jedoch damit einbauen k<EFBFBD>nnte. Es wird jedoch damit gerechnet, dass, da
gerechnet, dass, da Aufwand und Ertrag sich nicht decken, dies nicht oft der Fall ist. Aufwand und Ertrag sich nicht decken, dies nicht oft der Fall
</para> ist.
</note> </para>
</sect1> </note>
</chapter> <para>
Siehe auch <link linkend="language.modifier.escape">escape</link>
und <link linkend="language.function.mailto">{mailto}</link>.
</para>
</sect1>
</chapter>
<!-- Keep this comment at the end of the file <!-- Keep this comment at the end of the file
Local variables: Local variables:
mode: sgml mode: sgml

View File

@@ -1,53 +1,60 @@
<?xml version="1.0" encoding="iso-8859-1"?> <?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ --> <!-- $Revision$ -->
<!-- EN-Revision: 1.2 Maintainer: andreas Status: ready --> <!-- EN-Revision: 1.4 Maintainer: andreas Status: ready -->
<chapter id="troubleshooting"> <chapter id="troubleshooting">
<title>Probleml&ouml;sung</title> <title>Probleml&ouml;sung</title>
<para></para> <para></para>
<sect1 id="smarty.php.errors"> <sect1 id="smarty.php.errors">
<title>Smarty/PHP Fehler</title> <title>Smarty/PHP Fehler</title>
<para> <para>
Smarty kann verschiedene Fehler-Typen, wie fehlende Tag-Attribute oder syntaktisch falsche Variablen-Namen abfangen. Wenn dies geschieht, wird Ihnen eine Fehlermeldung ausgegeben. Beispiel: Smarty kann verschiedene Fehler-Typen, wie fehlende Tag-Attribute
</para> oder syntaktisch falsche Variablen-Namen abfangen. Wenn dies
geschieht, wird Ihnen eine Fehlermeldung ausgegeben. Beispiel:
<example> </para>
<title>Smarty Fehler</title> <example>
<programlisting> <title>Smarty Fehler</title>
<screen>
<![CDATA[
Warning: Smarty: [in index.tpl line 4]: syntax error: unknown tag - '%blah' Warning: Smarty: [in index.tpl line 4]: syntax error: unknown tag - '%blah'
in /path/to/smarty/Smarty.class.php on line 1041 in /path/to/smarty/Smarty.class.php on line 1041
Fatal error: Smarty: [in index.tpl line 28]: syntax error: missing section name Fatal error: Smarty: [in index.tpl line 28]: syntax error: missing section name
in /path/to/smarty/Smarty.class.php on line 1041</programlisting> in /path/to/smarty/Smarty.class.php on line 1041</programlisting>
</example> ]]>
</screen>
</example>
<para>
In der ersten Zeile zeigt Smarty den Template-Namen, die
Zeilennummer und den Fehler an. Darauf folgt die betroffene Zeile
in der Smarty Klasse welche den Fehler erzeugt hat.
</para>
<para>
Es gibt gewisse Fehlerkonditionen, die Smarty nicht abfangen kann (bsp: fehlende End-Tags). Diese Fehler
resultieren jedoch normalerweise in einem PHP-'compile-time' Fehler.
</para>
<para> <example>
In der ersten Zeile zeigt Smarty den Template-Namen, die Zeilennummer <title>PHP Syntaxfehler</title>
und den Fehler an. Darauf folgt die betroffene Zeile in der Smarty Klasse welche den Fehler erzeugt hat. <screen>
</para> <![CDATA[
<para>
Es gibt gewisse Fehlerkonditionen, die Smarty nicht abfangen kann (bsp: fehlende End-Tags). Diese Fehler
resultieren jedoch normalerweise in einem PHP-'compile-time' Fehler.
</para>
<example>
<title>PHP Syntaxfehler</title>
<programlisting>
Parse error: parse error in /path/to/smarty/templates_c/index.tpl.php on line 75</programlisting> Parse error: parse error in /path/to/smarty/templates_c/index.tpl.php on line 75</programlisting>
</example> ]]>
</screen>
<para> </example>
Wenn ein PHP Syntaxfehler auftritt, wird Ihnen die Zeilennummer des <para>
betroffenen PHP Skriptes ausgegeben, nicht die des Templates. Normalerweise Wenn ein PHP Syntaxfehler auftritt, wird Ihnen die Zeilennummer
k&ouml;nnen Sie jedoch das Template anschauen um den Fehler zu lokalisieren. des betroffenen PHP Skriptes ausgegeben, nicht die des
Schauen sie insbesondere auf Folgendes: fehlende End-Tags in einer {if}{/if} Anweisung Templates. Normalerweise k&ouml;nnen Sie jedoch das Template
oder in einer {section}{/section} und die Logik eines {if} Blocks. Falls Sie den Fehler anschauen um den Fehler zu lokalisieren. Schauen sie insbesondere
so nicht finden, k&ouml;nnen Sie auch das kompilierte Skript &ouml;ffnen und zu der auf Folgendes: fehlende End-Tags in einer {if}{/if} Anweisung oder
betreffenden Zeilennummer springen um herauszufinden welcher Teil des Templates in einer {section}{/section} und die Logik eines {if}
den Fehler enth&auml;lt. Blocks. Falls Sie den Fehler so nicht finden, k&ouml;nnen Sie auch
</para> das kompilierte Skript &ouml;ffnen und zu der betreffenden
</sect1> Zeilennummer springen um herauszufinden welcher Teil des Templates
</chapter> den Fehler enth&auml;lt.
</para>
</sect1>
</chapter>
<!-- Keep this comment at the end of the file <!-- Keep this comment at the end of the file
Local variables: Local variables:
mode: sgml mode: sgml

View File

@@ -15,7 +15,7 @@
<entry>Parameter Position</entry> <entry>Parameter Position</entry>
<entry>Typ</entry> <entry>Typ</entry>
<entry>Ben<EFBFBD>tigt</entry> <entry>Ben<EFBFBD>tigt</entry>
<entry>Vorgabe</entry> <entry>Standardwert</entry>
<entry>Beschreibung</entry> <entry>Beschreibung</entry>
</row> </row>
</thead> </thead>