2012-02-15 5 views
3

MediaWikiにはタイトルを使ってページにリダイレクトするAPIはありますか?MediaWikiのwikiページにリダイレクト

私は、ページにリダイレクトするMediaWiki拡張機能を用意しています。それを行う方法を教えてもらえますか?

答えて

6

のMediaWikiからHTTP redirectを発行する推奨方法は、(いずれかのインスタンスあなたが渡された、またはグローバルインスタンス$wgOutのいずれか)OutputPageインスタンス上redirect()メソッドを呼び出すことです。このメソッドは、パラメータとしてURLとオプションでHTTPステータスコード(デフォルトは302)を取ります。

(また、単に直接PHP header()関数を呼び出しますが、OutputPageメソッドを使用した場合も、特殊なHTTPヘッダーを設定することもでき、他のコードに干渉しにくくなる可能性があります。)

は何を持っていることである場合Titleオブジェクトの場合は、getFullURL()を呼び出して対応するURLを取得できます。あなただけのページの名前を持っている場合は、Title::newFromText()に渡し(または適切なタイトルクラス内の他のstaticファクトリメソッドの1つ)このようなことのためにタイトルオブジェクトを取得するには、:

$title = Title::newFromText($pageName); 

if ($title) { 
    global $wgOut; 
    $wgOut->redirect($title->getFullURL()); 
} 
else { 
    // we've got a bogus page name, deal with it somehow 
} 

redirect()を呼び出すとになりません。は要求を中止するか、すぐに応答コードを送信します。— output()メソッドが呼び出されたときに、OutputPageに適切なHTTPヘッダーが送信されるようにする内部フラグを設定します。あなたの拡張でどのフックを使用しているかによって、戻り値(および/または任意のフック固有のフラグ)を設定して、ページの実際のコンテンツをレンダリングする必要がないことをMediaWikiに伝えることができます。


ps。上記の例では、廃止予定の$wgOutグローバル変数を使用してOutputPageインスタンスを取得していますが、現代のMediaWikiコードでは、現在のRequestContextから取得する必要があります。多くのMediaWikiクラスは、SpecialPage、Skin、Title、WebRequest、そしてOutputPage自体を含むIContextSourceインターフェイスを実装しているので、それらのいずれかからRequestContextを取得できます。 (すでにがOutputPageオブジェクトを持っている場合はもちろん、あなただけそれを直接使用する必要があります。)

-2

を限り、あなたは残していないとしてあなたのwikiは、このページの

#REDIRECT [[foo]] 

、代わりを使用して、ページfooが表示されます。

関連する問題