2010-08-05 4 views
1

J'ai un élément de menu appelé "Inbox" dans un menu appelé "dealer-menu". Je veux changer "Inbox" en "Inbox (1)" ou "Inbox (2)" selon le nombre de messages que l'utilisateur a dans sa boîte de réception. Comment puis-je changer la valeur sur la volée. C'est à dire. à chaque rafraîchissement de la page?Modifier des éléments de menu à la volée dans Drupal?

Répondre

0

je fini par résoudre comme ceci:

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

Si vous appelez hook_menu_link_alter vous pouvez définir $item['options']['alter'] = TRUE; sur chaque élément de menu - vous devez modifier l'élément de menu pour ce crochet d'être appelé et l'alter permission mis à vrai. Une fois que cela a été défini, hook_translated_menu_link_alter sera appelé avant que chaque élément de menu ne soit rendu, vous permettant de changer le titre de l'élément de menu.

Exemple de code serait:

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().')'; 
    } 
} 

La seule limitation est que hook_menu_link_alter marquera tous les liens que altérables qui n'est pas nécessairement souhaitable (effet négatif sur la performance) - quelques contrôles supplémentaires sur l'élément $ ici signifierait que vous ne faites que marquer les éléments de menu que vous voulez comme modifiables.

Questions connexes