Smarty - Php-Arrays zweispaltig anzeigen (foreach/section)

Als praktisches Beispiel dient meine alle Artikel anzeigen -Seite. Hier wollte ich nicht einfach nur die Titel der Artikel untereinander schreiben, sondern per float:left zwei Spalten (divs) erzeugen, die dann den jeweiligen Inhalt aufnehmen. Der Inhalt kommt wieder aus einer Datenbank und wird in ein zwei-dimensionales Php-Array eingelesen.
In der Funktion, die den Datenbankzugriff erledigt, wird das Array wie folgt erzeugt:
/* erzeugen des Arrays */

...
$articles = array();
while( $row = $db->fetch( $res ))
{
$row['title'] = urldecode( $row['title']);
$db_year = $row['year'];

$articles[$db_year]['year'] = $db_year;
$articles[$db_year]['list'][] = $row;
}
...

Das erzeugte Array hat dabei in etwa folgende Struktur:
/* Beispiel-Dump des PHP-Arrays */

Array
(
[2008] => Array
(
[year] => 2008
[list] => Array
(
[0] => Array
(
[id] => 10
[title] => Zehnter Artikel
[date] => 2008-11-02
[comnts] => 10
)

[1] => Array
(
[id] => 9
[title] => Neunter Artikel
[date] => 2008-10-12
[comnts] => 0
)

...
)

[2007] => Array
(
[year] => 2007
[list] => Array
(
[0] => Array
(
[id] => 12
[title] => Zwölfter Artikel
[date] => 2007-12-01
[comnts] => 2
)
...
)
)

Das fertige Array wird dann vom PHP-Skript an das Template übergeben (per assign) und dort mittels foreach und section verarbeitet. Nachfolgend wird das Template skizziert:
{* Template verarbeitet das Titel-Array *}

{* -- ist das Array überhaupt definiert und gefüllt? -- *}
{if isset($summary_list) && $summary_list|@count > 0}
{foreach key=index item=summary from=$summary_list}
{* -- das Jahr ausgeben -- *}
<div>{$summary.year}</div>
<div>
{* -- erste Titelspalte -- *}
<div style="width: 46%; float: left">
{section name=n start=0 loop=$summary.list step=2}
<div>{$summary.list[n].title}</div>
{/section}
</div>
{* -- zweite Titelspalte -- *}
<div style="width: 46%; float: left">
{section name=m start=1 loop=$summary.list step=2}
<div>{$summary.list[m].title}</div>
{/section}
</div>
<div style="clear: left">
</div>
{/foreach}
{/if}

Mittels der foreach-Schleife durchlaufen wir die Jahreszahlen (year). Die inneren section-Abschnitte iterieren über dem Array list. Dabei beginnt der erste Abschnitt bei Schritt 0 und der zweite Abschnitt bei Schritt 1. Die Schrittweite beträgt jeweils 2, so dass in der linken Spalte die Array-Elemente mit geraden Indizes und in der rechten Spalte diejenigen mit ungeraden Indizes angezeigt werden.
 
 Artikel als Bookmark:
Beitrag wurde bisher 1022 mal geöffnet
RA Zabel/Stolze
  • 96 Artikel  (zeigen)
  • 66554 Klicks
  • 56 Kommentare
  • 9 Artikel (2010)  (zeigen)
  • 1855 Klicks (2010)
  • 0 Kommentare (2010)
Freunde / Linkparade (4)