Skip to content
Snippets Groups Projects
Commit 9b3c8c52 authored by Angie Byron's avatar Angie Byron
Browse files

#553944 by sun: Define hook_menu_get_item_alter() as a reliable hook that runs...

#553944 by sun: Define hook_menu_get_item_alter() as a reliable hook that runs before the page is generated.
parent 7df9394c
No related branches found
No related tags found
2 merge requests!7452Issue #1797438. HTML5 validation is preventing form submit and not fully...,!789Issue #3210310: Adjust Database API to remove deprecated Drupal 9 code in Drupal 10
...@@ -427,6 +427,10 @@ function menu_get_item($path = NULL, $router_item = NULL) { ...@@ -427,6 +427,10 @@ function menu_get_item($path = NULL, $router_item = NULL) {
cache_set($cid, $router_item, 'cache_menu'); cache_set($cid, $router_item, 'cache_menu');
} }
if ($router_item) { 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); $map = _menu_translate($router_item, $original_map);
$router_item['original_map'] = $original_map; $router_item['original_map'] = $original_map;
if ($map === FALSE) { if ($map === FALSE) {
......
...@@ -849,6 +849,38 @@ function hook_page_build(&$page) { ...@@ -849,6 +849,38 @@ function hook_page_build(&$page) {
} }
} }
/**
* Alter a menu router item right after it has been retrieved from the database or cache.
*
* This hook is invoked by menu_get_item() and allows for run-time alteration of router
* information (page_callback, title, and so on) before it is translated and checked for
* access. The passed in $router_item is statically cached for the current request, so this
* hook is only invoked once for any router item that is retrieved via menu_get_item().
*
* Usually, modules will only want to inspect the router item and conditionally
* perform other actions (such as preparing a state for the current request).
* Note that this hook is invoked for any router item that is retrieved by
* menu_get_item(), which may or may not be called on the path itself, so implementations
* should check the $path parameter if the alteration should fire for the current request
* only.
*
* @param $router_item
* The menu router item for $path.
* @param $path
* The originally passed path, for which $router_item is responsible.
* @param $original_map
* The path argument map, as contained in $path.
*
* @see menu_get_item()
*/
function hook_menu_get_item_alter(&$router_item, $path, $original_map) {
// When retrieving the router item for the current path...
if ($path == $_GET['q']) {
// ...call a function that prepares something for this request.
mymodule_prepare_something();
}
}
/** /**
* Define menu items and page callbacks. * Define menu items and page callbacks.
* *
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment