如何在MediaWiki中获取当前页面的URL

4

我想获取当前页面的URL并将其存储到我的自定义皮肤模板中的变量中。我这样做是为了可以在其他地方使用这个URL。我尝试像这样做:

function currentpageurl() //Some Custom function
{
    $url= [something that can get current page's url in mediawiki and store it to this variable]
    .....use the $url variable for other purposes....
    ......
    .....
}

Mediawiki有一种方式可以识别当前页面的URL吗?还是说我唯一的选择是使用这种方法来找到当前页面?
$url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
2个回答

5
如果您正在为皮肤编写QuickTemplate子类,您可以使用$this->getSkin()->getTitle()获取当前页面的Title对象。
一旦您拥有了Title对象,就可以调用它的getLinkURL()方法来获取页面的URL。(您可能不想使用Ilya建议的getPrefixedURL(),因为它只会给您提供一个对页面名称进行URL编码的版本。)或者,如果您想生成一个标准的维基链接样式链接而不必自己处理URL,则可以将Title对象传递给Linker::link()
事实上,$this-getSkin()是访问"请求全局"MediaWiki对象(如当前标题,WebRequestUserLanguageOutputPage等)的一般方式,从一个皮肤模板中。具体来说,Skin类实现了IContextSource接口,该接口提供对所有这些对象的访问。

嗨,Ilmari,太棒了!它起作用了!由于我的皮肤是基于Vector的,我使用$this->getSkin()->getTitle();在BaseTemplate中获取标题,然后使用getLinkURL()获取该页面的URL。非常感谢你.... - Neel

2

由于您已知道当前页面名称 ($name),因此您可以使用MediaWiki标题(请参见http://www.mediawiki.org/wiki/Manual:Title.php)。我理解,它应该是这样的:

$title = Title::newFromText($name);
$url = $title->getPrefixedUrl();

在我的情况下,我不知道当前页面的名称。它可能是用户正在访问的任何页面。因此,我想找到用户所在页面的页面URL。 - Neel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接