web-dev-qa-db-fra.com

Comment et où puis-je ajouter par programme un menu au menu Navigation?

Je souhaite ajouter dynamiquement des éléments de menu au menu Navigation, en fonction de certains états (exemple: l'utilisateur est connecté, etc.). Je suppose que je fais cela dans theme_preprocess, mais je n'arrive pas à trouver la var à Tweak.

Suis-je au mauvais endroit? Où est le meilleur endroit pour le faire et quelle est la meilleure méthode?

6
Justin

Je suggère de vérifier hook_menu () . Par exemple, l'implémentation suivante de hook_menu() placée dans un module ou template.php devrait insérer un élément de menu dans le menu de navigation pour les utilisateurs anonymes. Jetez un œil au module Utilisateur pour obtenir de bons exemples sur la façon d'implémenter hook_menu() pour différents rôles d'utilisateur.

function MODULE_menu() {
   $items = array();
   $items['the/menu/path'] = array(
   'access callback' => 'user_is_anonymous',  //or 'user_is_logged_in' to check if logged in
   'type' => MENU_NORMAL_ITEM,
   'menu_name' => 'navigation',
   'title' => t('Title of Menu Item'),
  );
  return $items;
}
5
joedivic

Je pense que vous pouvez le créer en utilisant menu_link_save().

$item = array(
  'link_path' => 'my_path',
  'link_title' => 'title',
  'menu_name' => 'header-top-menu', // Menu machine name, for example: main-menu
  'weight' => 0,
  'language' => $node->language,
  'plid' => 0, // Parent menu item, 0 if menu item is on top level
  'module' => 'menu',
);
menu_link_save($item);

Vous pouvez utiliser le code que j'affiche dans une implémentation hook_update_N().

Voir aussi Drupal 7 Menu Link update through update.php .

6