【问题标题】:Redirect to a wiki page in MediaWiki重定向到 MediaWiki 中的 wiki 页面
【发布时间】:2012-02-15 14:52:43
【问题描述】:

MediaWiki 是否有任何 API 可以使用其标题重定向到页面?

我正在编写一个 MediaWiki 扩展,如果它可用,它会重定向到一个页面。谁能告诉我怎么做?

【问题讨论】:

    标签: mediawiki


    【解决方案1】:

    从 MediaWiki 发出 HTTP redirect 的推荐方法是在 OutputPage 实例上调用 redirect() 方法(无论是您传递的任何实例,还是全局实例 $wgOut)。此方法将 URL 和可选的 HTTP 状态代码(默认为 302)作为参数。

    (您也可以直接调用 PHP header() 函数,但使用 OutputPage 方法不太可能干扰其他可能也想设置特殊 HTTP 标头的代码。)

    如果你有一个Title对象,你可以通过调用getFullURL()得到对应的URL。如果您只有页面的名称,请将其传递给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() 不会 中止请求,甚至立即发送响应代码——它只是设置一个内部标志,使 OutputPage 在output() 时发出适当的 HTTP 标头方法被调用。根据您在扩展程序中使用的确切钩子,您可能需要设置它们的返回值(和/或任何特定于钩子的标志)以告诉 MediaWiki 不需要为页面呈现任何实际内容。


    附言。虽然上面的示例使用已弃用的 $wgOut 全局变量来获取 OutputPage 实例,但在现代 MediaWiki 代码中,您应该从当前的 RequestContext 获取它。许多 MediaWiki 类实现了 IContextSource 接口,包括 SpecialPage、Skin、Title、WebRequest 以及 OutputPage 本身,因此您可以从其中任何一个中获取 RequestContext。 (当然,如果你已经一个 OutputPage 对象,你应该直接使用它。)

    【讨论】:

      【解决方案2】:

      只要你不离开你的维基使用

      #REDIRECT [[foo]]
      

      显示 foo 页面而不是这个页面。

      【讨论】:

        猜你喜欢
        • 2015-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-01
        • 2014-11-01
        • 1970-01-01
        • 2013-03-30
        • 1970-01-01
        相关资源
        最近更新 更多