0

私はmediawikiでフックを使う方法を学んでいます。PHPも初めてです。次の行をLocalSettings.phpに追加することで、一般的なフックハンドラーを追加できます。

$wgHooks['event'][] = 'function';

ファイルに書き込んだと myfunctionmy.phpます。LocalSettings.phpからこの関数をポイントするにはどうすればよいですか?

編集。my.phpファイルにいくつかの関数を記述しました。この関数の参照方法は?この関数がどこにあるかをmediawikiに伝える必要があります。方法がわかりません。私は書くべきですか'$wgHooks['event'][] = 'my.php:function'。またはinclude、my.phpファイルをLocalSettingに送信してから、次のように記述します。'$wgHooks['event'][] = 'function'

4

4 に答える 4

3

ドキュメントにあるように、関数名の文字列(または文字列の配列など)をフック配列にプッシュする必要があります。

AFAIK、フックをトリガーすると、。で呼び出されcall_user_func()ます。したがって、my.phpファイルの関数宣言によって異なります。でmyfunction、それはする必要があります

$wgHooks['event'][] = 'myfunction';
于 2012-05-30T17:30:21.843 に答える
2

私がmediawikiのドキュメントから読んだものから、あなたは拡張機能を作成する必要があり、あなたの拡張機能にあなたのフックをインストールします。my.phpに次のように記述します。

 // $wgHooks is a global variable
 $wgHooks['event'][] = 'function';

拡張機能のドキュメントを正しく理解していることを願ってい ますhttp://www.mediawiki.org/wiki/Manual:Extensions

于 2012-05-30T17:16:03.717 に答える
0

何が必要か完全にはわかりませんが、ユーザー定義関数を呼び出したい場合は、関数の名前を引数として取るcall_user_funcを使用できます。関数を使用できるようにするには、ファイルを含める必要があります。

call_user_func('myfunction ', array());
于 2012-05-30T17:15:10.470 に答える
0

PHPのコールバックを介して関数を参照します。コールバックは次のいずれかです。

  1. 関数名:'myFunc'
  2. クラス名と関数名を含む配列:array('MyClass', 'myFunc')
  3. オブジェクトと関数名を含む配列:array($myObj, 'myFunc')
  4. 匿名関数(技術的にはClosureオブジェクト):(function($x, $y) { /* PHP code */ }これはPHP 5.3以降のみですが、MediaWikiの最近のバージョンも同様です)

を介してこれらのコールバックを呼び出すcall_user_func($callback, $arg1, $arg2)ことは、それぞれ次のようになります。

  1. myFunc($arg1, $arg2);
  2. MyClass::myFunc($arg1, $arg2);
  3. $myObj->myFunc($arg1, $arg2);
  4. 匿名関数の本体を実行し、$xand$y$arg1andに置き換えます$arg2

このコードが失敗した場合(たとえば、最初のバージョンを使用し、関数myFuncがロードされていない場合)、コールバックも失敗します。通常$wgAutoloadClasses介して行われるMediaWikiの2番目の形式で自動読み込みを使用できます。

// in MyExtension.php
$wgHooks['event'][] = array('MyExtension', 'myEventHandler');
$wgAutoloadClasses['MyExtension'] = dirname(__FILE__) . 'MyExtension.body.php';

// in MyExtension.body.php
class MyExtension {
    public function myEventHandler($p1, $p2) {
        // do stuff
    }
}

そうすれば、から(MyExtension.php構成設定のみを含む小さなファイル)をロードできLocalSettings.phpMyExtension.body.php(すべてのコードを含む)は、実際に拡張機能を使用するリクエストでのみロードされます。

于 2012-05-31T08:08:44.807 に答える