smarty中的多级菜单
问题描述:
我在PHP中有一个关联数组。 下面是代码:smarty中的多级菜单
$result = mysql_query("SELECT * FROM `tb_menu` ORDER BY id ASC");
$menu = array();
$menu_index = array();
while($row = mysql_fetch_assoc($result)){
if($row['par'] == 0) {
$menu[] = $row;
$menu[sizeof($menu)-1]['child'] = array();
$menu_index[$row['id']] = &$menu[sizeof($menu)-1];
} else {
$menu_index[$row['par']]['child'][] = $row;
$menu_index[$row['id']] = &$menu_index[$row['par']]['child'][sizeof($menu_index[$row['par']]['child'])-1];
}
}
/*print ('<pre>') ;
print_r ($menu) ;
print ('</pre>') ; exit();*/
$smarty->assign('menu', $menu);
我不能让它在Smarty的工作,因为我在这一个初学者。 请帮我做出这样的多级菜单
<ul>
<li><a href="">first level</a>
<ul>
<li><a href="">second level</a></li>
......................................
<ul>
<li><a href="">N-level</a></li>
<ul>
</ul>
</li>
</ul>
</li>
感谢
答
这里有一个如何遍历在最新版本的Smarty的一些多级阵列的例子:
<ul>
{foreach $menu as $first_level}
<li><a href="">first level</a></li>
{/foreach}
{if array_key_exists('child', $first_level)}
<ul>
{foreach $first_level['child'] as $second_level}
<li><a href="">second level</a></li>
{/foreach}
{if array_key_exists('child', $second_level)}
<ul>
{foreach $second_level['child'] as $n_level}
<li><a href="">N-level</a></li>
{/foreach}
<li><a href="">N-level</a></li>
</ul>
{/if}
</ul>
{/if}
</ul>
这不是递归的,所以这个假定你知道阵列的深度...
这里是一个你可以用来做recursiv的模式的链接Ë模板:http://www.brain-dump.org/blog/entry/32
答
$menu= array(
'about' => 'url',
'contact' => 'url',
'service' =>array(
'service1' => 'url',
'service2' => 'url',
'service3' => 'url',
'service4' => 'url'),
'others'=>array(
'other1' => 'url',
'other2' =>'url',
'other3' =>'url'),
'session'=>'url'
);
这一下我们可以遍历这个多级阵列在我们Smarty3模板的示例
<ul >
{foreach $menu as $value}
{if $value|is_array}
<li><a href="#" >{[email protected]}</a>
<ul>
{foreach $value as $subvalue}
<li><a href="#">{[email protected]}</a></li>
{/foreach}
</ul>
</li>
{else}
<li><a href="{$value}">{[email protected]|capitalize} </a></li>
{/if}
{/foreach}
</ul>