4.7.x menu.inc menu_get_item($mid, $path = NULL, $reset = FALSE)
5.x menu.inc menu_get_item($mid, $path = NULL, $reset = FALSE)
6.x menu.inc menu_get_item($path = NULL, $router_item = NULL)
7.x menu.inc menu_get_item($path = NULL, $router_item = NULL)

Gets a router item.


$path: The path; for example, 'node/5'. The function will find the corresponding node/% item and return that. Defaults to the current path.

$router_item: Internal use only.

Return value

The router item or, if an error occurs in _menu_translate(), FALSE. A router item is an associative array corresponding to one row in the menu_router table. The value corresponding to the key 'map' holds the loaded objects. The value corresponding to the key 'access' is TRUE if the current user can access this page. The values corresponding to the keys 'title', 'page_arguments', 'access_arguments', and 'theme_arguments' will be filled in based on the database values and the objects loaded.

Related topics

24 calls to menu_get_item()
block_page_build in modules/block/block.module
Implements hook_page_build().
blog_menu_local_tasks_alter in modules/blog/blog.module
Implements hook_menu_local_tasks_alter().
dashboard_is_visible in modules/dashboard/dashboard.module
Determines if the dashboard should be displayed on the current page.
drupal_retrieve_form in includes/form.inc
Retrieves the structured array that defines a given form.
MenuRouterTestCase::testMenuSetItem in modules/simpletest/tests/menu.test
Test menu_set_item().

... See full list


includes/menu.inc, line 455
API for the Drupal menu system.


function menu_get_item($path = NULL, $router_item = NULL) {
  $router_items =& drupal_static(__FUNCTION__);
  if (!isset($path)) {
    $path = $_GET['q'];
  if (isset($router_item)) {
    $router_items[$path] = $router_item;
  if (!isset($router_items[$path])) {

    // Rebuild if we know it's needed, or if the menu masks are missing which
    // occurs rarely, likely due to a race condition of multiple rebuilds.
    if (variable_get('menu_rebuild_needed', FALSE) || !variable_get('menu_masks', array())) {
      if (_menu_check_rebuild()) {
    $original_map = arg(NULL, $path);
    $parts = array_slice($original_map, 0, MENU_MAX_PARTS);
    $ancestors = menu_get_ancestors($parts);
    $router_item = db_query_range('SELECT * FROM {menu_router} WHERE path IN (:ancestors) ORDER BY fit DESC', 0, 1, array(
      ':ancestors' => $ancestors,
    if ($router_item) {

      // Allow modules to alter the router item before it is translated and
      // checked for access.
      drupal_alter('menu_get_item', $router_item, $path, $original_map);
      $map = _menu_translate($router_item, $original_map);
      $router_item['original_map'] = $original_map;
      if ($map === FALSE) {
        $router_items[$path] = FALSE;
        return FALSE;
      if ($router_item['access']) {
        $router_item['map'] = $map;
        $router_item['page_arguments'] = array_merge(menu_unserialize($router_item['page_arguments'], $map), array_slice($map, $router_item['number_parts']));
        $router_item['theme_arguments'] = array_merge(menu_unserialize($router_item['theme_arguments'], $map), array_slice($map, $router_item['number_parts']));
    $router_items[$path] = $router_item;
  return $router_items[$path];


nafmarcus’s picture

The documentation says that the function returns a "router item, an associate array corresponding to one row in the menu_router table."

I can examine the array but want to understand what these items are. Specifically I would like to understand the map and original map items and the difference between them.

Also page_arguments sometimes contains an object and sometimes just the uri arguments.

Lots of other fields could also use clarification.

If there's a better place to post this or find the information, please direct me there and I'd be happy to move this post (or delete it).

beanluc’s picture