ノードの表示や編集タブの横に新たなタブを追加したい。

Events happening in the community are now at Drupal community events on www.drupal.org.
sfinity's picture

いつもお世話になってます。

モジュールを作りhook_menuで、ノードにタブを表示したいと考えています。

モジュールを作るのは今回が初めてとなり、モジュールメニューと管理画面に
メニューを出す所までは出来ました。

次にhook_menuで$itemsにtypeが"MENU_LOCAL_TASK"を使えばタブ表示
になる?と思い、追加したのですが表示されずに悩んでいます。

ノードに表示されている、「表示」や「編集」タブの
横に「追加タブ」という形でタブを追加するには
どのようにしたら良いでしょうか?

ご教授頂きたくよろしくお願いします。

Comments

Wildcard Loader を使います。

qchan's picture

一つの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

できました!

sfinity's picture

%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

qchan's picture

page_collbackでdrupal_get_form

これは問題ないですよ。

'access arguments' => array('~ここの引数が判らない~')

"access arguments" には "access callback"で指定した関数への引数を設定します。
access callback関数を指定しない場合はデフォルトで"user_access" (所謂ロールの権限)が使われます。

sfinityさんの例だと、arrayの中には権限のMachine Readable名を書けば良いことになりますね。

ありがとうございますm(_ _)m

sfinity's picture

使い方を教えて頂き、非常に参考になりました。
モジュール作れるように勉強して行きたいと思います!

日本 コミュニティ: Drupal Japan User Group

Group organizers

Group categories

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: