function menu_navigation_links

Returns an array of links for a navigation menu.

Parameters

$menu_name: The name of the menu.

$level: Optional, the depth of the menu to be returned.

Return value

An array of links of the specified menu and level.

Related topics

2 calls to menu_navigation_links()
menu_main_menu in includes/menu.inc
Returns an array of links to be rendered as the Main menu.
menu_secondary_menu in includes/menu.inc
Returns an array of links to be rendered as the Secondary links.

File

includes/menu.inc, line 1858

Code

function menu_navigation_links($menu_name, $level = 0) {
    // Don't even bother querying the menu table if no menu is specified.
    if (empty($menu_name)) {
        return array();
    }
    // Get the menu hierarchy for the current page.
    $tree = menu_tree_page_data($menu_name, $level + 1);
    // Go down the active trail until the right level is reached.
    while ($level-- > 0 && $tree) {
        // Loop through the current level's items until we find one that is in trail.
        while ($item = array_shift($tree)) {
            if ($item['link']['in_active_trail']) {
                // If the item is in the active trail, we continue in the subtree.
                $tree = empty($item['below']) ? array() : $item['below'];
                break;
            }
        }
    }
    // Create a single level of links.
    $router_item = menu_get_item();
    $links = array();
    foreach ($tree as $item) {
        if ($item['link']['access'] && !$item['link']['hidden']) {
            $class = '';
            $l = $item['link']['localized_options'];
            $l['href'] = $item['link']['href'];
            $l['title'] = $item['link']['title'];
            if ($item['link']['in_active_trail']) {
                $class = ' active-trail';
                $l['attributes']['class'][] = 'active-trail';
            }
            // Normally, l() compares the href of every link with $_GET['q'] and sets
            // the active class accordingly. But local tasks do not appear in menu
            // trees, so if the current path is a local task, and this link is its
            // tab root, then we have to set the class manually.
            if ($item['link']['href'] == $router_item['tab_root_href'] && $item['link']['href'] != $_GET['q']) {
                $l['attributes']['class'][] = 'active';
            }
            // Keyed with the unique mlid to generate classes in theme_links().
            $links['menu-' . $item['link']['mlid'] . $class] = $l;
        }
    }
    return $links;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.