从PHP数组构建引导程序下拉多级菜单 [英] Build a bootstrap drop-down multi-level menu from a PHP array

查看:41
本文介绍了从PHP数组构建引导程序下拉多级菜单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从PHP中的数组制作一个引导程序下拉菜单.

I'm trying to make a bootstrap drop-down menu from an array in PHP.

我已经编写了一个递归菜单功能,但是我在添加引导程序所需的自定义html属性方面很挣扎.

I have written a recursive menu function, but I am struggling with adding the custom html attributes required for bootstrap.

我的菜单数组具有以下格式:

My menu array is in the following format:

$menu = array(
   'calendar' => array(
      'text'   => 'Calendar',
      'rights' => 'user'
   ),
   'customers' => array(
      'text'   => 'Customers',
      'rights' => 'user',
      'sub' => array(
         'create-new' => array(
            'text'   => 'Create new customer',
            'rights' => 'user'
         ),
         'show-customers' => array(
            'text'   => 'Show all customers',
            'rights' => 'user'
         )
      )
   )
);

以及用于从上述数组构建菜单的PHP:

And the PHP to build the menu from an array as above:

function buildMenu($menu_array, $is_sub=FALSE) {

   $attr = (!$is_sub) ? ' id="menu"' : ' class="submenu"';
   $menu = "<ul".$attr.">";

   foreach($menu_array as $id => $properties) {
      foreach($properties as $key => $val) {
         if(is_array($val)) {
            $sub = buildMenu($val, TRUE);
         }
         else {
            $sub = NULL;
            $$key = $val;
         }
      }
      if(!isset($url)) {
         $url = $id;
      }
      $menu .= "<li><a href=".$url.">".$text."</a>".$sub."</li>";
      unset($url, $text, $sub);
   }

   return $menu . "</ul>";
}

echo $output = buildMenu($menu);

我想要的输出是:

<ul class="nav navbar-nav">
    <li><a href="#">Calendrier</a></li>
    <li class="dropdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Customers <span class="caret"></span></a>
        <ul class="dropdown-menu">
            <li><a href="#">Create new customer</a></li>
            <li><a href="#">Show all customers</a></li>
        </ul>
    </li>
</ul>

推荐答案

您的菜单功能对我有用,但是菜单的html属性需要进行一些更改:

Your menu function was working for me, but the menu's html attributes needed some alteration:

<?php
function buildMenu(array $menu_array, $is_sub=FALSE)
{
   $ul_attrs = $is_sub ? 'class="dropdown-menu"' : 'class="nav navbar-nav"';
   $menu = "<ul $ul_attrs>";

   foreach($menu_array as $id => $attrs) {
      $sub = isset($attrs['sub']) 
         ? buildMenu($attrs['sub'], TRUE) 
         : null;
      $li_attrs = $sub ? 'class="dropdown"' : null;
      $a_attrs  = $sub ? 'class="dropdown-toggle" data-toggle="dropdown"' : null;
      $carat    = $sub ? '<span class="caret"></span>' : null;
      $menu .= "<li $li_attrs>";
      $menu .= "<a href='$id' $a_attrs>${attrs['text']}$carat</a>$sub";
      $menu .= "</li>";
   }

   return $menu . "</ul>";
}

您可以传入父路径段而不是$ is_sub布尔值来构造URL路径,或者将URL显式添加到菜单数组中并进行相应调整.

You could pass in a parent path segment instead of the $is_sub boolean to construct url paths, or add the urls explicitly to the menu array and adjust accordingly.

这篇关于从PHP数组构建引导程序下拉多级菜单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆