2014-11-20 2 views
0

나는 druapl 테마 개발을 처음 사용합니다. drupal admin에서 계층 메뉴를 생성했습니다. 내 page.tpl.php 파일에서이 메뉴를 렌더링하고 싶습니다. 다음 코드를 사용했지만 그 서브 메뉴를 렌더링하지 않았습니다. 그것들이 그것들을 아무 것도 보이지 않는 것처럼 보이지는 않는다. 그러나 그것들은 전혀 렌더링되지 않는다 (하위 메뉴들).드루팔 (Drupal 7) 사용자 정의 메뉴 렌더링

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

답변

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); 
+0

답장을 보내 주셔서 감사합니다. 그러나 두 가지 모두 나를 위해 작동하지 않습니다. drupal7 기본 테마입니다. – harish

+0

사용자 정의 코드 작성을 시작하지 않으려면 '메뉴 블록'모듈을 살펴 보는 것이 좋습니다. 이것을 구현하려면 핵심 테마를 사용하는 대신 자신 만의 테마를 만들어야합니다. –

+0

나는 내 자신의 테마를 쓰고 있는데, 이번에는 테마 훅을 따라, 여기에 도움이되는 것처럼 사용했다. http://dannyenglander.com/blog/theming-multi-level-responsive-menu-drupal-7,하지만 나는 그렇지 않았다. 깨끗하고 깔끔한 대답을 얻었고 메뉴 및 하위 메뉴의 렌더링과 클래스 및 ID 렌더링을 완전히 오버라이드하고 싶습니다. 핵심 메뉴 렌더링에 대한 완전한 제어 (재정의)를 원합니다. 즉, 전체 메뉴에서 태그를 각각 제어 할 수 있습니다. – harish

3

의 깊이까지 자식 항목을 부모로 현재 페이지로, 하위 메뉴를 생성하고 표시합니다 다음 코드는 완벽하게 제어 할 수 있습니다 렌더링에. 당신은 당신의 메뉴 링크를로드 할 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')을 깊이 제한을 사용하지 않으려는 경우.