section,sectionelse
Attribut Name
Typ
Erforderlich
Standardwert
Beschreibung
name
string
Ja
n/a
Der Name der 'section'
loop
[$variable_name]
Ja
n/a
Der Name des Zählers für die Iterationen.
start
integer
Nein
0
Definiert die Startposition. Falls ein negativer Wert übergeben wird,
berechnet sich die Startposition ausgehend vom Ende des Arrays. Wenn zum Beispiel
7 Werte in einem Array enthalten sind und die Startposition -2 ist, ist die
berechnete Startposition 5. Unerlaubte Werte (Werte ausserhalb der Grösse des
Arrays) werden automatisch auf den nächstmöglichen Wert gesetzt.
step
integer
Nein
1
Definiert die Schrittweite mit welcher das Array durchlaufen wird.
'step=2' iteriert durch 0, 2, 4, etc. Wenn ein negativer Wert übergeben wurde,
wird das Array rückwärts durchlaufen.
max
integer
Nein
1
Maximale Anzahl an Iterationen, die Durchlaufen werden.
show
boolean
Nein
true
Definiert ob diese 'section' angezeigt werden soll oder nicht.
Template-'sections' werden verwendet, um durch Arrays zu iterieren.
Jedes section-Tag muss mit einem /section-Tag
kombiniert werden. name und loop sind erforderliche
Parameter. Der Name der 'section' kann frei gewählt werden, muss jedoch aus Buchstaben,
Zahlen oder Unterstrichen bestehen. 'sections' können verschachtelt werden. Dabei ist
zu beachten, dass sich ihre Namen unterscheiden. Aus der 'loop'-Variable (normalerweise ein
Array von Werten) resultiert die Anzahl der Iterationen, die durchlaufen werden.
Wenn ein Wert aus der 'loop'-Variable innerhalb der 'section' ausgegeben werden soll,
muss der 'section-name' umschlossen mit [] angefügt werden.
sectionelse wird ausgeführt, wenn keine Werte in der
'loop'-Variable enthalten sind.
section
{* dieses Beispiel gibt alle Werte des $KundenId Arrays aus *}
{section name=kunde loop=$KundenId}
id: {$KundenId[kunde]}<br>
{/section}
AUSGABE:
id: 1000<br>
id: 1001<br>
id: 1002<br>
section loop Variable
{* die 'loop'-Variable definiert nur die Anzahl der Iterationen,
Sie können in dieser 'section' auf jeden Wert des Templates
zugreifen. Dieses Beispiel geht davon aus, dass $KundenId, $Namen und
$Adressen Arrays sind, welche die selbe Anzahl Werte enthalten *}
{section name=kunde loop=$KundenId}
id: {$KundenId[kunde]}<br>
name: {$Namen[kunde]}<br>
address: {$Adressen[kunde]}<br>
<p>
{/section}
AUSGABE:
id: 1000<br>
name: Peter Müller <br>
adresse: 253 N 45th<br>
<p>
id: 1001<br>
name: Fritz Muster<br>
adresse:: 417 Mulberry ln<br>
<p>
id: 1002<br>
name: Hans Meier<br>
adresse:: 5605 apple st<br>
<p>
section names
{* die 'name'-Variable definiert den Namen der verwendet werden soll,
um Daten aus dieser 'section' zu referenzieren *}
{section name=meinedaten loop=$KundenId}
id: {$KundenId[meinedaten]}<br>
name: {$Namen[meinedaten]}<br>
address: {$Adressen[meinedaten]}<br>
<p>
{/section}
nested sections (verschachtelte 'sections')
{* Sections können unbegrenzt tief verschachtelt werden.
Mit verschachtelten 'sections' können Sie auf komplexe Datenstrukturen
zugreifen (wie zum Beispiel multidimensionale Arrays). Im folgenden Beispiel
ist $contact_type[customer] ein Array mit Kontakttypen des aktuellen Kunden. *}
{section name=customer loop=$custid}
id: {$custid[customer]}<br>
name: {$name[customer]}<br>
address: {$address[customer]}<br>
{section name=contact loop=$contact_type[customer]}
{$contact_type[customer][contact]}: {$contact_info[customer][contact]}<br>
{/section}
<p>
{/section}
AUSGABE:
id: 1000<br>
name: John Smith<br>
address: 253 N 45th<br>
home phone: 555-555-5555<br>
cell phone: 555-555-5555<br>
e-mail: john@mydomain.com<br>
<p>
id: 1001<br>
name: Jack Jones<br>
address: 417 Mulberry ln<br>
home phone: 555-555-5555<br>
cell phone: 555-555-5555<br>
e-mail: jack@mydomain.com<br>
<p>
id: 1002<br>
name: Jane Munson<br>
address: 5605 apple st<br>
home phone: 555-555-5555<br>
cell phone: 555-555-5555<br>
e-mail: jane@mydomain.com<br>
<p>
sections und assoziative Arrays
{* Dies ist ein Beispiel wie man einen assoziativen Array
in einer 'section' ausgeben kann.*}
{section name=customer loop=$contacts}
name: {$contacts[customer].name}<br>
home: {$contacts[customer].home}<br>
cell: {$contacts[customer].cell}<br>
e-mail: {$contacts[customer].email}<p>
{/section}
{* Anm. d. übersetzers: Oft ist die Anwendung von 'foreach' kürzer. *}
{foreach item=customer from=$contacts}
name: {$customer.name}<br>
home: {$customer.home}<br>
cell: {$customer.cell}<br>
e-mail: {$customer.email}<p>
{/foreach}
AUSGABE:
name: John Smith<br>
home: 555-555-5555<br>
cell: 555-555-5555<br>
e-mail: john@mydomain.com<p>
name: Jack Jones<br>
home phone: 555-555-5555<br>
cell phone: 555-555-5555<br>
e-mail: jack@mydomain.com<p>
name: Jane Munson<br>
home phone: 555-555-5555<br>
cell phone: 555-555-5555<br>
e-mail: jane@mydomain.com<p>
sectionelse
{* sectionelse wird aufgerufen, wenn keine $custid Werte vorhanden sind *}
{section name=customer loop=$custid}
id: {$custid[customer]}<br>
{sectionelse}
keine Werte in $custid gefunden
{/section}
Die Eigenschaften der 'section' werden in besonderen Variablen abgelegt.
Diese sind wie folgt aufgebaut: {$smarty.section.sectionname.varname}
Bermerkung: Seit Smarty 1.5.0 hat sich die Syntax der 'section' Eigenschaften
von {%sectionname.varname%} zu {$smarty.section.sectionname.varname} geändert.
Die alte Syntax wird noch immer unterstützt, die Dokumentation erwähnt
jedoch nur noch die neue Schreibweise.
index
'index' wird verwendet, um den aktuellen Schleifen-Index anzuzeigen. Er startet
bei 0 (beziehungsweise der definierten Startposition) und inkrementiert in 1-er Schritten
(beziehungsweise der definierten Schrittgrösse).
Technische Bemerkung
Wenn 'step' und 'start' nicht übergeben werden, verhält sich
der Wert wie die 'section'-Eigenschaft 'iteration', ausser dass
er bei 0 anstatt 1 beginnt.
'section'-Eigenschaft 'index'
{section name=customer loop=$custid}
{$smarty.section.customer.index} id: {$custid[customer]}<br>
{/section}
AUSGABE:
0 id: 1000<br>
1 id: 1001<br>
2 id: 1002<br>
index_prev
'index_prev' wird verwendet um den vorhergehenden Schleifen-Index
auszugeben. Bei der ersten Iteration ist dieser Wert -1.
section'-Eigenschaft 'index_prev'
{section name=customer loop=$custid}
{$smarty.section.customer.index} id: {$custid[customer]}<br>
{* zur Information, $custid[customer.index] und $custid[customer] bedeuten das selbe *}
{if $custid[customer.index_prev] ne $custid[customer.index]}
Die Kundennummer hat sich geändert.<br>
{/if}
{/section}
AUSGABE:
0 id: 1000<br>
Die Kundennummer hat sich geändert.<br>
1 id: 1001<br>
Die Kundennummer hat sich geändert.<br>
2 id: 1002<br>
Die Kundennummer hat sich geändert.<br>
index_next
'index_next' wird verwendet um den nächsten 'loop'-Index
auszugeben. Bei der letzten Iteration ist dieser Wert um 1 grösser
als der aktuelle 'loop'-Index (inklusive dem definierten 'step' Wert).
section'-Eigenschaft 'index_next'
{section name=customer loop=$custid}
{$smarty.section.customer.index} id: {$custid[customer]}<br>
{* zur Information, $custid[customer.index] und $custid[customer] bedeuten das selbe *}
{if $custid[customer.index_next] ne $custid[customer.index]}
Die Kundennummer wird sich ändern.<br>
{/if}
{/section}
AUSGABE:
0 id: 1000<br>
Die Kundennummer wird sich ändern.<br>
1 id: 1001<br>
Die Kundennummer wird sich ändern.<br>
2 id: 1002<br>
Die Kundennummer wird sich ändern.<br>
iteration
'iteration' wird verwendet um die aktuelle Iteration auszugeben.
Bemerkung: Die Eigenschaften 'start', 'step' und 'max' beeinflussen 'iteration'
nicht, die Eigenschaft 'index' jedoch schon. 'iteration' startet im gegensatz
zu 'index' bei 1. 'rownum' ist ein Alias für 'iteration' und arbeitet identisch.
'section'-Eigenschaft 'iteration'
{section name=customer loop=$custid start=5 step=2}
aktuelle loop iteration: {$smarty.section.customer.iteration}<br>
{$smarty.section.customer.index} id: {$custid[customer]}<br>
{* zur Information, $custid[customer.index] und $custid[customer] bedeuten das gleiche *}
{if $custid[customer.index_next] ne $custid[customer.index]}
Die Kundennummer wird sich ändern.<br>
{/if}
{/section}
AUSGABE:
aktuelle loop iteration: 1
5 id: 1000<br>
Die Kundennummer wird sich ändern.<br>
aktuelle loop iteration: 2
7 id: 1001<br>
Die Kundennummer wird sich ändern.<br>
aktuelle loop iteration: 3
9 id: 1002<br>
Die Kundennummer wird sich ändern.<br>
first
'first' ist 'true', wenn die aktuelle Iteration die erste dieser 'section' ist.
'section'-Eigenschaft 'first'
{section name=customer loop=$custid}
{if $smarty.section.customer.first}
<table>
{/if}
<tr><td>{$smarty.section.customer.index} id:
{$custid[customer]}</td></tr>
{if $smarty.section.customer.last}
</table>
{/if}
{/section}
AUSGABE:
<table>
<tr><td>0 id: 1000</td></tr>
<tr><td>1 id: 1001</td></tr>
<tr><td>2 id: 1002</td></tr>
</table>
last
'last' ist 'true' wenn die aktuelle Iteration die letzte dieser 'section' ist.
'section'-Eigenschaft 'last'
{section name=customer loop=$custid}
{if $smarty.section.customer.first}
<table>
{/if}
<tr><td>{$smarty.section.customer.index} id:
{$custid[customer]}</td></tr>
{if $smarty.section.customer.last}
</table>
{/if}
{/section}
AUSGABE:
<table>
<tr><td>0 id: 1000</td></tr>
<tr><td>1 id: 1001</td></tr>
<tr><td>2 id: 1002</td></tr>
</table>
rownum
'rownum' wird verwendet um die aktuelle Iteration (startend bei 1) auszugeben.
'rownum' ist ein Alias für 'iteration' und arbeitet identisch.
'section'-Eigenschaft 'rownum'
{section name=customer loop=$custid}
{$smarty.section.customer.rownum} id: {$custid[customer]}<br>
{/section}
AUSGABE:
1 id: 1000<br>
2 id: 1001<br>
3 id: 1002<br>
loop
'loop' wird verwendet, um die Nummer letzte Iteration der 'section' auszugeben.
Dieser Wert kann inner- und ausserhalb der 'section' verwendet werden.
'section'-Eigenschaft 'loop'
{section name=customer loop=$custid}
{$smarty.section.customer.index} id: {$custid[customer]}<br>
{/section}
Es wurden {$smarty.section.customer.loop} Kunden angezeigt.
AUSGABE:
0 id: 1000<br>
1 id: 1001<br>
2 id: 1002<br>
Es wurden 3 Kunden angezeigt.
show
show kann die Werte 'true' oder 'false' haben.
Falls der Wert 'true' ist, wird die 'section' angezeigt. Falls
der Wert 'false' ist, wird die 'section' - ausser dem 'sectionelse' - nicht ausgegeben.
'section'-Eigenschaft 'show'
{section name=customer loop=$custid show=$show_customer_info}
{$smarty.section.customer.rownum} id: {$custid[customer]}<br>
{/section}
{if $smarty.section.customer.show}
die 'section' wurde angezeigt
{else}
die 'section' wurde nicht angezeigt
{/if}
AUSGABE:
1 id: 1000<br>
2 id: 1001<br>
3 id: 1002<br>
die 'section' wurde angezeigt
total
Wird verwendet um die Anzahl der durchlaufenen Iterationen einer
'section' auszugeben. Kann innerhalb oder ausserhalb der 'section' verwendet
werden.
'section'-Eigenschaft 'total'
{section name=customer loop=$custid step=2}
{$smarty.section.customer.index} id: {$custid[customer]}<br>
{/section}
Es wurden {$smarty.section.customer.total} Kunden angezeigt.
OUTPUT:
0 id: 1000<br>
2 id: 1001<br>
4 id: 1002<br>
Es wurden 3 Kunden angezeigt.