2

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

body .page-Main_Page { <rules> }

问题是在其他语言中,主页的调用方式不同(并且类会相应更改),因此我要么必须为所有可能的主页标题添加 css 规则(不会发生),要么在皮肤内部进行检查以添加如果当前页面是主页面,则归类到正文。

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

到目前为止,我想到的唯一解决方案是将 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ágina Principal。数据['thispage'] 没有问题,但 ['href'] 保存为 /wiki/P%C3%A1gina_Principal

所以......谁能告诉我如何 1. 以当前使用的语言查找“主页”的翻译或 2. 将 P%C3%A1gina_Principal 转换为 Página Principal(以及其他语言的类似语言)或 3 . 告诉我另一种方法来检查我是否在主页上?

4

3 回答 3

5

其实还有更简单的方法:

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

返回一个布尔值

于 2013-01-12T13:38:28.477 回答
4

哈哈,天哪,原来如此简单。

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

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

于 2010-08-28T20:29:02.607 回答
0

不幸的是,它不适用于 MediaWiki 1.16.4。我稍微研究了一下,它在检查时(对我来说)有效

$this->data['skin']->mTitle->mUrlform == "Main_Page"

问题是

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

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

(可能是升级到更高版本的 MW 将使上述代码正常工作。)

于 2012-03-31T08:41:38.743 回答