Posted by sfinity on June 6, 2013 at 10:57am
いつもお世話になってます。
モジュールを作りhook_menuで、ノードにタブを表示したいと考えています。
モジュールを作るのは今回が初めてとなり、モジュールメニューと管理画面に
メニューを出す所までは出来ました。
次にhook_menuで$itemsにtypeが"MENU_LOCAL_TASK"を使えばタブ表示
になる?と思い、追加したのですが表示されずに悩んでいます。
ノードに表示されている、「表示」や「編集」タブの
横に「追加タブ」という形でタブを追加するには
どのようにしたら良いでしょうか?
ご教授頂きたくよろしくお願いします。

Comments
Wildcard Loader を使います。
一つのURLではなく、ノード全てに表示させたいということですね。
複数の場所にMenuを差し込みたい場合、ワイルドカードが使えます。
ノードであればMenu hookのURLに%node を使うと、そのノードIDを引数にして、node_load( )ファンクションが実行されてでノードオブジェクトが呼び出されます。
menu hookはこんな感じになります。
下にdrupa.orgのドキュメントURLを貼りましたので、参考にしてください。
$items['node/%node/tab'] = array('title' => 'Tab',
'page callback' => 'callback',
'page arguments' => array(1),
'type' => MENU_LOCAL_TASK,
,,,
,,,
参考:
Wildcard Loader Arguments | drupal.org
https://drupal.org/node/224170
できました!
%nodeとすることでできました!ありがとうございます。
以下にコードを書いておきます。
(追加でaccess系のオプションを入れることで表示されました)
(今回はログインしている場合に表示)
また、表示するのにpage_collbackでdrupal_get_formを入れました。
タブをクリックした時に同じページ内に表示したかったので入れたのですが
問題ないでしょうか?
一般的にどこに入れるものなんでしょうか?
(オリジナルで作るコールバック関数の中なのか、関係ないのか…)
// ノードにタブを追加$items['node/%node/newtab'] = array(
'access callback' => 'user_is_logged_in',
'title' => 'NEW TAB',
'page callback' => 'drupal_get_form',
'page arguments' => array('test_message',1),
'type' => MENU_LOCAL_TASK,
'file' => 'test.inc',
'weight' => 10,
);
また、以下を追加するとユーザ権限でタブの表示を制御できる?ようなのですが、
権限で制御するにはどのようにしたら良いでしょうか?
'access arguments' => array('~ここの引数が判らない~')
よろしくお願いします。
page_collbackでdrupal_get_form
これは問題ないですよ。
"access arguments" には "access callback"で指定した関数への引数を設定します。
access callback関数を指定しない場合はデフォルトで"user_access" (所謂ロールの権限)が使われます。
sfinityさんの例だと、arrayの中には権限のMachine Readable名を書けば良いことになりますね。
ありがとうございますm(_ _)m
使い方を教えて頂き、非常に参考になりました。
モジュール作れるように勉強して行きたいと思います!