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做不到?
EDIT:问题是:这会在正确的html上下文中输出子列表的第一个列表和第一个元素的第一个字母。
你做错了什么
内部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>