Files
smarty/docs/de/appendixes/tips.xml

427 lines
12 KiB
XML
Raw Normal View History

2004-03-28 15:20:52 +00:00
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ -->
2006-03-16 13:25:46 +00:00
<!-- EN-Revision: 1.10 Maintainer: messju Status: ready -->
2005-06-20 14:44:30 +00:00
<chapter id="tips">
<title>Tips &amp; Tricks</title>
<para>
</para>
<sect1 id="tips.blank.var.handling">
<title>Handhabung unangewiesener Variablen</title>
2004-03-28 15:20:52 +00:00
<para>
2005-06-20 14:44:30 +00:00
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.
2004-03-28 15:20:52 +00:00
</para>
2005-06-20 14:44:30 +00:00
<example>
<title>"&amp;nbsp;" ausgeben wenn eine Variable nicht zugewiesen ist</title>
<programlisting>
<![CDATA[
2006-03-16 13:25:46 +00:00
{* die lange Variante: *}
2004-03-28 15:20:52 +00:00
{if $titel eq ""}
2006-03-16 13:25:46 +00:00
&nbsp;
2004-03-28 15:20:52 +00:00
{else}
2006-03-16 13:25:46 +00:00
{$titel}
2004-03-28 15:20:52 +00:00
{/if}
2006-03-16 13:25:46 +00:00
{* k<>rzer: *}
{$titel|default:"&nbsp;"}
2005-06-20 14:44:30 +00:00
]]>
</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>
2004-03-28 15:20:52 +00:00
2005-06-20 14:44:30 +00:00
<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<73>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[
2004-03-28 15:20:52 +00:00
{* schreiben sie dieses statement an den Anfang des Templates *}
{assign var="titel" value=$titel|default:"kein Titel"}
2005-06-20 14:44:30 +00:00
{* falls 'titel' bei der Anweisung leer war, enth<74>lt es nun den Wert
'kein Titel' wenn Sie es ausgeben *}
2004-03-28 15:20:52 +00:00
{$titel}
2005-06-20 14:44:30 +00:00
]]>
</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>
2004-03-28 15:20:52 +00:00
2005-06-20 14:44:30 +00:00
<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
2006-03-16 13:25:46 +00:00
Template, Variablen als <link
linkend="language.syntax.attributes">Attribute</link> zu
<20>bergeben.
2005-06-20 14:44:30 +00:00
</para>
<example>
<title>Die Titel-Variable dem Header-Template zuweisen</title>
<para>
2006-03-16 13:25:46 +00:00
<filename>mainpage.tpl</filename> - Beim Aufbau der Hauptseite
wird der Titel "Hauptseite" an <filename>header.tpl</filename>
<20>bergeben und dort verwendet.
2005-06-20 14:44:30 +00:00
</para>
<programlisting>
<![CDATA[
{include file="header.tpl" title="Hauptseite"}
2004-03-28 15:20:52 +00:00
{* template body hier *}
{include file="footer.tpl"}
2005-06-20 14:44:30 +00:00
]]>
</programlisting>
<para>
<filename>archives.tpl</filename>
</para>
<programlisting>
<![CDATA[
2004-03-28 15:20:52 +00:00
{config_load file="archiv.conf"}
{include file="header.tpl" title=#archivSeiteTitel#}
{* template body hier *}
{include file="footer.tpl"}
2005-06-20 14:44:30 +00:00
]]>
</programlisting>
<para>
2006-03-16 13:25:46 +00:00
<filename>header.tpl</filename> - Zur Info: wenn kein $titel
<20>bergeben wurde wird hier mittels des <link
linkend="language.modifier.default">default</link>-Modifikator der
Titel "Nachrichten" verwendet.
2005-06-20 14:44:30 +00:00
</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>
</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
2006-03-16 13:25:46 +00:00
immer als <ulink url="&url.php-manual;time">Timestamp</ulink> zu
<20>bergeben. Der Designer kann danach die Funktion <link
2005-06-20 14:44:30 +00:00
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}
]]>
2005-06-20 14:44:30 +00:00
</programlisting>
<para>
AUSGABE:
</para>
<screen>
<![CDATA[
2004-03-28 15:20:52 +00:00
Jan 4, 2001
]]>
</screen>
<programlisting>
<![CDATA[
2004-03-28 15:20:52 +00:00
{$startDatum|date_format:"%Y/%m/%d"}
]]>
</programlisting>
<para>
2004-03-28 15:20:52 +00:00
AUSGABE:
</para>
<screen>
<![CDATA[
2004-03-28 15:20:52 +00:00
2001/01/04
]]>
</screen>
<programlisting>
<![CDATA[
{if $datum1 < $datum2}
2005-06-20 14:44:30 +00:00
...
{/if}
]]>
2005-06-20 14:44:30 +00:00
</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
2005-06-20 14:44:30 +00:00
2004-03-28 15:20:52 +00:00
// hierbei wird davon ausgegangen, dass Ihre Formular Elemente wie folgt benannt sind
// startDate_Day, startDate_Month, startDate_Year
$startDate = makeTimeStamp($startDate_Year,$startDate_Month,$startDate_Day);
function makeTimeStamp($year="",$month="",$day="")
{
2005-06-20 14:44:30 +00:00
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);
}
]]>
2005-06-20 14:44:30 +00:00
</programlisting>
</example>
2004-03-28 15:20:52 +00:00
2005-06-20 14:44:30 +00:00
<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
2005-06-20 14:44:30 +00:00
2004-03-28 15:20:52 +00:00
// stellen Sie sicher, dass Apache mit .wml Dateien umgehen kann!
// schreiben Sie folgende Funktion in Ihrer Applikation, oder in Smarty.addons.php
2005-06-20 14:44:30 +00:00
function insert_header($params)
{
2004-03-28 15:20:52 +00:00
// folgende Funktion erwartet ein $inhalt argument
2005-06-20 14:44:30 +00:00
if (empty($params['inhalt'])) {
2004-03-28 15:20:52 +00:00
return;
2005-06-20 14:44:30 +00:00
}
header($params['inhalt']);
2004-03-28 15:20:52 +00:00
return;
}
2005-06-20 14:44:30 +00:00
?>
]]>
2005-06-20 14:44:30 +00:00
</programlisting>
<para>
Ihr Template <emphasis>muss</emphasis> danach wie folgt beginnen:
</para>
<programlisting>
<![CDATA[
2004-03-28 15:20:52 +00:00
{insert name=header inhalt="Content-Type: text/vnd.wap.wml"}
2005-06-20 14:44:30 +00:00
<?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>
]]>
2005-06-20 14:44:30 +00:00
</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
2004-03-28 15:20:52 +00:00
// setup our function for fetching stock data
function fetch_ticker($symbol)
{
2005-06-20 14:44:30 +00:00
// put logic here that fetches $ticker_info
// from some ticker resource
return $ticker_info;
}
2004-03-28 15:20:52 +00:00
2005-06-20 14:44:30 +00:00
function smarty_function_load_ticker($params, $smarty)
{
2005-06-20 14:44:30 +00:00
// call the function
$ticker_info = fetch_ticker($params['symbol']);
2004-03-28 15:20:52 +00:00
2005-06-20 14:44:30 +00:00
// assign template variable
$smarty->assign($params['assign'], $ticker_info);
}
?>
]]>
</programlisting>
2005-06-20 14:44:30 +00:00
<para>
<filename>index.tpl</filename>
</para>
<programlisting>
<![CDATA[
{load_ticker symbol="YHOO" assign="ticker"}
Stock Name: {$ticker.name} Stock Price: {$ticker.price}
]]>
</programlisting>
2005-06-20 14:44:30 +00:00
</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 *}
2004-03-28 15:20:52 +00:00
2005-06-20 14:44:30 +00:00
Anfragen bitte an
2004-03-28 15:20:52 +00:00
{mailto address=$EmailAddress encode="javascript" subject="Hallo"}
senden
2005-06-20 14:44:30 +00:00
</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>
<para>
Siehe auch <link linkend="language.modifier.escape">escape</link>
und <link linkend="language.function.mailto">{mailto}</link>.
</para>
</sect1>
</chapter>
2004-03-28 15:20:52 +00:00
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->