2014-02-06 51 views
1

嘿,我有问题关于在php中创建的动态菜单。 代码从计算器,我要的是,如果选择这些家长的孩子与红色让我的父母风格,这里是代码:来自PHP阵列的动态菜单

$menu = Array(
    Array(
     'title' => 'Home', 
     'link' => 'a' 
    ), 
    Array(
     'title' => 'Parent', 
     'link' => 'b', 
     'children' => Array(
      Array(
       'title' => 'Sub 1', 
       'link' => 'c' 
      ), 
      Array(
       'title' => 'Sub 2', 
       'link' => 'd' 
      ), 
     ) 
    ) 
); 
function buildMenu($menuArray) 
{ 
    foreach ($menuArray as $node) 
    { 
     $selected = ($node['link']== $_GET['menu']) ? $selected = 'style="color: red;"' : null; 
     echo "<li ".$selected."><a href='?menu=".$node['link']."'/>" . $node['title'] . "</a>"; 
     if (! empty($node['children'])) { 
      echo "<ul>"; 
      buildMenu($node['children']); 
      echo "</ul>"; 
     } 
     echo "</li>"; 
    } 
} 
buildMenu($menu); 

它那么需要如何去:

首页
父 - 选择
子1 - 选择
子2

首页
父 - 选择
子1
分2 - 选择

希望有人明白我想要什么?如果我父母的子女被选中,父母也需要被选择。

+0

给予风格来锚定,而不是李 –

+0

没什么区别。 – user3278890

+0

$ _GET ['menu']的内容是什么? –

回答

1

我已经添加了一个函数来检查孩子的数组元素。可能是更好的解决方案。但在此其快速为您解决:)

$menu = array(
    array(
     'title' => 'Home', 
     'link' => 'a' 
    ), 
    array(
     'title' => 'Parent', 
     'link' => 'b', 
     'children' => array(
      array(
       'title' => 'Sub 1', 
       'link' => 'c' 
      ), 
      array(
       'title' => 'Sub 2', 
       'link' => 'd' 
      ), 
     ) 
    ) 
); 

function buildMenu($menuArray) { 
    foreach ($menuArray as $node) { 

     $getMenu = isset($_GET['menu']) ? $_GET['menu'] : ''; 
     $checkParent = (isset($node['children']) && !empty($node['children'])) ? checkInChildArray($getMenu, $node['children']) : ''; 
     $parentSelected = ($checkParent) ? $selected = 'style="color: red;"' : null; 
     echo "<li " . $parentSelected . "><a href='?menu=" . $node['link'] . "'>" . $node['title'] . "</a></li>"; 
     if (isset($node['children']) && !empty($node['children'])) { 

      echo "<ul>"; 
      foreach ($node['children'] as $subMenu) { 
       $childSelected = ($subMenu['link'] == $getMenu) ? $selected = 'style="color: red;"' : null; 
       echo "<li " . $childSelected . "><a href='?menu=" . $subMenu['link'] . "'>" . $subMenu['title'] . "</a></li>"; 
      } 
      echo "</ul>"; 
     } 
     echo "</li>"; 
    } 
} 

// Checking if selected menu inside children array. 

function checkInChildArray($needle, $haystack, $strict = false) { 
    foreach ($haystack as $item) { 
     if (($strict ? $item['link'] === $needle : $item == $needle) || (is_array($item) && checkInChildArray($needle, $item, $strict))) { 
      return true; 
     } 
    } 

    return false; 
} 


echo buildMenu($menu); 

Working Demo

+0

仍然不选择我的孩子的父母。 – user3278890

+0

啊。我懂了 。假设如果d是'$ _GET ['menu']'值,那么d应该以红色和它的父项显示。对? – Roopendra

+0

是的,如果选择子2,则需要同时选择父,但不是。 – user3278890

0

使用jQuery添加父李背景颜色

$('li.selected').parent().closest('li').css("color","red"); 
+0

我想添加类通过PHP通过PHP,如果它可能以某种方式。 – user3278890

0

传递到每一级菜单的URL。您可以为每个菜单级别添加“选定”类。所以:

$current_menu_level_1 = (isset($_GET['menu_level_1'])) ? $_GET['menu_level_1'] : false; 
$current_menu_level_2 = (isset($_GET['menu_level_2'])) ? $_GET['menu_level_2'] : false; 

当建立你的菜单,比较“是建立项目”到$ current_menu_level1/2变量,并呼应了上课的时候,他们是相同的。

0

请考虑创建一个为<li>元素和<ul>元素选择的css类。

随着PHP在需要时插入此风格,就像这样:

$selected = ($node['link']== $_GET['menu']) ? $selected = 'selected' : ''; 
echo "<li class='".$selected."'>"; 

echo "<ul class='".$selected."'>"; 
     buildMenu($node['children']); 
echo "</ul>";