【问题标题】:How to get the current Skin's file path in Mediawiki?如何在 Mediawiki 中获取当前皮肤的文件路径?
【发布时间】:2013-08-06 16:13:03
【问题描述】:

在 MediaWiki 皮肤定义中,被扩展的 BaseTemplate 有几个属性用于创建指向 wiki 中其他页面的链接,但我有一种情况,我需要皮肤目录的路径,以提取一些使用的图像创建用户界面。默认情况下,这只是/skins/mySkin/images/foo.png,但如果有人更改$wgStylePath 变量或重命名皮肤,那将是一个问题。是否存在构建了该 URL 的现有变量,隐藏在 BaseTemplate 方法的某处?

【问题讨论】:

    标签: mediawiki skins


    【解决方案1】:

    是的,SkinTemplate 类包含在执行模板之前设置模板变量的代码,它通过'stylepath' 模板变量提供对$wgStylePath 的访问。

    当您将 SkinTemplate 子类化以定义您的皮肤的主类时,您还需要覆盖 $stylename 成员变量,该变量指定您的皮肤自己的样式表和图像所在的子目录。 (这通常与您的小写皮肤名称相同,但它没有必须;例如,有两个相关的完全没问题皮肤使用来自同一目录的图像。)这也可以作为模板变量使用,令人惊讶地命名为'stylename'。因此,在模板中指定图像路径的一种方法是:

    <?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/images/foo.png
    

    另一种方式,(以前)使用例如通过Vector 皮肤,是使用来自Skin 类的getSkinStylePath() 方法(这是SkinTemplate 的超类;由于历史原因,它有点混乱和纠结,但基本上你可以将它们视为一个类分成两个文件)。

    更新: As of MediaWiki 1.36getSkinStylePath() 已被弃用。根据发行说明,推荐的替代方法是“用资源的直接路径替换用法。”

    要使用它,您将文件名作为参数传入,该方法会自动在其前面添加$wgStylePath$stylename(并附加$wgStyleVersion 作为查询字符串)。请注意,这不是模板方法,因此您必须自己转义并打印返回的 URL:

    <?php echo htmlspecialchars( $this->getSkin()->getSkinStylePath( 'images/foo.png' ) ) ?>
    

    还有一个 getCommonStylePath() 方法做同样的事情,只是它使用字符串 "common" 而不是 $stylename

    【讨论】:

    • @Wolf:我修复了链接;显然这些类被移动到一个子文件夹中。但是,在这样做的同时,我还注意到该答案中推荐的至少一种方法已被弃用。自从我 7 年前写了这个答案以来,我并没有真正跟上 MediaWiki 的发展,而且整个答案现在可能已经过时了。我会把它留在这里,以防其中一些仍然有用,但欢迎提供最新的答案。我已经在这个问题上悬赏,以防万一它可能会吸引到一个人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多