代码之家  ›  专栏  ›  技术社区  ›  Stephan Muller

Mediawiki自定义外观:检查当前页面是否为主页面

  •  2
  • Stephan Muller  · 技术社区  · 14 年前

    我正在一个代码库上设置一组不同语言的Mediawiki。到目前为止,大多数页面都正常工作,但是我想使用一个看起来与其他页面不同的主页。为此,我最初只是添加了一些仅应用于主页面类的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_主体

    所以…有人能告诉我怎么做吗 1。查找当前使用的语言中“主页”的翻译,或 2。将p%c3%aGina_Principal转换为p_Gina Principal(以及其他语言的类似内容)或 三。显示另一种检查我是否在主页上的方法?

    3 回复  |  直到 9 年前
        1
  •  5
  •   Mastergalen    11 年前

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

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

    返回布尔值

        2
  •  4
  •   Stephan Muller    14 年前

    哈哈,太简单了。

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

    这再一次证明,把你的问题打给别人有时能给你所需要的洞察力。P

        3
  •  0
  •   the    12 年前

    不幸的是,我无法使用Mediawiki 1.16.4。我仔细看了一下,检查时它(对我)起作用了。

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

    问题是

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

    所以需要更多的思考才能得到更通用的解决方案。

    (可能升级到较新的mw会使上述代码工作。)