MediaWiki自定义皮肤:检查当前页面是否为主页面

时间:2010-08-28 20:23:17

标签: php mediawiki mediawiki-extensions mediawiki-templates

我在一个代码库上设置了一堆不同的语言mediawiki。到目前为止大部分都在工作,但我想使用一个看起来与其他页面不同的主页面。为此,我最初添加了一些仅适用于main_page类的css规则:

body .page-Main_Page { <rules> }

问题在于,在其他语言中,主页面被不同地调用(并且类会相应地更改),因此我要么为所有可能的主页标题添加css规则(不会发生),要么在皮肤内部进行检查如果当前页面是主页面,则会向主体添加一个类。

不幸的是,没有办法检查。我用Google搜索的大多数解决方案都基于“主页”或设置自己的标题。我希望皮肤自动检测标题。

到目前为止我唯一想到的解决方案是将mediawiki的变量用于主页面url并将其与当前页面标题进行比较:

$mainurl = $this->data['nav_urls']['mainpage']['href'];
$ismain = $this->data['thispage'] == substr($mainurl,'6');

(['href']以/ wiki /开头,因此偏移为6)

以后

<body class="<?php echo ($ismain ? 'mainpage' : ''); ?>">    

(当然还有一些课程,但你明白了)

但这给了我另一个问题。在西班牙语中,该页面称为PáginaPrincipal。数据['thispage']没有问题,但['href']保存为/ wiki / P%C3%A1gina_Principal

所以...任何人都可以告诉我如何 1.用当前使用的语言OR查找“主页面”的翻译 2.将P%C3%A1gina_Principal转换为PáginaPrincipal(以及其他语言的类似物)OR 3.告诉我另一种检查我是否在主页上的方法?

3 个答案:

答案 0 :(得分:5)

实际上有一种更简单的方法:

if ($this->getSkin()->getTitle()->isMainPage())

返回布尔值

答案 1 :(得分:4)

哈哈,这很简单。

$this->data['skin']->mTitle->mUrlform == $mainurl;

再次证明,向其他人输入您的问题有时可以为您提供所需的洞察力......:P

答案 2 :(得分:0)

不幸的是,对于MediaWiki 1.16.4,它不起作用。我仔细研究了一下,在检查

时它(对我来说)有效
$this->data['skin']->mTitle->mUrlform == "Main_Page"

问题在于

$this->data['nav_urls']['mainpage']['href'] == "/en/Main_Page"

因此需要更多思考才能获得更通用的解决方案。

(可能升级到以后的MW会使上面的代码工作。)