2

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

4

1 回答 1

1

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

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

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

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

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

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

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

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

于 2013-08-09T07:43:40.093 回答