如何在Mediawiki中获取当前Skin的文件路径?

时间:2013-08-06 16:13:04

标签: mediawiki skins

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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

除了使用字符串getCommonStylePath()代替"common"之外,还有$stylename方法完全相同的事情。