Drupalのタブを新しく追加する方法

f:id:cyubachi:20140424144134p:plain

↑こんな感じに追加する方法。

$item = array(
  'link_path' => 'sandbox',
  'link_title' => 'sandbox',  // リンクのタイトル
  'menu_name' => 'main-menu', // main-menuに追加
  'module' => 'mymodule',
  'router_path' => 'sandbox'
);
menu_link_save($item);

.installファイルのhook_installあたりに書いておけば、
モジュールをインストールするとタブが新しく作られるなんて事も出来そう。
消し方はまた別途調査。

追記:
モジュールインストール時に実行する際は
router_pathに存在するパス(自身のものでもいいらしい)を設定しておかないと
ちゃんと登録されなかった。

メニューの消し方

  $menuItem = menu_link_get_preferred('sandbox', 'main-menu');
  menu_link_delete($menuItem['mlid']);

追記:
モジュールのinstall時、enable時に有効にする方法。
hook_modules_enabled時にメニューを構築してやる。

function mymodule_modules_enabled($modules){
  if(in_array('mymodule', $modules)){

    menu_rebuild();               // この段階でメニューを構築する。

    $item = array(
      'link_path' => 'sandbox',
      'link_title' => 'sandbox',  // リンクのタイトル
      'menu_name' => 'main-menu', // main-menuに追加
      'module' => 'mymodule',
      'router_path' => 'sandbox'
    );
    menu_link_save($item);
  }
}

なんか、menu_rebuild()で最初にモジュール特有のメニューを
menu_routerに登録してやらないと孤立したメニューとみなされて
登録したメニューが消されてしまい、正しく登録できないみたい。

調べるのに4-5時間くらいかかった。Drupalツレーなー。