2014-02-06 47 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>";