0

druapl テーマ開発は初めてです。drupal admin から階層メニューを作成しました。このメニューを page.tpl.php ファイルでレンダリングしたいと考えています。次のコードを使用しましたが、サブメニューをレンダリングしていません。それらを表示なしとして表示しているわけではありませんが、それらは(サブメニュー)まったくレンダリングされていません。

$params = array(
  'links' => menu_navigation_links('menu-eschopper-main-menu'),
  'attributes' => array(
    'class'=> array('nav','navbar-nav','collapse', 'navbar-collapse'),
  ),
);
print theme('links', $params);
4

2 に答える 2

4

レンダリングを完全に制御するために、以前は手動で行っていました。を使用menu_tree_all_data()してメニュー リンクをロードし、その上で foreach を使用できます。

template.php

function render_menu_tree($menu_tree) {
    print '<ul>';
    foreach ($menu_tree as $link) {
        print '<li>';
        $link_path = '#';
        $link_title = $link['link']['link_title'];
        if($link['link']['link_path']) {
            $link_path = drupal_get_path_alias($link['link']['link_path']);
        }
        print '<a href="/' . $link_path . '">' . $link_title . '</a>';
        if(count($link['below']) > 0) {
            render_menu_tree($link['below']);
        }
        print '</li>';
    }
    print '</ul>';
}

page.tpl.php

$main_menu_tree = menu_tree_all_data('menu-name', null, 3);
render_menu_tree($main_menu_tree);

menu_tree_all_data('menu-name')深度制限を使用したくない場合は、代わりに使用してください。

于 2015-06-01T09:32:12.350 に答える
0

「menu_navigation_links」を使用している関数は、単一レベルのリンクのみを表示します。メニュー ブロック モジュール ( https://www.drupal.org/project/menu_block ) を参照するか、以下の例のような機能を使用することをお勧めします。

/**
 * Get a menu tree from a given parent.
 *
 * @param string $path
 *   The path of the parent item. Defaults to the current path.
 * @param int $depth
 *   The depth from the menu to get. Defaults to 1.
 *
 * @return array
 *   A renderable menu tree.
 */
function _example_landing_get_menu($path = NULL, $depth = 1) {
  $parent = menu_link_get_preferred($path);
  if (!$parent) {
    return array();
  }

  $parameters = array(
    'active_trail' => array($parent['plid']),
    'only_active_trail' => FALSE,
    'min_depth' => $parent['depth'] + $depth,
    'max_depth' => $parent['depth'] + $depth,
    'conditions' => array('plid' => $parent['mlid']),
  );

  return menu_build_tree($parent['menu_name'], $parameters);
}

この関数は、特定の深さの特定の URL から始まるメニュー ツリーを返します。

次のコードは、現在のページを親として持つサブ メニューを生成し、深さ 2 までの子アイテムを表示します。

$menu = _example_landing_get_menu(NULL, 2);
print render($menu);
于 2014-11-20T12:08:58.313 に答える