2016-01-24 225 views
1

我在使用Drupal 7的網站上工作,並且有打印當前頁面相關菜單的面板。例如我的菜單看起來像這樣:Drupal 7 - 與兒童或父母相關的菜單

MENU PRIMARY 
-SUBMENU 
--LINK 1 
--LINK 2 
---sublink 1 
---sublink 2 
--LINK 3 

當我在節點sublink 1菜單顯示:

LINK 2 
--sublink 1 (active) 
--sublink 2 

問題是,當我如LINK 3不具有孩子的和菜單隻輸入顯示當前節點

LINK 3 

的標題在這種情況下,我想,以顯示所有相關聯繫鏈接到本當前頁面所以它應該是這樣的:

LINK 1 
LINK 2 
LINK 3 (active) 

我不知道如何檢查並打印正確的菜單。 這裏是我的功能,處理這個問題:

function mysite_relative_main_menu() { 
    $menu_name = variable_get('menu_main_links_source', 'main-menu'); 

    $parents = menu_get_active_trail(); 
    array_shift($parents); 
    $expanded_parents = array_filter($parents, function($item){ 
    return [email protected]$item["expanded"]; 
    }); 
    if (count($expanded_parents) > 1) { 
    array_shift($expanded_parents); 
    } 
    $parent = current($expanded_parents); 
    if (!$parent) { 
    return NULL; 
    } 

    $main_tree = menu_tree_all_data($menu_name, NULL, NULL); 
    $flat_tree = $main_tree; 
    $walk_over_trees = function($tree) use(&$flat_tree, &$walk_over_trees) { 
    foreach ($tree as $data) { 
     foreach ($data["below"] as $tree) { 
     $flat_tree[] = $tree; 

     if ($tree["below"]) { 
      call_user_func_array($walk_over_trees, [[$tree]]); 
     } 
     } 
    } 
    }; 
    call_user_func_array($walk_over_trees, [$main_tree]); 

    $subtree = [current(array_filter($flat_tree, function($data) use($parent) { 
    return $data["link"]["link_path"] == $parent["link_path"]; 
    }))]; 

    $tree_output_prepare = menu_tree_output($subtree); 

    $list = drupal_render($tree_output_prepare); 
    $list = substr_replace($list, "<ul class=\"nav navbar-nav\"", strpos($list, "<ul "), 3); 

    return $list; 
} 

我會爲任何建議:)

回答

1

你看看菜單塊感激? https://www.drupal.org/project/menu_block 這是一個模塊,讓您在菜單的更深層次上真正靈活

+0

感謝您的回覆。它看起來很有趣。我會試一試;)無論如何,爲了將來,如果有人知道編程解決方案,我會很高興聽到它;) –