2012-02-15 5 views
3

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

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

ответ

6

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

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

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


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

-2

до тех пор, пока вы не оставляете вики использовать

#REDIRECT [[foo]] 

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

Смежные вопросы