mirror of
https://github.com/smarty-php/smarty.git
synced 2025-08-07 11:54:26 +02:00
sync with en
This commit is contained in:
@@ -1,136 +1,177 @@
|
||||
<?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$ -->
|
||||
<chapter id="tips">
|
||||
<title>Tips & Tricks</title>
|
||||
<chapter id="tips">
|
||||
<title>Tips & Tricks</title>
|
||||
<para>
|
||||
</para>
|
||||
<sect1 id="tips.blank.var.handling">
|
||||
<title>Handhabung unangewiesener Variablen</title>
|
||||
<para>
|
||||
Manchmal m<>chten Sie vielleicht, dass anstatt einer Leerstelle ein
|
||||
Standardwert ausgegeben wird - zum Beispiel um im
|
||||
Tabellenhintergrund "&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>
|
||||
<sect1 id="tips.blank.var.handling">
|
||||
<title>Handhabung unangewiesener Variablen</title>
|
||||
<para>
|
||||
Manchmal möchten Sie vielleicht, dass anstatt einer Leerstelle ein Standardwert ausgegeben wird - zum
|
||||
Beispiel um im Tabellenhintergrund "&nbsp;" auszugeben, damit er korrekt angezeigt wird. Damit dafür
|
||||
keine {if} Anweisung verwendet werden muss, gibt es in Smarty eine Abkürzung: die Verwendung des <emphasis>default</emphasis>
|
||||
Variablen-Modifikators.
|
||||
</para>
|
||||
<example>
|
||||
<title>"&nbsp;" ausgeben wenn eine Variable nicht zugewiesen ist</title>
|
||||
<programlisting>
|
||||
|
||||
<example>
|
||||
<title>"&nbsp;" ausgeben wenn eine Variable nicht zugewiesen ist</title>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
{* kompliziert *}
|
||||
|
||||
{if $titel eq ""}
|
||||
&nbsp;
|
||||
&nbsp;
|
||||
{else}
|
||||
{$titel}
|
||||
{$titel}
|
||||
{/if}
|
||||
|
||||
|
||||
{* einfach *}
|
||||
|
||||
{$titel|default:"&nbsp;"}</programlisting>
|
||||
</example>
|
||||
</sect1>
|
||||
{$titel|default:"&nbsp;"}
|
||||
]]>
|
||||
</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">
|
||||
<title>Handhabung von Standardwerten</title>
|
||||
<para>
|
||||
Wenn eine Variable in einem Template häufig zum Einsatz kommt,
|
||||
kann es ein bisschen störend wirken, den 'default'-Modifikator jedes mal anzuwenden.
|
||||
Sie können dies umgehen, indem Sie der Variable mit der <link linkend="language.function.assign">assign</link> Funktion
|
||||
einen Standardwert zuweisen.
|
||||
</para>
|
||||
<example>
|
||||
<title>Zuweisen des Standardwertes einer Variable</title>
|
||||
<programlisting>
|
||||
<sect1 id="tips.default.var.handling">
|
||||
<title>Handhabung von Standardwerten</title>
|
||||
<para>
|
||||
Wenn eine Variable in einem Template h<EFBFBD>ufig zum Einsatz kommt,
|
||||
kann es ein bisschen st<EFBFBD>rend wirken, den <link
|
||||
linkend="language.modifier.default"><emphasis>default</emphasis></link>-Modifikator
|
||||
jedes mal anzuwenden. Sie k<>nnen dies umgehen, indem Sie der
|
||||
Variable mit der <link
|
||||
linkend="language.function.assign">{assign}</link> Funktion einen
|
||||
Standardwert zuweisen.
|
||||
</para>
|
||||
<example>
|
||||
<title>Zuweisen des Standardwertes einer Variable</title>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
{* schreiben sie dieses statement an den Anfang des Templates *}
|
||||
{assign var="titel" value=$titel|default:"kein Titel"}
|
||||
|
||||
{* fall 'titel' bei der Anweisung leer war, enthä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}
|
||||
</programlisting>
|
||||
</example>
|
||||
</sect1>
|
||||
<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 ein. Was
|
||||
geschieht aber wenn der Header einen seitenspezifischen Titel haben soll?
|
||||
Smarty bietet die Möglichkeit, dem eingebundenen Template, Variablen
|
||||
zu übergeben.
|
||||
</para>
|
||||
<example>
|
||||
<title>Die Titel-Variable dem Header-Template zuweisen</title>
|
||||
<programlisting>
|
||||
]]>
|
||||
</programlisting>
|
||||
</example>
|
||||
<para>
|
||||
Siehe auch <link linkend="language.modifier.default">default
|
||||
(Standardwert)</link> und <link
|
||||
linkend="tips.blank.var.handling">Handhabung nicht zugewiesener
|
||||
Variablen</link>.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
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 *}
|
||||
{include file="footer.tpl"}
|
||||
|
||||
|
||||
archiv.tpl
|
||||
------------
|
||||
]]>
|
||||
</programlisting>
|
||||
<para>
|
||||
<filename>archives.tpl</filename>
|
||||
</para>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
|
||||
{config_load file="archiv.conf"}
|
||||
{include file="header.tpl" title=#archivSeiteTitel#}
|
||||
{* template body hier *}
|
||||
{include file="footer.tpl"}
|
||||
|
||||
|
||||
header.tpl
|
||||
----------
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE>{$title|default:"Nachrichten"}</TITLE>
|
||||
</HEAD>
|
||||
<BODY>
|
||||
|
||||
|
||||
footer.tpl
|
||||
----------
|
||||
</BODY>
|
||||
</HTML></programlisting>
|
||||
</example>
|
||||
<para>
|
||||
Sobald die erste Seite geparsed wird, wird der Titel 'Erste Seite'
|
||||
dem header.tpl übergeben und fortan als Titel verwendet. Wenn
|
||||
die Archivseite ausgegeben wird, wird der Titel 'Archive' ausgegeben.
|
||||
Wie Sie sehen können, wird der Wert dafür aus der Datei
|
||||
'archiv.conf' geladen und nicht von einem übergebenen Wert. Der
|
||||
Standardwert 'Nachrichten' wird verwendet, wenn die '$titel' leer ist.
|
||||
Erneut wird dafür der <emphasis>default</emphasis>-Modifikator angewandt.
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="tips.dates">
|
||||
<title>Zeitangaben</title>
|
||||
<para>
|
||||
Um dem Template Designer höchstmögliche Kontrolle über die Ausgabe
|
||||
von Zeitangaben/Daten zu ermöglichen, ist es empfehlenswert Daten immer
|
||||
als Timestamp zu ü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
|
||||
übergeben, welche mit strtotime() ausgewertet werden kann. Dazu
|
||||
gehören Unix-Timestamps und MySQL-Timestamps.
|
||||
</para>
|
||||
<example>
|
||||
<title>Die Verwendung von date_format</title>
|
||||
<programlisting>
|
||||
]]>
|
||||
</programlisting>
|
||||
<para>
|
||||
<filename>header.tpl</filename>
|
||||
</para>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
<html>
|
||||
<head>
|
||||
<title>{$title|default:"Nachrichten"}</title>
|
||||
</head>
|
||||
<body>
|
||||
]]>
|
||||
</programlisting>
|
||||
<para>
|
||||
<filename>footer.tpl</filename>
|
||||
</para>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
</BODY>
|
||||
</HTML>
|
||||
]]>
|
||||
</programlisting>
|
||||
</example>
|
||||
<para>
|
||||
Sobald die erste Seite geparsed wird, wird der Titel 'Erste Seite'
|
||||
dem <filename>header.tpl</filename> <20>bergeben und fortan als Titel
|
||||
verwendet. Wenn die Archivseite ausgegeben wird, wird der Titel
|
||||
'Archive' ausgegeben. Wie Sie sehen k<>nnen, wird der Wert daf<61>r
|
||||
aus der Datei <filename>'archiv_page.conf'</filename> geladen und
|
||||
nicht von einem <20>bergebenen Wert. Der Standardwert 'Nachrichten'
|
||||
wird verwendet, wenn die '$titel' leer ist. Erneut wird daf<61>r der
|
||||
<link
|
||||
linkend="language.modifier.default">default</link>-Modifikator
|
||||
angewandt.
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="tips.dates">
|
||||
<title>Zeitangaben</title>
|
||||
<para>
|
||||
Um dem Template Designer h<>chstm<74>gliche Kontrolle <20>ber die Ausgabe
|
||||
von Zeitangaben/Daten zu erm<72>glichen, ist es empfehlenswert Daten
|
||||
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[
|
||||
{$startDate|date_format}
|
||||
]]>
|
||||
</programlisting>
|
||||
<para>
|
||||
AUSGABE:
|
||||
</para>
|
||||
|
||||
<screen>
|
||||
</programlisting>
|
||||
<para>
|
||||
AUSGABE:
|
||||
</para>
|
||||
<screen>
|
||||
<![CDATA[
|
||||
Jan 4, 2001
|
||||
]]>
|
||||
@@ -151,21 +192,24 @@ AUSGABE:
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
{if $datum1 < $datum2}
|
||||
...
|
||||
...
|
||||
{/if}
|
||||
]]>
|
||||
</programlisting>
|
||||
</example>
|
||||
<para>
|
||||
Falls {html_select_date} in einem Template verwendet wird, hat der Programmierer
|
||||
die Möglichkeit den Wert wieder in ein Timestamp-Format zu ändern. Dies
|
||||
kann zum Beispiel wie folgt gemacht werden:
|
||||
</para>
|
||||
<example>
|
||||
<title>Formular Datum-Elemente nach Timestamp konvertieren</title>
|
||||
<programlisting>
|
||||
</programlisting>
|
||||
</example>
|
||||
<para>
|
||||
Falls <link
|
||||
linkend="language.function.html.select.date">{html_select_date}</link>
|
||||
in einem Template verwendet wird, hat der Programmierer die
|
||||
M<>glichkeit den Wert wieder in ein Timestamp-Format zu
|
||||
<20>ndern. Dies kann zum Beispiel wie folgt gemacht werden:
|
||||
</para>
|
||||
<example>
|
||||
<title>Formular Datum-Elemente nach Timestamp konvertieren</title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
|
||||
// hierbei wird davon ausgegangen, dass Ihre Formular Elemente wie folgt benannt sind
|
||||
// startDate_Day, startDate_Month, startDate_Year
|
||||
|
||||
@@ -173,219 +217,201 @@ $startDate = makeTimeStamp($startDate_Year,$startDate_Month,$startDate_Day);
|
||||
|
||||
function makeTimeStamp($year="",$month="",$day="")
|
||||
{
|
||||
if(empty($year))
|
||||
$year = strftime("%Y");
|
||||
if(empty($month))
|
||||
$month = strftime("%m");
|
||||
if(empty($day))
|
||||
$day = strftime("%d");
|
||||
|
||||
return mktime(0,0,0,$month,$day,$year);
|
||||
if(empty($year)) {
|
||||
$year = strftime("%Y");
|
||||
}
|
||||
if(empty($month)) {
|
||||
$month = strftime("%m");
|
||||
}
|
||||
if(empty($day)) {
|
||||
$day = strftime("%d");
|
||||
}
|
||||
return mktime(0, 0, 0, $month, $day, $year);
|
||||
}
|
||||
]]>
|
||||
</programlisting>
|
||||
</programlisting>
|
||||
</example>
|
||||
|
||||
</example>
|
||||
</sect1>
|
||||
<sect1 id="tips.wap">
|
||||
<title>WAP/WML</title>
|
||||
<para>
|
||||
WAP/WML Templates verlangen, dass ein Content-Type Header im Template
|
||||
angegeben wird. Der einfachste Weg um dies zu tun, wäre, eine Funktion
|
||||
zu schreiben, welche den Header ausgibt. Falls sie den Caching Mechanismus
|
||||
verwenden, sollten Sie auf das 'insert'-Tag zurü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>
|
||||
<para>
|
||||
Siehe auch
|
||||
<link linkend="language.function.html.select.date">{html_select_date}</link>,
|
||||
<link linkend="language.function.html.select.time">{html_select_time}</link>,
|
||||
<link linkend="language.modifier.date.format">date_format</link>
|
||||
und <link linkend="language.variables.smarty.now">$smarty.now</link>,
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="tips.wap">
|
||||
<title>WAP/WML</title>
|
||||
<para>
|
||||
WAP/WML Templates verlangen, dass ein Content-Type Header im
|
||||
Template angegeben wird. Der einfachste Weg um dies zu tun, w<>re,
|
||||
eine Funktion zu schreiben, welche den Header ausgibt. Falls sie
|
||||
den Caching Mechanismus verwenden, sollten Sie auf das
|
||||
'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[
|
||||
<?php
|
||||
|
||||
// stellen Sie sicher, dass Apache mit .wml Dateien umgehen kann!
|
||||
// schreiben Sie folgende Funktion in Ihrer Applikation, oder in Smarty.addons.php
|
||||
function insert_header() {
|
||||
// this function expects $content argument
|
||||
function insert_header($params)
|
||||
{
|
||||
// folgende Funktion erwartet ein $inhalt argument
|
||||
extract(func_get_arg(0));
|
||||
if(empty($inhalt))
|
||||
if (empty($params['inhalt'])) {
|
||||
return;
|
||||
header($inhalt);
|
||||
}
|
||||
header($params['inhalt']);
|
||||
return;
|
||||
}
|
||||
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
<para>
|
||||
// Ihr Template _muss_ danach wie folgt beginnen:
|
||||
</para>
|
||||
</programlisting>
|
||||
<para>
|
||||
Ihr Template <emphasis>muss</emphasis> danach wie folgt beginnen:
|
||||
</para>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
{insert name=header inhalt="Content-Type: text/vnd.wap.wml"}
|
||||
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
|
||||
|
||||
<!-- neues wml deck -->
|
||||
<wml>
|
||||
<!-- erste karte -->
|
||||
<card>
|
||||
<do type="accept">
|
||||
<go href="#zwei"/>
|
||||
</do>
|
||||
<p>
|
||||
Welcome to WAP with Smarty!
|
||||
Willkommen bei WAP mit Smarty!
|
||||
OK klicken um weiterzugehen...
|
||||
</p>
|
||||
</card>
|
||||
<!-- zweite karte -->
|
||||
<card id="zwei">
|
||||
<p>
|
||||
Einfach, oder?
|
||||
</p>
|
||||
</card>
|
||||
</wml>
|
||||
<!-- neues wml deck -->
|
||||
<wml>
|
||||
<!-- erste karte -->
|
||||
<card>
|
||||
<do type="accept">
|
||||
<go href="#zwei"/>
|
||||
</do>
|
||||
<p>
|
||||
Welcome to WAP with Smarty!
|
||||
Willkommen bei WAP mit Smarty!
|
||||
OK klicken um weiterzugehen...
|
||||
</p>
|
||||
</card>
|
||||
<!-- zweite karte -->
|
||||
<card id="zwei">
|
||||
<p>
|
||||
Einfach, oder?
|
||||
</p>
|
||||
</card>
|
||||
</wml>
|
||||
]]>
|
||||
</programlisting>
|
||||
</example>
|
||||
</sect1>
|
||||
<sect1 id="tips.componentized.templates">
|
||||
<title>Template/Script Komponenten</title>
|
||||
<para>
|
||||
Dieser Tip ist nicht ausgiebig getestet, aber dennoch eine nette Idee. Verwendung auf eigene Gefahr. ;-)
|
||||
</para>
|
||||
<para>
|
||||
Normalerweise werden Variablen dem Template wie folgt zugewiesen:
|
||||
In Ihrer PHP-Applikation werden die Variablen zusammengestellt
|
||||
(zum Beispiel mit Datenbankabfragen). Danach kreieren Sie eine
|
||||
Instanz von Smarty, weisen die Variablen zu und geben das Template aus.
|
||||
Wenn wir also zum Beispiel einen Börsenticker in unserem
|
||||
Template haben, stellen wir die Kursinformationen in unserer Anwendung
|
||||
zusammen, weisen Sie dem Template zu und geben es aus. Wäre es jedoch nicht
|
||||
nett diesen Börsenticker einfach in ein Template einer anderen Applikation
|
||||
einbinden zu können ohne deren Programmcode zu ändern?
|
||||
</para>
|
||||
|
||||
|
||||
<para>
|
||||
Sie können PHP-Code mit {php}{/php} in Ihre Templates einbetten.
|
||||
So können Sie Templates erstellen, welche die Datenstrukturen
|
||||
zur Anweisung der eigenen Variablen enthalten. Durch die Bindung von
|
||||
Template und Logik entsteht so eine eigenständig lauffähige Komponente.
|
||||
</para>
|
||||
<example>
|
||||
<title>Template/Script Komponenten</title>
|
||||
<programlisting>
|
||||
</programlisting>
|
||||
</example>
|
||||
</sect1>
|
||||
<sect1 id="tips.componentized.templates">
|
||||
<title>Template/Script Komponenten</title>
|
||||
<para>
|
||||
Normalerweise werden Variablen dem Template wie folgt zugewiesen:
|
||||
In Ihrer PHP-Applikation werden die Variablen zusammengestellt
|
||||
(zum Beispiel mit Datenbankabfragen). Danach kreieren Sie eine
|
||||
Instanz von Smarty, weisen die Variablen mit <link
|
||||
linkend="api.assign">assign()</link> zu und geben das Template mit
|
||||
<link linkend="api.display">display()</link> aus. Wenn wir also
|
||||
zum Beispiel einen B<>rsenticker in unserem Template haben, stellen
|
||||
wir die Kursinformationen in unserer Anwendung zusammen, weisen
|
||||
Sie dem Template zu und geben es aus. W<>re es jedoch nicht nett
|
||||
diesen B<>rsenticker einfach in ein Template einer anderen
|
||||
Applikation einbinden zu k<>nnen ohne deren Programmcode zu <20>ndern?
|
||||
</para>
|
||||
<para>
|
||||
Sie k<>nnen PHP-Code mit {php}{/php} in Ihre Templates einbetten.
|
||||
So k<>nnen Sie Templates erstellen, welche die Datenstrukturen zur
|
||||
Anweisung der eigenen Variablen enthalten. Durch die Bindung von
|
||||
Template und Logik entsteht so eine eigenst<73>ndig lauff<66>hige
|
||||
Komponente.
|
||||
</para>
|
||||
<example>
|
||||
<title>Template/Script Komponenten</title>
|
||||
<para>
|
||||
<filename>function.load_ticker.php</filename> -
|
||||
Diese Datei geh<65>rt ins <link
|
||||
linkend="variable.plugins.dir">$plugins directory</link>
|
||||
</para>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
|
||||
// drop file "function.load_ticker.php" in plugin directory
|
||||
|
||||
// setup our function for fetching stock data
|
||||
function fetch_ticker($symbol)
|
||||
{
|
||||
// put logic here that fetches $ticker_info
|
||||
// from some ticker resource
|
||||
return $ticker_info;
|
||||
// put logic here that fetches $ticker_info
|
||||
// from some ticker resource
|
||||
return $ticker_info;
|
||||
}
|
||||
|
||||
function smarty_function_load_ticker($params, &$smarty)
|
||||
function smarty_function_load_ticker($params, $smarty)
|
||||
{
|
||||
// call the function
|
||||
$ticker_info = fetch_ticker($params['symbol']);
|
||||
// call the function
|
||||
$ticker_info = fetch_ticker($params['symbol']);
|
||||
|
||||
// assign template variable
|
||||
$smarty->assign($params['assign'], $ticker_info);
|
||||
// assign template variable
|
||||
$smarty->assign($params['assign'], $ticker_info);
|
||||
}
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
<para>
|
||||
<filename>index.tpl</filename>
|
||||
</para>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
index.tpl
|
||||
---------
|
||||
|
||||
{* Smarty *}
|
||||
|
||||
{load_ticker symbol="YHOO" assign="ticker"}
|
||||
|
||||
Stock Name: {$ticker.name} Stock Price: {$ticker.price}
|
||||
]]>
|
||||
</programlisting>
|
||||
</example>
|
||||
<para>
|
||||
Seit Smarty 1.5.0, gibt es einen noch einfacheren und auch saubereren Weg
|
||||
in dem man die Logik mit {include_php ...} einbindet. So kann man weiterhin
|
||||
die Logik vom Design getrennt halten. Mehr Informationen gibt es in der <link linkend="language.function.include.php">include_php</link> Dokumentation.
|
||||
</para>
|
||||
<example>
|
||||
<title>Template/Script Komponenten mit include_php</title>
|
||||
<programlisting>
|
||||
load_ticker.php
|
||||
---------------
|
||||
</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 <20>ber Webseiten. Um dieses Problem zu
|
||||
bek<65>mpfen, k<>nnen sie den 'mailto'-Plugin verwenden. Er <20>ndert
|
||||
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 *}
|
||||
|
||||
<?php
|
||||
// unsere funktion um die börsenkurse zu holen
|
||||
function fetch_ticker($symbol,&$ticker_name,&$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);
|
||||
?>
|
||||
|
||||
|
||||
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
|
||||
über Webseiten. Um dieses Problem zu bekämpfen, können sie
|
||||
den 'mailto'-Plugin verwenden. Er ä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
|
||||
Anfragen bitte an
|
||||
{mailto address=$EmailAddress encode="javascript" subject="Hallo"}
|
||||
senden
|
||||
|
||||
</programlisting>
|
||||
</example>
|
||||
<note>
|
||||
<title>Technische Details</title>
|
||||
<para>
|
||||
Die Codierung mit Javascript ist nicht sehr sicher, da ein möglicher
|
||||
Spammer die Decodierung in sein Sammelprogramm einbauen könnte. Es wird jedoch damit
|
||||
gerechnet, dass, da Aufwand und Ertrag sich nicht decken, dies nicht oft der Fall ist.
|
||||
</para>
|
||||
</note>
|
||||
</sect1>
|
||||
</chapter>
|
||||
</programlisting>
|
||||
</example>
|
||||
<note>
|
||||
<title>Technische Details</title>
|
||||
<para>
|
||||
Die Codierung mit Javascript ist nicht sehr sicher, da ein
|
||||
m<>glicher Spammer die Decodierung in sein Sammelprogramm
|
||||
einbauen k<EFBFBD>nnte. Es wird jedoch damit gerechnet, dass, da
|
||||
Aufwand und Ertrag sich nicht decken, dies nicht oft der Fall
|
||||
ist.
|
||||
</para>
|
||||
</note>
|
||||
<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
|
||||
Local variables:
|
||||
mode: sgml
|
||||
|
@@ -1,53 +1,60 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- $Revision$ -->
|
||||
<!-- EN-Revision: 1.2 Maintainer: andreas Status: ready -->
|
||||
<!-- EN-Revision: 1.4 Maintainer: andreas Status: ready -->
|
||||
<chapter id="troubleshooting">
|
||||
<title>Problemlösung</title>
|
||||
<para></para>
|
||||
<sect1 id="smarty.php.errors">
|
||||
<title>Smarty/PHP Fehler</title>
|
||||
<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:
|
||||
</para>
|
||||
|
||||
<example>
|
||||
<title>Smarty Fehler</title>
|
||||
<programlisting>
|
||||
<title>Problemlösung</title>
|
||||
<para></para>
|
||||
<sect1 id="smarty.php.errors">
|
||||
<title>Smarty/PHP Fehler</title>
|
||||
<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:
|
||||
</para>
|
||||
<example>
|
||||
<title>Smarty Fehler</title>
|
||||
<screen>
|
||||
<![CDATA[
|
||||
Warning: Smarty: [in index.tpl line 4]: syntax error: unknown tag - '%blah'
|
||||
in /path/to/smarty/Smarty.class.php on line 1041
|
||||
|
||||
Fatal error: Smarty: [in index.tpl line 28]: syntax error: missing section name
|
||||
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>
|
||||
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>
|
||||
|
||||
<example>
|
||||
<title>PHP Syntaxfehler</title>
|
||||
<programlisting>
|
||||
<example>
|
||||
<title>PHP Syntaxfehler</title>
|
||||
<screen>
|
||||
<![CDATA[
|
||||
Parse error: parse error in /path/to/smarty/templates_c/index.tpl.php on line 75</programlisting>
|
||||
</example>
|
||||
|
||||
<para>
|
||||
Wenn ein PHP Syntaxfehler auftritt, wird Ihnen die Zeilennummer des
|
||||
betroffenen PHP Skriptes ausgegeben, nicht die des Templates. Normalerweise
|
||||
können Sie jedoch das Template anschauen um den Fehler zu lokalisieren.
|
||||
Schauen sie insbesondere auf Folgendes: fehlende End-Tags in einer {if}{/if} Anweisung
|
||||
oder in einer {section}{/section} und die Logik eines {if} Blocks. Falls Sie den Fehler
|
||||
so nicht finden, können Sie auch das kompilierte Skript öffnen und zu der
|
||||
betreffenden Zeilennummer springen um herauszufinden welcher Teil des Templates
|
||||
den Fehler enthält.
|
||||
</para>
|
||||
</sect1>
|
||||
</chapter>
|
||||
]]>
|
||||
</screen>
|
||||
</example>
|
||||
<para>
|
||||
Wenn ein PHP Syntaxfehler auftritt, wird Ihnen die Zeilennummer
|
||||
des betroffenen PHP Skriptes ausgegeben, nicht die des
|
||||
Templates. Normalerweise können Sie jedoch das Template
|
||||
anschauen um den Fehler zu lokalisieren. Schauen sie insbesondere
|
||||
auf Folgendes: fehlende End-Tags in einer {if}{/if} Anweisung oder
|
||||
in einer {section}{/section} und die Logik eines {if}
|
||||
Blocks. Falls Sie den Fehler so nicht finden, können Sie auch
|
||||
das kompilierte Skript öffnen und zu der betreffenden
|
||||
Zeilennummer springen um herauszufinden welcher Teil des Templates
|
||||
den Fehler enthält.
|
||||
</para>
|
||||
</sect1>
|
||||
</chapter>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
|
@@ -15,7 +15,7 @@
|
||||
<entry>Parameter Position</entry>
|
||||
<entry>Typ</entry>
|
||||
<entry>Ben<EFBFBD>tigt</entry>
|
||||
<entry>Vorgabe</entry>
|
||||
<entry>Standardwert</entry>
|
||||
<entry>Beschreibung</entry>
|
||||
</row>
|
||||
</thead>
|
||||
|
Reference in New Issue
Block a user