ヘルプを表示します。下記の例により、[管理セクション]→[ヘルプ] に Testモジュールが追加されます。パスは http://~/?q=admin/help/test となります。Drupal 5.x と 6.x では引数が変更されています。
function test_help($path, $arg) { switch ($path) { case 'admin/help#test': $output = '<p>' . t('This is TEST module.') . '</p>'; return $output; } }
ナビゲーションリンクへのメニューを設定します。下記の例ではナビゲーションリンクのトップに TEST メニューが表示されます。メニューが実行されると test_main() が呼び出されます。このメニューは 'do test' 権限を持っているユーザが実行できます。$item['test'] を $item['admin/build/test'] とすると、[管理セクション]→[サイトの構築]→[TEST] メニューが追加されます。
function test_menu() { $item['test'] = array( 'title' => 'TEST', 'page callback' => 'test_main', 'access arguments' => array('do test'), ); return $item; }
[管理セクション]→[ユーザの管理]→[権限] で参照可能な権限を追加します。
function test_perm() { return array('do test'); }
ページが開かれる度に呼び出されます。必要とするCSSファイルやJavaScriptファイルを追加する場合に便利です。
function test_init() { drupal_add_css(drupal_get_path('module', 'test') . '/test.css'); }
cron.php が実行された時に実行されます。
function test_cron() { : }
モジュールが有効化された時に実行されます。
function test_enable() { : }
モジュールが無効化された時に実行されます。
function test_disable() { : }
ページのフッタに追加するHTMLを指定します。ページ末尾に JavaScript コードを埋め込むのにも使用されます。フロントページの時 $main は 0 になります。
function test_footer($main) { return '<div>See you!</div>'; }
モジュールがブロックをサポートする場合に定義します。$op = 'list' は、[管理セクション]→[サイトの構築]→[ブロック] で表示される名前を定義します。$op = 'view' は、そのブロックが表示される際に $block->subject と $block->content で参照されるHTMLを定義します。subject と content 以外にも任意のブロック変数を増やすことができます。複数のブロックをサポートする場合、$delta が 0, 1, 2... と変化します。
function test_block($op = 'list', $delta = 0) { if ($op == 'list') { $blocks[0] = array( 'info' => t('Test block'), ); return $blocks; } if ($op == 'view') { if ($delta == 0) { $block = array( 'subject' => t('Test block'), 'content' => t('Hello World'), ); } return $block; } }
syslog に記録するような何らかのイベントが発生した際に呼び出されます。
function test_watchdog($log_msg) { $msg = "---------------------\n"; "Severity: {$log_msg['severity']}\n" . "Time: " . format_date($log_msg['timestamp']) . "\n" . "Type: {$log_msg['type']}\n" . "Ip Address: {$log_msg['ip']}\n" . "Message: {$log_msg['message']}\n" . "Name: {$log_msg['user']->name}\n" . "Uid: {$log_msg['user']->uid}\n" . "Link: {$log_msg['link']}\n" . "Request URI: {$log_msg['request_uri']}\n" . "Referrer URI: {$log_msg['referer_uri']}\n" . "---------------------\n"; $log = fopen("/tmp/xx", "a"); fwrite($log, "test_watchdog()\n"); fwrite($log, $msg); fclose($log); }
Search モジュールから呼び出されます。'name' ではサーチ画面のに表示するサブメニューを、'search' ではサーチ結果を返します。
function test_search($op = 'search', $keys = NULL, $skip_access_check = FALSE) { switch ($op) { case 'name': return 'Test'; break; case 'search': $find = array(); $result = db_query("SELECT name FROM {users} WHERE name = '%s'", $keys); while ($data = db_fetch_object($result)) { $find[] = array( 'title' => $data->name, 'link' => $data->name, ); } return $find; break; } }
下記を記述しておくと、[コンテンツの作成] メニューの下に Test コンテンツの追加メニューが表示されます。
function test_node_info() { return array( 'test' => array( 'name' => 'Test', 'module' => 'test', 'description' => 'Test is my contents.', ), ); }
その他のフック関数については下記を参照してください。