| 5 menu.inc | menu_get_item( |
| 6 menu.inc | menu_get_item($path = NULL, $router_item = NULL) |
| 7 menu.inc | menu_get_item($path = NULL, $router_item = NULL) |
| 8 menu.inc | menu_get_item($path = NULL, $router_item = NULL) |
Get a router item.
Parameters
$path: The path, for example node/5. The function will find the corresponding node/% item and return that.
$router_item: Internal use only.
Return value
The router item, an associate array corresponding to one row in the menu_router table. The value of key map holds the loaded objects. The value of key access is TRUE if the current user can access this page. The values for key title, page_arguments, access_arguments, and theme_arguments will be filled in based on the database values and the objects loaded.
Related topics
31 calls to menu_get_item()
File
- includes/
menu.inc, line 446 - API for the Drupal menu system.
Code
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())) {
menu_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))->fetchAssoc();
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];
}
Login or register to post comments
Comments
Understanding menu_router_table entry
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).
hook_menu()
http://api.drupal.org/api/drupal/modules!system!system.api.php/function/hook_menu/7 describes everything.