mirror of
				https://github.com/smarty-php/smarty.git
				synced 2025-11-03 22:01:36 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			409 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			409 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
<!-- Smarty German Documentation Port -->
 | 
						|
<!-- appendixes.sgml,v 1.5 2003/01/10 08:15:14 dexxter Exp -->
 | 
						|
<!-- dexxter -->
 | 
						|
<!-- 1.5 -->
 | 
						|
<part id="appendixes">
 | 
						|
 <title>Anhänge</title>
 | 
						|
<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>
 | 
						|
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>
 | 
						|
 | 
						|
       <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>
 | 
						|
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>
 | 
						|
<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ü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>
 | 
						|
 | 
						|
{* kompliziert *}
 | 
						|
 | 
						|
{if $titel eq ""}
 | 
						|
	&nbsp;
 | 
						|
{else}
 | 
						|
	{$titel}
 | 
						|
{/if}
 | 
						|
 | 
						|
 | 
						|
{* einfach *}
 | 
						|
 | 
						|
{$titel|default:"&nbsp;"}</programlisting>
 | 
						|
</example>
 | 
						|
	</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>
 | 
						|
{* 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 *}
 | 
						|
{$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>
 | 
						|
 | 
						|
ersteseite.tpl
 | 
						|
------------
 | 
						|
 | 
						|
{include file="header.tpl" title="Erste Seite"}
 | 
						|
{* template body hier *}
 | 
						|
{include file="footer.tpl"}
 | 
						|
 | 
						|
 | 
						|
archiv.tpl
 | 
						|
------------
 | 
						|
 | 
						|
{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>
 | 
						|
{$startDatum|date_format}
 | 
						|
 | 
						|
AUSGABE:
 | 
						|
 | 
						|
Jan 4, 2001
 | 
						|
 | 
						|
 | 
						|
{$startDatum|date_format:"%Y/%m/%d"}
 | 
						|
 | 
						|
AUSGABE:
 | 
						|
 | 
						|
2001/01/04
 | 
						|
 | 
						|
 | 
						|
{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>
 | 
						|
// 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="")
 | 
						|
{
 | 
						|
	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>
 | 
						|
 | 
						|
</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>
 | 
						|
// 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
 | 
						|
    // folgende Funktion erwartet ein $inhalt argument
 | 
						|
    extract(func_get_arg(0));
 | 
						|
    if(empty($inhalt))
 | 
						|
        return;
 | 
						|
    header($inhalt);
 | 
						|
    return;
 | 
						|
}
 | 
						|
 | 
						|
// Ihr Template _muss_ danach wie folgt beginnen:
 | 
						|
 | 
						|
{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"> 
 | 
						|
 | 
						|
<!-- 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>
 | 
						|
{* Smarty *}
 | 
						|
 | 
						|
{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);
 | 
						|
 | 
						|
{/php}
 | 
						|
 | 
						|
Symbol: {$ticker_name} Preis: {$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
 | 
						|
---------------
 | 
						|
 | 
						|
<?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 
 | 
						|
{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>
 | 
						|
<chapter id="resources">
 | 
						|
	<title>Weiterführende Informationen</title>
 | 
						|
	<para>
 | 
						|
	Smarty's Homepage erreicht man unter http://smarty.php.net/.
 | 
						|
	Sie können der Smarty Mailingliste beitreten in dem
 | 
						|
	sie ein E-mail an smarty-general-subscribe@lists.php.net senden. Das Archiv
 | 
						|
	der Liste ist hier http://marc.theaimsgroup.com/?l=smarty&r=1&w=2 einsehbar.
 | 
						|
	</para>
 | 
						|
</chapter>
 | 
						|
<chapter id="bugs">
 | 
						|
	<title>BUGS</title>
 | 
						|
	<para>
 | 
						|
	Bitte konsultieren Sie die Datei 'BUGS' welche mit Smarty ausgeliefert wird,
 | 
						|
	oder die Webseite.
 | 
						|
	</para>
 | 
						|
</chapter>
 | 
						|
</part> |