Итерация по многомерному ассоциативному массиву в шаблоне Smarty - PullRequest
1 голос
/ 02 февраля 2012

в приложении PHP, использующем 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>

В любом случае, я не могу получить его итерацию по внутреннему массиву 'items'. Что я делаю не так?

Заранее спасибо за любую помощь.

1 Ответ

1 голос
/ 03 февраля 2012

Я думаю, что разметка для подпунктов должна быть:

{foreach from=$data key=k item=i}
    {$i.name} ({$i.type})
    {if $i.items}
        {foreach from=$i.data key=k item=k}
            {$k.name} ({$k.type})
            {if $k.items}
                {foreach from=$k.data key=k item=z}
                    {$z.name} ({$z.type})
                {/foreach}
             {/if}
        {/foreach}
    {/if}
{/foreach}

Надеюсь, это поможет вам в дальнейшем

...