Smarty使用关联键嵌套foreach

时间:2011-08-01 13:30:33

标签: php loops foreach smarty nested-loops

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"));这样的数组运行正常。

我哪里错了?是否有可能或聪明无法做到?


编辑:问题是:这输出第一个列表,并在正确的html上下文中输出子列表的第一个元素的第一个字母。

1 个答案:

答案 0 :(得分:3)

你做错了什么

内在的foreach就是问题所在。内部foreach中的项(subelem)不是数组(如您所想),但它是一个字符串。

解决方案

这应该有效:

<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>