Динамический пункт меню

Главные вкладки

Аватар пользователя akiyamatakahashi akiyamatakahashi 18 сентября 2010 в 19:51

Здравствуйте.
Имеется тривиальная ситуация: пользователю пришло личное сообщение, и нужно изменить текст соответствующего пункта меню с "Сообщения" на "Сообщения (1)". До недавних пор я использовал свой модуль для этого меню и проблемы не было, но теперь я использую стандартное меню навигации, и тут все не так просто. Хук menu_alter, на который я рассчитывал, оказывается, вызывается только единожды, при построении меню.
В идеале было бы неплохо заиметь модуль, который позволяет писать в названиях пунктов меню PHP-код. Ну или как это возможно реализовать с помощью хуков?

Комментарии

Аватар пользователя akiyamatakahashi akiyamatakahashi 18 сентября 2010 в 20:13

"RxB" wrote:
Все верно, через 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';
}
?>

не работает. Пункт меню не изменяется.

Аватар пользователя akiyamatakahashi akiyamatakahashi 18 сентября 2010 в 20:43

Попробовал для разных пунктов меню, использовал title arguments - все равно. Функция menu_alterer_pmsg_title никогда не вызывается, вотчдог - свидетель.

Аватар пользователя akiyamatakahashi akiyamatakahashi 19 сентября 2010 в 1:18

"<a href="mailto:annya@drupal.org">annya@drupal.org</a>" wrote:
Нескромный вопрос Ваш модуль называется menu_alterer?

Как видно из кода, да. Думаете, проблема в этом?

Аватар пользователя akiyamatakahashi akiyamatakahashi 22 сентября 2010 в 14:22

После некоторого изучения темы возникло несколько вопросов. Возможно, я вообще не там копаю.
Например, в массиве, передаваемом в menu_alter, каждому пути соответствует один пункт меню. А в навигации этому пути может соответствовать несколько пунктов.
Мне удалось установить title callback для адреса logout. Однако для других пунктов ничего не получается.