Drupal 7 - 与儿童或父母的相对菜单

时间:2016-01-24 13:02:59

标签: php drupal menu 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 !@$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 个答案:

答案 0 :(得分:1)

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