multidimensionale Arrays in Smarty
Smarty bietet neben der Verarbeitung eindimensionaler Arrays mittels {section} auch die Möglichkeit mehrdimensionale Arrays darzustellen..
Beispielhaft habe ich hier ein Array aus einer etwas komplexeren Datenbankabfrage, welches mir für eine bestimmte Seite im System verschiedene Headerbilder auslesen soll. Diese Bereiche enthalten wiederum aktive Bereiche mit Links..
Der Array hat den folgenden Aufbau:
<?php
$header_data = array(
array(
'header_background' => 'background-image:url(../img/header/header_sun12.jpg)',
'header_elements' => array(
array(
'img_link' => "link1.php",
'img_title' => "Link Titel",
'img_pos_left' => 240,
'img_pos_top' => 10,
'img_width' => 250,
'img_height' => 208
),
array(
'img_link' => "link2.php",
'img_title' => "Link Titel 2",
'img_pos_left' => 240,
'img_pos_top' => 10,
'img_width' => 250,
'img_height' => 208
),
),
),
array(
'header_background' => 'background-image:url(../img/header/header_sun3.jpg)',
'header_elements' => array(
array(
'img_link' => "link3.php",
'img_title' => "Link Titel 3",
'img_pos_left' => 240,
'img_pos_top' => 10,
'img_width' => 250,
'img_height' => 208
),
array(
'img_link' => "link4.php",
'img_title' => "Link Titel 4",
'img_pos_left' => 240,
'img_pos_top' => 10,
'img_width' => 250,
'img_height' => 208
),
),
),
);
?>Das Zuweisen der Daten in das Template erfolgt auf diese Weise - hier wird einfach das komplette Array in die erste Ebene der foreach Schleife gelegt.
<?php
$smarty->assign('rh',$header_data);
?>Die Zuweisung der Smarty Variablen im HTML Template sieht auf den ersten Blick dann schon etwas komplizierter aus. Hierbei werden zwei {foreach} Schleifen miteinander kombiniert, die dann die entsprechenden Elemente aus dem Array anzeigen..
<?php
{foreach from=$rh key=k item=i}
<div style="{$rh[$k].header_background};" class="img_header">
{foreach from=$rh[$k].header_elements key=k1 item=i1}
<a style="position:absolute;display:block;width:{$rh[$k].header_elements[$k1].img_width}px;height:{$rh[$k].header_elements[$k1].img_height}px;left:{$rh[$k].header_elements[$k1].img_pos_left}px; top:{$rh[$k].header_elements[$k1].img_pos_top}px" href="{$rh[$k].header_elements[$k1].img_link}" title="{$rh[$k].header_elements[$k1].img_title}" > </a>
{/foreach}
</div>
{/foreach}
?>Quellen:
http://www.smarty.net/manual/de/language.function.section.php
http://www.smarty.net/manual/de/language.function.foreach.php


