Редактировать пункты меню на лету в Drupal? - PullRequest
1 голос
/ 05 августа 2010

У меня есть пункт меню «Входящие» в меню «Дилер-меню». Я хочу изменить «Входящие» на «Входящие (1)» или «Входящие (2)» в зависимости от количества сообщений, которые пользователь имеет в своем почтовом ящике. Как мне изменить значение на мухе. То есть на каждой странице обновлять?

Ответы [ 2 ]

0 голосов
/ 02 июля 2012

Если вы вызываете hook_menu_link_alter, тогда вы можете установить $item['options']['alter'] = TRUE; для каждого пункта меню - вам нужно будет отредактировать пункт меню для вызова этого ловушки и установить для разрешения alter значение true.

Как только это будет установлено, то будет вызываться hook_translated_menu_link_alter перед тем, как будет отображаться каждый элемент меню, что позволяет вам изменить заголовок пункта меню.

Пример кода будет:

function MY_MODULE_menu_link_alter(&$item) {
    $item['options']['alter'] = TRUE;
}

function MY_MODULE_translated_menu_link_alter(&$item, $map) {
    if($item['mlid']==89) {
        $item['title'] .= ' ('.get_number_of_messages_in_inbox().')';
    }
}

Единственным ограничением этого является то, что hook_menu_link_alter помечает каждую ссылку как изменяемую, что не обязательно желательно (отрицательно влияет на производительность) - некоторые дополнительные проверки на элементе $ здесь означают, что вы отмечаете только те пункты меню, которые вы хотите изменить. .

0 голосов
/ 05 августа 2010

В итоге я решил это так:

$dealerMenu = menu_navigation_links('menu-dealer-menu');
$menu = theme('links', $dealerMenu);
print str_replace("Inbox", "Inbox (".get_number_of_messages_in_inbox().")", $menu);
...