в приложении PHP, использующем Smarty. Я хочу передать многомерный ассоциативный массив со значениями, описывающими элементы и группы элементов, шаблону и отображать его как список.Итерация по многомерному ассоциативному массиву в шаблоне Smarty
я сделать что-то подобное в script.php:
$data = array(
array(
'type' => 'group',
'name' => 'Group 1',
'items' => array(
array(
'type' => 'group',
'name' => 'Group 2',
'items' => array(
array(
'type' => 'item',
'name' => 'Item 1'
),
array(
'type' => 'item',
'name' => 'Item 2'
)
)
),
array(
'type' => 'item',
'name' => 'Item 3'
)
)
),
array(
'type' => 'item',
'name' => 'Item 4'
)
);
$smarty->assign('data', $data);
И я использую его в основной файл шаблона:
{include file="display_data.tpl" data="$data"}
И в display_data.tpl:
{if $data.type eq 'item'}
<li>{$data.name} ({$data.type})</li>
{elseif $data.type eq 'group'}
<li>
{$data.name} ({$data.type})
{include file="display_data.tpl" data=$data.items}
</li>
{else}
<ol>
{foreach from=$data key=k item=i}
{include file="display_data.tpl" data=$data[$k]}
{/foreach}
</ol>
{/if}
Но эффект только:
<ol>
<li>Group 1 (group)</li>
<li>Item 4 (item)</li>
</ol>
В любом случае я не могу заставить его перебирать массив внутренних элементов. Что я делаю не так?
Заранее благодарим за любую помощь.
Спасибо за ответ. Этот подход работает, если мы знаем максимальную глубину дерева элементов, как в примере, указанном в вопросе. Однако то, что я действительно пытался сделать, но не мог заставить его работать, - это обрабатывать любую глубину дерева - это причина использования рекурсивного шаблона. Любые идеи об этой проблеме? – user485332