Здравствуйте.
Имеется тривиальная ситуация: пользователю пришло личное сообщение, и нужно изменить текст соответствующего пункта меню с "Сообщения" на "Сообщения (1)". До недавних пор я использовал свой модуль для этого меню и проблемы не было, но теперь я использую стандартное меню навигации, и тут все не так просто. Хук menu_alter, на который я рассчитывал, оказывается, вызывается только единожды, при построении меню.
В идеале было бы неплохо заиметь модуль, который позволяет писать в названиях пунктов меню PHP-код. Ну или как это возможно реализовать с помощью хуков?
Комментарии
Все верно, через hook_menu_alter(), свойство title_callback этим и занимается
Спасибо, судя по всему, это именно то, что нужно. Однако странно, код
<?php function menu_alterer_pmsg_title($str=NULL)
{
watchdog('content', 'menu alter');
return "new title";
}
function menu_alterer_menu_alter(&$menu)
{
$menu['messages']['title callback'] = 'menu_alterer_pmsg_title';
}
?>
не работает. Пункт меню не изменяется.
кэш меню сбрасывали?
Конечно.
Попробовал для разных пунктов меню, использовал title arguments - все равно. Функция menu_alterer_pmsg_title никогда не вызывается, вотчдог - свидетель.
Сам код верный? Возможно ли, что какой-нибудь модуль препятствует нормальному ходу вещей?
Нескромный вопрос Ваш модуль называется menu_alterer?
Как видно из кода, да. Думаете, проблема в этом?
После некоторого изучения темы возникло несколько вопросов. Возможно, я вообще не там копаю.
Например, в массиве, передаваемом в menu_alter, каждому пути соответствует один пункт меню. А в навигации этому пути может соответствовать несколько пунктов.
Мне удалось установить title callback для адреса logout. Однако для других пунктов ничего не получается.