section,sectionelse Template-{sections} werden verwendet, um durch Arrays zu iterieren (ähnlich wie {foreach}). 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. 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 n/a Maximale Anzahl an Iterationen, die Durchlaufen werden. show boolean Nein true Definiert ob diese 'section' angezeigt werden soll oder nicht. section assign('custid',$data); ?> ]]> {/section} {* alle Werte in umgekehrter Reihenfolge ausgeben: *} {section name=kunde loop=$KundenId step=-1} id: {$KundenId[kunde]}
{/section} ]]>
Ausgabe des obigen Beispiels: id: 1001
id: 1002

id: 1002
id: 1001
id: 1000
]]>
Ein weiteres Beispiel, diesmal ohne ein zugewiesenes Array. {section name=bar loop=21 max=6 step=-2} {$smarty.section.bar.index} {/section} ]]> Ausgabe des obigen Beispiels: 20 18 16 14 12 10 ]]>
section loop Variable name: {$Namen[kunde]}
address: {$Adressen[kunde]}

{/section} ]]> Ausgabe des obigen Beispiels: name: Peter Müller
adresse: 253 N 45th

id: 1001
name: Fritz Muster
adresse:: 417 Mulberry ln

id: 1002
name: Hans Meier
adresse:: 5605 apple st

]]> section names id: {$KundenId[meinedaten]}
name: {$Namen[meinedaten]}
address: {$Adressen[meinedaten]}

{/section} ]]>
nested sections (verschachtelte 'sections') assign('custid',$id); $fullnames = array('John Smith','Jack Jones','Jane Munson'); $smarty->assign('name',$fullnames); $addr = array('253 N 45th', '417 Mulberry ln', '5605 apple st'); $smarty->assign('address',$addr); $types = array( array( 'home phone', 'cell phone', 'e-mail'), array( 'home phone', 'web'), array( 'cell phone') ); $smarty->assign('contact_type', $types); $info = array( array('555-555-5555', '666-555-5555', 'john@myexample.com'), array( '123-456-4', 'www.example.com'), array( '0457878') ); $smarty->assign('contact_info', $info); ?> ]]> id: {$custid[customer]}
name: {$name[customer]}
address: {$address[customer]}
{section name=contact loop=$contact_type[customer]} {$contact_type[customer][contact]}: {$contact_info[customer][contact]}
{/section} {/section} ]]>
Ausgabe des obigen Beispiels: id: 1000
name: John Smith
address: 253 N 45th
home phone: 555-555-5555
cell phone: 666-555-5555
e-mail: john@myexample.com

id: 1001
name: Jack Jones
address: 417 Mulberry ln
home phone: 123-456-4
web: www.example.com

id: 1002
name: Jane Munson
address: 5605 apple st
cell phone: 0457878
]]>
sections und assoziative Arrays 'John Smith', 'home' => '555-555-5555', 'cell' => '666-555-5555', 'email' => 'john@myexample.com'), array('name' => 'Jack Jones', 'home' => '777-555-5555', 'cell' => '888-555-5555', 'email' => 'jack@myexample.com'), array('name' => 'Jane Munson', 'home' => '000-555-5555', 'cell' => '123456', 'email' => 'jane@myexample.com') ); $smarty->assign('contacts',$data); ?> ]]> name: {$contacts[customer].name}
home: {$contacts[customer].home}
cell: {$contacts[customer].cell}
e-mail: {$contacts[customer].email}

{/section} {* Anm. d. übersetzers: Oft ist die Anwendung von 'foreach' kürzer. *} {foreach item=customer from=$contacts}

name: {$customer.name}
home: {$customer.home}
cell: {$customer.cell}
e-mail: {$customer.email}

{/foreach} ]]>
Ausgabe des obigen Beispiels: name: John Smith
home: 555-555-5555
cell: 555-555-5555
e-mail: john@mydomain.com

name: Jack Jones
home phone: 555-555-5555
cell phone: 555-555-5555
e-mail: jack@mydomain.com

name: Jane Munson
home phone: 555-555-5555
cell phone: 555-555-5555
e-mail: jane@mydomain.com

]]>
sectionelse {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} ]]> Ausgabe des obigen Beispiels: 1 id: 1001
2 id: 1002
]]>
index_prev 'index_prev' wird verwendet um den vorhergehenden Schleifen-Index auszugeben. Bei der ersten Iteration ist dieser Wert -1. section'-Eigenschaft 'index_prev' {* 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.
{/if} {/section} ]]>
Ausgabe des obigen Beispiels: Die Kundennummer hat sich geändert.
1 id: 1001
Die Kundennummer hat sich geändert.
2 id: 1002
Die Kundennummer hat sich geändert.
]]>
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' {* 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.
{/if} {/section} ]]>
Ausgabe des obigen Beispiels: Die Kundennummer wird sich ändern.
1 id: 1001
Die Kundennummer wird sich ändern.
2 id: 1002
Die Kundennummer wird sich ändern.
]]Š
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' {$smarty.section.customer.index} id: {$custid[customer]}
{* 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.
{/if} {/section} ]]>
Ausgabe des obigen Beispiels: Die Kundennummer wird sich ändern.
aktuelle loop iteration: 2 7 id: 1001
Die Kundennummer wird sich ändern.
aktuelle loop iteration: 3 9 id: 1002
Die Kundennummer wird sich ändern.
]]>
first 'first' ist 'true', wenn die aktuelle Iteration die erste dieser 'section' ist. 'section'-Eigenschaft 'first' {/if} {$smarty.section.customer.index} id: {$custid[customer]} {if $smarty.section.customer.last} {/if} {/section} ]]> Ausgabe des obigen Beispiels: 0 id: 1000 1 id: 1001 2 id: 1002 ]]> last 'last' ist 'true' wenn die aktuelle Iteration die letzte dieser 'section' ist. 'section'-Eigenschaft 'last' {/if} {$smarty.section.customer.index} id: {$custid[customer]} {if $smarty.section.customer.last} {/if} {/section} ]]> Ausgabe des obigen Beispiels: 0 id: 1000 1 id: 1001 2 id: 1002 ]]> 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} Ausgabe des obigen Beispiels: 2 id: 1001
3 id: 1002
]]>
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} Es wurden {$smarty.section.customer.loop} Kunden angezeigt. ]]> Ausgabe des obigen Beispiels: 1 id: 1001
2 id: 1002
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} {if $smarty.section.customer.show} die 'section' wurde angezeigt {else} die 'section' wurde nicht angezeigt {/if} ]]> Ausgabe des obigen Beispiels: 2 id: 1001
3 id: 1002
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} Es wurden {$smarty.section.customer.total} Kunden angezeigt. ]]> Ausgabe des obigen Beispiels: 2 id: 1001
4 id: 1002
Es wurden 3 Kunden angezeigt. ]]>