Проблема в том, что hook_menu
вызывается при перестроении меню, а не для каждой загрузки одной страницы (так как это было бы очень плохо для производительности).
Самый простой способ сделать то, что вы хотите, это использовать клавишу access callback
вместо access arguments
в ваших пунктах меню, чтобы принять оперативное решение о том, вошел ли пользователь в систему. Как победил Drupal • покажите пункты меню для любого пользователя, для которого функция access callback
возвращает FALSE
, вы получите желаемый эффект:
function mymodule_menu() {
$items['my_module/user1']=array(
'title' => t('1. User menu 1'),
'page callback' => 'test1',
'access callback' => 'user_is_logged_in',
'type' => MENU_NORMAL_ITEM,
'expanded' => TRUE,
);
$items['my_module/user2']=array(
'title' => t('2. User Menu 2'),
'page callback' => 'test2',
'access callback' => 'user_is_logged_in',
'type' => MENU_NORMAL_ITEM,
'expanded' => TRUE,
);
$items['my_module/guest1']=array(
'title' => t('1. Guest menu 1'),
'page callback' => '1test1',
'access callback' => 'user_is_anonymous',
'type' => MENU_NORMAL_ITEM,
'expanded' => TRUE,
);
$items['my_module/user2']=array(
'title' => t('2. Guest menu 2'),
'page callback' => '1test2',
'access callback' => 'user_is_anonymous',
'type' => MENU_NORMAL_ITEM,
'expanded' => TRUE,
);
return $items;
}
Все эти пункты меню будут добавлены в одно и то же меню, но только два из них будут отображаться для пользователя одновременно.