Перенаправление на вики-страницу в MediaWiki - PullRequest
3 голосов
/ 15 февраля 2012

Есть ли у MediaWiki какой-либо API для перенаправления на страницу, используя ее заголовок?

Я пишу расширение MediaWiki, которое перенаправляет на страницу, если она доступна. Может кто-нибудь сказать мне, как это сделать?

Ответы [ 2 ]

6 голосов
/ 18 февраля 2012

Рекомендуемый способ выдачи HTTP-перенаправления из MediaWiki - это вызов метода redirect() для экземпляра OutputPage (независимо от того, какой экземпляр вы передали, или глобального экземпляра $wgOut). Этот метод принимает в качестве параметров URL-адрес и, необязательно, код состояния HTTP (по умолчанию 302 ).

(Вы также можете просто вызвать функцию PHP header() напрямую, но использование метода OutputPage с меньшей вероятностью будет мешать другому коду, который также может захотеть установить специальные заголовки HTTP.)

Если у вас есть объект Title , вы можете получить соответствующий URL, вызвав getFullURL(). Если у вас просто есть имя страницы, передайте его Title::newFromText() (или, при необходимости, одному из других статических методов фабрики в классе Title), чтобы получить для него объект Title, например:

$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() не прерывается запрос или даже сразу отправляется код ответа & mdash; он просто устанавливает внутренний флаг, который заставляет OutputPage выдавать соответствующие заголовки HTTP, когда вызывается метод output(). В зависимости от того, какие именно хуки вы используете в своем расширении, вы можете установить их возвращаемое значение (и / или любые специфичные для хука флаги), чтобы сообщить MediaWiki, что нет необходимости отображать какой-либо фактический контент для страницы.


Ps. Хотя в приведенном выше примере устаревшая глобальная переменная $wgOut используется для получения экземпляра OutputPage, в современном коде MediaWiki его следует получить из текущего RequestContext . Многие классы MediaWiki реализуют интерфейс IContextSource, включая SpecialPage, Skin, Title, WebRequest, а также сам OutputPage, так что вы можете получить RequestContext из любого из них. (Конечно, если у вас уже есть объект OutputPage, вы должны просто использовать его напрямую.)

0 голосов
/ 26 декабря 2013

до тех пор, пока вы не покинете свою вики-страницу

#REDIRECT [[foo]]

и вместо этой страницы появится страница foo.

...