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;
}
请让我知道实现这一目标的正确方法。
非常感谢