在Drupal中动态编辑菜单项?

在Drupal中动态编辑菜单项?,drupal,drupal-6,Drupal,Drupal 6,我在一个叫做经销商菜单的菜单上有一个叫做收件箱的菜单项。我想根据用户收件箱中的邮件数量将收件箱更改为收件箱1或收件箱2。如何动态更改值。也就是说,每次刷新页面时?我最终都是这样解决的: $dealerMenu = menu_navigation_links('menu-dealer-menu'); $menu = theme('links', $dealerMenu); print str_replace("Inbox", "Inbox (".get_number_of_messages_in_

我在一个叫做经销商菜单的菜单上有一个叫做收件箱的菜单项。我想根据用户收件箱中的邮件数量将收件箱更改为收件箱1或收件箱2。如何动态更改值。也就是说,每次刷新页面时?

我最终都是这样解决的:

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

如果调用hook\u menu\u link\u alter,则可以将$item['options']['alter']=TRUE;在每个菜单项上-您需要编辑要调用的钩子的菜单项,并将alter权限设置为true

设置后,在呈现每个菜单项之前,将调用hook\u translated\u menu\u link\u 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\u menu\u link\u alter会将每个链接标记为可更改的,这并不一定会对性能产生不利影响-此处对$item进行一些额外检查意味着您只会将它们标记为可更改的菜单项