smarty中的多级菜单

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>