保持父菜单项在子页面中处于活动状态

时间:2014-11-07 19:54:33

标签: php arrays codeigniter

Helo,我从db获得了这个导航数组,并且我已经以父子格式准备了数组。所以我的问题是,当我访问子页面时,如何保持父菜单处于活动状态。我正在使用Codeigniter。 slug由管理员面板中的用户动态定义。

这是我的虚拟数组:

array(3) {
  [0]=>
  array(4) {
    ["id"]=>
    int(1)
    ["menu_item"]=>
    string(5) "Item1"
    ["slug"]=>
    string(6) "item-1"
    ["parent_id"]=>
    int(0)
  }
  [1]=>
  array(5) {
    ["id"]=>
    int(2)
    ["menu_item"]=>
    string(5) "Item2"
    ["slug"]=>
    string(6) "item-2"
    ["parent_id"]=>
    int(0)
    ["children"]=>
    array(1) {
      [0]=>
      array(5) {
        ["id"]=>
        int(5)
        ["menu_item"]=>
        string(5) "Item5"
        ["slug"]=>
        string(6) "item-5"
        ["parent_id"]=>
        int(2)
        ["children"]=>
        array(1) {
          [0]=>
          array(4) {
            ["id"]=>
            int(4)
            ["menu_item"]=>
            string(5) "Item4"
            ["slug"]=>
            string(6) "item-4"
            ["parent_id"]=>
            int(5)
          }
        }
      }
    }
  }
  [2]=>
  array(4) {
    ["id"]=>
    int(3)
    ["menu_item"]=>
    string(5) "Item3"
    ["slug"]=>
    string(6) "item-3"
    ["parent_id"]=>
    int(0)
  }
}

这是我的路线设置来抓取页面:

$route['([a-zA-Z0-9_-]+)'] = 'pages/render';

现在我只有通过将slug与uri_segment(1)与此函数进行比较来访问根页面时才能成功激活菜单:

function get_menu ($array, $child = FALSE)
{
    $CI =& get_instance();
    $str = '';

    if (count($array)) {
        $str .= $child == FALSE ? '<ul class="nav">' . PHP_EOL : '<ul class="dropdown-menu">' . PHP_EOL;

        foreach ($array as $item) {

            $active = $CI->uri->segment(1) == $item['slug'] ? TRUE : FALSE;
            if (isset($item['children']) && count($item['children'])) {
                $str .= $active ? '<li class="dropdown active">' : '<li class="dropdown">';
                $str .= '<a  class="dropdown-toggle" data-toggle="dropdown" href="' . site_url(e($item['slug'])) . '">' . e($item['title']);
                $str .= '<b class="caret"></b></a>' . PHP_EOL;
                $str .= get_menu($item['children'], TRUE);
            }
            else {
                $str .= $active ? '<li class="active">' : '<li>';
                $str .= '<a href="' . site_url($item['slug']) . '">' . e($item['title']) . '</a>';
            }
            $str .= '</li>' . PHP_EOL;
        }

        $str .= '</ul>' . PHP_EOL;
    }

    return $str;
}

请让我知道实现这一目标的正确方法。

非常感谢

0 个答案:

没有答案
相关问题