Get Smarty

Donate

Paypal

Smarty Icon

You may use the Smarty logo according to the trademark notice.

Smarty Template Engine Smarty Template Engine

For sponsorship, advertising, news or other inquiries, contact us at:

Sites Using Smarty

Advertisement

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.

Example 7.18. section


<?php

$data = array(1000,1001,1002);
$smarty->assign('custid',$data);

?>

  

{* dieses Beispiel gibt alle Werte des $KundenId Arrays aus *}
{section name=kunde loop=$KundenId}
id: {$KundenId[kunde]}<br />
{/section}
{* alle Werte in umgekehrter Reihenfolge ausgeben: *}
{section name=kunde loop=$KundenId step=-1}
id: {$KundenId[kunde]}<br />
{/section}

  

Ausgabe des obigen Beispiels:


id: 1000<br />
id: 1001<br />
id: 1002<br />
<hr />
id: 1002<br />
id: 1001<br />
id: 1000<br />

  

Ein weiteres Beispiel, diesmal ohne ein zugewiesenes Array.


{section name=foo start=10 loop=20 step=2}
  {$smarty.section.foo.index}
{/section}
<hr />
{section name=bar loop=21 max=6 step=-2}
  {$smarty.section.bar.index}
{/section}

  

Ausgabe des obigen Beispiels:


10 12 14 16 18
<hr />
20 18 16 14 12 10

  

Example 7.19. 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 des obigen Beispiels:



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>

  

Example 7.20. section names


{*
  die 'name'-Variable definiert den Namen der verwendet werden soll,
  um Daten aus dieser 'section' zu referenzieren
*}
{section name=meinedaten loop=$KundenId}
<p>
  id: {$KundenId[meinedaten]}<br>
  name: {$Namen[meinedaten]}<br>
  address: {$Adressen[meinedaten]}
</p>
{/section}

  

Example 7.21. nested sections (verschachtelte 'sections')


<?php

$id = array(1001,1002,1003);
$smarty->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);

?>
  
  

{*
  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}
<hr />
  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}
{/section}

  

Ausgabe des obigen Beispiels:


<hr />
  id: 1000<br />
  name: John Smith<br />
  address: 253 N 45th<br />
    home phone: 555-555-5555<br />
    cell phone: 666-555-5555<br />
    e-mail: john@myexample.com<br />
<hr />
  id: 1001<br />
  name: Jack Jones<br />
  address: 417 Mulberry ln<br />
    home phone: 123-456-4<br />
    web: www.example.com<br />
<hr />
  id: 1002<br />
  name: Jane Munson<br />
  address: 5605 apple st<br />
    cell phone: 0457878<br />

  

Example 7.22. sections und assoziative Arrays


<?php

$data = array(
          array('name' => '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);

?>

  

{*
  Dies ist ein Beispiel wie man einen assoziativen Array in einer
  'section' ausgeben kann.
*}
{section name=customer loop=$contacts}
<p>
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}
<p>
name: {$customer.name}<br />
home: {$customer.home}<br />
cell: {$customer.cell}<br />
e-mail: {$customer.email}
</p>
{/foreach}

  

Ausgabe des obigen Beispiels:


<p>
name: John Smith<br />
home: 555-555-5555<br />
cell: 555-555-5555<br />
e-mail: john@mydomain.com
</p>
<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>

  

Example 7.23. 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}

Note

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.

Example 7.24. 'section'-Eigenschaft 'index'


{section name=customer loop=$custid}
{$smarty.section.customer.index} id: {$custid[customer]}<br />
{/section}

   

Ausgabe des obigen Beispiels:


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.

Example 7.25. 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 des obigen Beispiels:


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).

Example 7.26. 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 des obigen Beispiels:


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>
]]Š
   </programlisting>
  </example>
  </sect2>
  <sect2 id="section.property.iteration">
   <title>iteration</title>
   <para>
    'iteration' wird verwendet um die aktuelle Iteration auszugeben.
   </para>
   <para>
    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.
   </para>
  <example>
   <title>'section'-Eigenschaft 'iteration'</title>
   <programlisting>
<![CDATA[
{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 des obigen Beispiels:


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.

Example 7.27. '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 des obigen Beispiels:


<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.

Example 7.28. '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 des obigen Beispiels:


<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.

Example 7.29. 'section'-Eigenschaft 'rownum'


{section name=customer loop=$custid}
{$smarty.section.customer.rownum} id: {$custid[customer]}<br />
{/section}
   </programlisting>
   <para>
    Ausgabe des obigen Beispiels:
   </para>
   <programlisting>
<![CDATA[
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.

Example 7.30. '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 des obigen Beispiels:


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.

Example 7.31. '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 des obigen Beispiels:


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.

Example 7.32. '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.

   

Ausgabe des obigen Beispiels:


0 id: 1000<br>
2 id: 1001<br>
4 id: 1002<br>

Es wurden 3 Kunden angezeigt.

   

Comments
by Firewalker on Apr 14, 2012 at 7:35
Example 7.18 does not work! it's {section name=KundenId loop=$custid} not {section name=kunde loop=$KundenId} isn't it?

Advertisement

Sponsors [info]

Sponsors