Mit Schleifen und einigen kleinen Kniffen kann man etwas Pepp und Abwechslung in das Layout bringen. Lange Tabellen können eintönig wirken, ab und zu mal die Headlines wiederholen damit man sich zurecht findet oder das erste Element größer darstellen als die Folge-Elemente - wären hier Beispiele.
Dies funktioniert mit allen Arrays die euch im Template zur Verfügung stehen. Manchmal möchte man hier die Daten bestimmter Arrays irgendwie ausgeben, irgendwas Nummerieren (und reicht hier nicht) etc pp.
Für solche Aufgaben eignen sich Schleifen. Für die folgenden Beispiele nehmen wir ein Array ($my_array) mit 9 Werten ($myarray['eins'] = 1 ... $myarray['neun'] = 9).
Wenn ich einfach alle Elemente unformatiert wiedergeben möchte, kommt man mit einer {foreach}-Schleife weiter.
Code: Select all
{foreach from=$my_array item=array_element}
{$array_element}
{/foreach}
Wird folgendes im Browser anzeigen.
Code: Select all
0 1 2 3 4 5 6 7 8 9
Möchte ich einen Zeilenumbruch im HTML Dokument erreichen, kann man folgendes machen:
Code: Select all
{foreach from=$my_array item=array_element}
{$array_element}<br />
{/foreach}
Wenn ich alle Ergebnisse als Liste ausgeben möchte, sieht das dann so aus:
Code: Select all
<ul>
{foreach from=$my_array item=array_element}
<li>Dieses Element enthält: "{$array_element}"</li>
{/foreach}
</ul>
Wenn man noch an den Schlüsselwert des Array Elementes (Name des aktuellen Schlüssel) herankommen möchte, kann man der foreach-Schleife einfach den Variabelnamen zur Ausgabe angeben.
Code: Select all
<ul>
{foreach from=$my_array item=array_element key=array_element_name}
<li>Das Element "{$array_element_name}" enthält den Wert "{$array_element}"</li>
{/foreach}
</ul>
Man kann natürlich auch prüfen ob das Array Element Leer ist und in diesem Fall etwas anderes ausgeben
Code: Select all
<ul>
{foreach from=$my_array item=array_element key=array_element_name}
<li>Das Element mit Namen "{$array_element_name}" enthält den Wert "{$array_element}"</li>
{foreachelse}
<li>Das Array ist leer</li>
{/foreach}
</ul>
Code: Select all
<ul>
{foreach from=$my_array item=array_element name=array_name}
<li>Das Element Nr. "{$smarty.foreach.array_name.index}" enthält den Wert "{$array_element}"</li>
{/foreach}
</ul>
Um z.B. nach jedem 5-ten Element eine neue Liste zu beginnen (bei 15 Elementen hätten wir 3 Listen mit je 5 Elementen)
Code: Select all
<ul>
{foreach from=$my_array item=array_element name=array_name}
{if $smarty.foreach.array_name.index % 5 == 0}
</ul><ul>
{/if}
<li>Das Element Nr. "{$smarty.foreach.array_name.index}" enthält den Wert "{$array_element}"</li>
{/foreach}
</ul>
Achtung, der Index beginnt beim Zählen mit "0"!, wenn wir die aktuelle Iteration brauchen (also den wievielten Durchlauf, beginnend mit "1") müssen wir wie folgt vorgehen um die entsprechende Eigenschaft anzufragen:
Code: Select all
<ul>
{foreach from=$my_array item=array_element name=array_name}
<li>Das Element Nr. "{$smarty.foreach.array_name.iteration}" enthält den Wert "{$array_element}"</li>
{/foreach}
</ul>
Code: Select all
<ul>
{foreach from=$my_array item=array_element name=array_name}
<li>{if $smarty.foreach.array_name.first}<em>Erster: {$array_element}</em>{else}{$array_element}{/if}</li>
{/foreach}
</ul>
Code: Select all
<ul>
{foreach from=$my_array item=array_element name=array_name}
<li>Dieses Element enthält: "{$array_element}"</li>
{if $smarty.foreach.array_name.last}
<li>Gesamtzahl der Einträge: {$smarty.foreach.array_name.total} items</li>
{/if}
{/foreach}
</ul>
Sonstiges
-----------------------------------
Das waren jetzt einmal ein paar simple Beispiele auf Basis von ungeordneten Listen und einem einfachen Array. Schleifen lassen sich aber auch auf Arrays von Objekten anwenden.
Code: Select all
<ul>
{foreach from=$my_array item=array_element}
<li>{$array_element->object_name}"</li>
{/foreach}
</ul>
Code: Select all
<ul>
{foreach from=$my_array item=array_element}
{foreach from=$array_element item=array_sub_element}
<li>{$array_sub_element}"</li>
{/foreach}
{/foreach}
</ul>
Um Schleifen z.B. in Javascript einzusetzen muss man {literal} unterbrechen und entsprechende Sonderzeichen Escapen
Code: Select all
{literal}
<__script__ type="text/javascript">
//<![CDATA[
var data = [
{/literal}
{foreach from=$my_array item=array_element}
{literal}{{/literal} first: "{$array_element->string_id} ", last: "{$array_element->text|escape:'javascript'}" {literal}}{/literal}
{/foreach}
{literal}
];
//]]>
</__script>
{/literal}
Beste Grüße
Nils