Вывод hook_menu
, hook_menu_alter
и т. Д. Кэшируется, поэтому эти функции будут вызываться только после очистки кеша, а не для каждой загрузки страницы. Если подумать, если бы меню перестраивались при каждой загрузке страницы, производительность сайта значительно снизилась бы.
Таким образом, когда вызывается hook_menu_alter
(который не будет на странице узла), для menu_get_object()
не будет узла, который бы вам дал. Способ справиться с этими вещами заключается в обратном вызове страницы / доступа для пункта меню:
function mymodule_menu_alter(&$items) {
$items['some/path']['page callback'] = 'mymodule_page_callback';
}
function mymodule_page_callback() {
// This is a live page so menu_get_object() is now available
$node = menu_get_object();
}
Из вашего комментария я думаю, что вы пытаетесь запретить доступ к определенным узлам на основе некоторых критериев. Для этого вы захотите реализовать свой собственный обратный вызов для доступа к уже существующему пути меню node/%
. Примерно так:
function mymodule_menu_alter(&$items) {
$items['node/%node']['access callback'] = 'mymodule_access_callback';
}
function mymodule_access_callback($node) {
if ($node->type == 'group') {
if (some_function_that_determines_access($node)) {
return TRUE;
}
return FALSE;
}
return node_access('view', $node);
}