【问题标题】:multi-level menu in smartysmarty中的多级菜单
【发布时间】:2013-06-02 15:01:58
【问题描述】:

我在 PHP 中有一个关联数组。 代码如下:

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

谢谢

【问题讨论】:

    标签: arrays menu smarty multi-level


    【解决方案1】:

    这是一个示例,说明如何在最新版本的 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>
    

    这不是递归的,因此假设您知道数组的深度...

    这是一个可用于执行递归模板的模式的链接:http://www.brain-dump.org/blog/entry/32

    【讨论】:

      【解决方案2】:
      $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="#" >{$value@key}</a>                        
               <ul>
                  {foreach $value as $subvalue}
      
                      <li><a href="#">{$subvalue@key}</a></li>
      
                  {/foreach}
               </ul>
             </li>
      
      
         {else}
      
         <li><a href="{$value}">{$value@key|capitalize} </a></li>
      
          {/if}
      
      {/foreach}
      </ul>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-21
        • 1970-01-01
        相关资源
        最近更新 更多