2016-06-22 3 views
0

提供された検索キーワードに基づいて、内部メディアウィキDBの結果と外部SQLデータベースの結果の両方を表示するプラグインを作成しようとしています。Mediawiki検索外部データベース - prependフック

私はすべての検索コードを書いていますが、私は結果を実際に表示するのに苦労しています。私はSpecial:Versionをチェックして拡張機能が表示されます。私はこのフックを試してみました

$wgHooks[ 'SpecialSearchResultsPrepend'][] = 'onSpecialSearchResultsPrepend'; 

私の関数は

function onSpecialSearchResultsPrepend($t, $out, $term){ 
    some routine 
} 

で、まだ私が正しく、このフックに何も表示することができません。さらに、デバッグコンソールに書き込んだり、生のデバッグテキストを出力しようとすると、私のエクステンションから何も出力されません。

mediawikiのドキュメントでは、一般的な検索出力を無効にするためにfalseを返すように指定されています。私はこれを試して、実際に正しくフックされていることを確認し、フックからfalseを返しても検索結果は無効にならない。したがって、私はフックに間違った方法を使用していると私は信じています。

この機能には適切な方法はありますか?私は別々のファイル、グローバル関数を試したり、クラス内で宣言しました。私の問題を解決するようなことはありませんでした。今、私は、メインの拡張ファイル、つまり 'externalsqlsearch.php'からfalseを返そうとしています。

+1

Basicの例: $ wgHooks [「SpecialSearchResultsPrepend '] [] = function($ specialSearch、OutputPage $ out){ \t $ out-> addWikiText(' MaxSemはここでした! '); \t falseを返します。 }; 正しく登録していて、echo()ではなく出力として$ outを使用していますか? – MaxSem

+0

ありがとうございました。簡単な例が働いた。しかし、私が最終的に必要とするのは、このフックコールを拡張ファイル自体に移動することです。何らかの理由で、私がそれを行うたびに、拡張機能がロードされますが、フックは登録されません。私は$ wgSpecialVersionShowHooksを見つけてそれをtrueに設定しました。だから、私のフックが登録されているかどうかを少なくとも見ることができます。 –

+0

それは働いた。 extensions.jsonでフックを登録する必要があります。私の答えを見てください。 –

答えて

0

Mediawiki 1.26.2のための私の実用的な解決策です - ドキュメントでこれを見つけることができませんでしたが、私は他の拡張機能を読んでからそれを収集することができました。

フックを登録するには、フックセクションのextensions.jsonファイルでそのフックを宣言する必要があります。私にとって、これは

"AutoloadClasses": { 
    "ExternalSQLSearchHooks": "ExternalSQLSearch.hooks.php" 
}, 

"Hooks": { 
     "SpecialSearchResultsPrepend": [ 
      "ExternalSQLSearchHooks::onSpecialSearchResultsPrepend" 
     ] 
}, 

ようにとExternalSQLSearch.hooks.php、必要最小限の例で見て:LocalSettings.phpで置けば私の作品

class ExternalSQLSearchHooks { 

    public static function onSpecialSearchResultsPrepend($t, $out, $term){ 
     $out->addWikiText('Testing'); 
     return true; 
    } 

} 
関連する問題