Drupal 7 - 与孩子或父母的相对菜单


Drupal 7 - relative menu with childrens or parents

我正在使用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 !@$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;
}

如有任何建议,我将不胜感激:)

你看过菜单块吗?https://www.drupal.org/project/menu_block这是一个模块,可让您在菜单的更深层次上非常灵活