Manual:Hooks/ja



フックは特定のイベント（ページ保存やユーザログインなど）が発生したとき、カスタムコードの実行を認めます. たとえば下記のコードスニペットにより、フックの が走る場面で必ず関数 を呼び出し、PageContentSaveCompleteに特有の関数引数を渡します.

""

MediaWikiはこのようなフックを用意し、MediaWiki ソフトウェアの機能を拡張しています. 特定の関数（ユーザー処理つまりイベントハンドラー）をフックに定義すると、メインのMediaWikiコードにおいて適切なタイミングでその関数を呼び出し、その時点で開発者が有効と判断した追加のタスクをいくつでも実行します. フックに定義できるハンドラーは複数で、定義順に呼び出した定義が行った変更を、一連の後続の関数に渡していきます.

フックに機能を割り当てるにはLocalSettings.phpの末尾もしくはファイルスコープの拡張機能（$wgExtensionFunctions 関数あるいはParserFirstCallInit フックではなく）で割り当てます. 拡張機能の場合、LocalSettings.php の設定がフックの機能の挙動に条件を付けるなら、フックに機能を割り当て、条件が適合しないときは早めに関数を停止する必要があります.

ご利用の拡張機能で新しくフックを作成することもできます. 作成したフックは拡張機能フックのレジストリに追加します.

背景
フックはHooks::run関数を呼び出すと作動します（説明はファイルに、設定はGlobalFunctions.php}の説明のとおり）. Hooks::runの1番目の引数はフックの名前、2番目はそのフックの引数の配列です. $wgHooks配列で実行するイベントハンドラーを検出します. call_user_func_arrayというPHP関数を呼び出し、呼び出す関数とその引数を手がかりにします.

合わせて、.

この使用事例はWikiPage.phpの 関数で、Hooks::runはdoEditContentに呼び出されるとPageContentSaveCompleteフックを実行、引数として を当てます.

""

多数のフックを呼び出すのはコアですが、拡張機能からもフックを呼びだます.

イベントハンドラーを書く
イベントハンドラーはフックに設定する関数で、 フックが代表するイベントが発生するたびに実行されます. 構成要素は次のとおりです.


 * 関数と、設定で有効にするデータを添えたもの.
 * method変数と、設定で有効にするデータを添えたオブジェクト.

Register the event handler by adding it to the global  array for a given event. Hooks can be added from any point in the execution before the hook is called, but are most commonly added in LocalSettings.php, its included files, or, for extensions, in the file extension.json. All the following are valid ways to define a hook function for the event EventName that is passed two parameters, showing the code that will be executed when EventName happens:

拡張機能の場合、構文は ファイルと同様（前述の1番目と2番目の事例に対応）:

When an event occurs, the function (or object method) that you registered will be called the event's parameters along with any optional data you provided at registration. Note that when an object is the hook and you didn't specify a method, the method called is 'onEventName'. For other events this would be 'onArticleSave', 'onUserLogin', etc.

The optional data is useful if you want to use the same function or object for different purposes. For example:

This code would result in ircNotify being run twice when a page is saved: once for 'TimStarling', and once for 'brion'.

Event handlers can return one of three possible values:


 * no return value (or null): the hook handler has operated successfully. (Before MediaWiki 1.23, returning true was required.)
 * "some string": an error occurred; processing should stop and the error should be shown to the user
 * false: the hook handler has done all the work necessary, or replaced normal handling. This will prevent further handlers from being run, and in some cases tells the calling function to skip normal processing.

左記の結果は、フックがメインの機能を置き換えた事例で発生する可能性があります. それは特製のシステム（例=LDAPほかPHPプログラムなど）でユーザーを認証する場合は次の記述が使えます.

操作が完了した場合はfalseを返しても無意味であり、通常、callerに無視されます.

説明文書
MediaWiki コアのフックは現状ではここMediaWiki.orgのほか（ソースコード・リポジトリ内）の2箇所に説明文書を置くことになっています. 場合によってはどちらかで作業が未完了なことがあるため、フックの説明文書を確認するときは両方の場所を調べてください.

オンウィキでフックを開設するにはMediaWikiHookを使います.

利用できるフック
このページにはMediaWikiソフトウェアで使用可能で、バージョン1.8.2に整合するフックを一覧表にまとめてあります. 最近追加されたフックには詳細情報が不足したものが目立つのは、開発者が目的や使用方法の説明文書を提出していないためです. もし詳細がわかるものがありましたら、適する場所に追記をお願いします.

表の1列目はフックを導入したMediaWikiのバージョンを示します. 2列目のリンクから、フックの詳細情報や使い方を参照できます.

関数ごとに分類したフック
ここに一覧したフックの中には、関数ごとにいくつかのグループに分類できます.
 * 小分類: 記事の管理 - ページ編集 - ページ解析 - UI - 特別ページ - 利用者管理 - ログ - テンプレートの外装 - API - インポートとエクスポート - その他

バージョンごとに分類したフック
バージョン単位で分類したフックの一覧は、前出の表にまとめてあります. 表の列見出し「Version」にある黒い三角形の矢印を押すと、降順と昇順に並べ替えます.

関連項目

 * Category:Hook extensions
 * Manual:Tag extensions
 * Manual:Parser functions
 * Some Examples
 * Some Examples
 * Some Examples