web-dev-qa-db-ja.com

プログラムでメニューをナビゲーションメニューに追加する方法と場所を教えてください。

特定の状態(例:ユーザーがログインしているなど)に応じて、メニュー項目をナビゲーションメニューに動的に追加したい。これはtheme_preprocessで行うと思いますが、Tweakするvarを見つけることができないようです。

間違った場所を探していますか?これを行うのに最適な場所はどこですか?最適な方法は何ですか?

6
Justin

チェックアウト hook_menu() をお勧めします。たとえば、モジュールまたはtemplate.phpに配置された次のhook_menu()の実装は、匿名ユーザーのナビゲーションメニューにメニュー項目を挿入する必要があります。さまざまなユーザーロールにhook_menu()を実装する方法の良い例については、Userモジュールをご覧ください。

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

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);
_

私がhook_update_N()実装で示しているコードを使用できます。

pdate.phpによるDrupal 7メニューリンクの更新 も参照してください。

6