Smarty вложенный foreach с ассоциативными ключами - PullRequest
1 голос
/ 01 августа 2011

PHP:

<?php
$menu = array(
            array('label' => 'myLabel', 'submenu' =>
                array('label' => 'test label',
                    'label' => 'test label',
                    'label' => 'test label'
            )),
            array(...)
        );
 $smarty->assign(array('menu' => $menu));

TPL:

<ul>        
    {foreach from=$menu key=k item=elem}
    <li>
        <div>
            {$elem.label}
        </div>
        <ul>
            {foreach from=$elem.submenu item=subelem}
                <li>{$subelem.label}</li>
            {/foreach}
        </ul>

    </li>
    {/foreach}
</ul>

Обратите внимание, что массивы типа $menu = array(array("A"), array("B"), array("C")); работают нормально.

Где я ошибаюсь?Возможно ли, или smarty не может это сделать?


РЕДАКТИРОВАТЬ: Проблема: Это выводит первый список и первую букву первого элемента дочернего списка в надлежащем HTML-контексте.

1 Ответ

3 голосов
/ 04 августа 2011

Что вы сделали не так

Внутренний foreach - это проблема.Ваш элемент (субэлемент) во внутреннем foreach не является массивом (как вы думали), но это строка.

Решение

Это должно работать:

<ul>        
    {foreach from=$menu key=k item=elem}
    <li>
        <div>
            {$elem.label}
        </div>
        <ul>
            {foreach from=$elem.submenu key=label item=text_label}
                <li>{$text_label}</li>
            {/foreach}
        </ul>

    </li>
    {/foreach}
</ul>
...