如何获得当前皮肤&x27;Mediawiki中的文件路径?

如何获得当前皮肤&x27;Mediawiki中的文件路径?,mediawiki,skins,Mediawiki,Skins,在MediaWiki皮肤定义中,扩展的BaseTemplate有几个属性用于创建指向wiki中其他页面的链接,但我遇到了一种情况,需要皮肤目录的路径,以获取用于创建UI的一些图像。默认情况下,这只是/skins/mySkin/images/foo.png,但是如果有人更改$wgStylePath变量,或者重命名皮肤,这将是一个问题。是否有一个现有的变量具有该URL构建,隐藏在BaseTemplate方法的某个地方?是的,该类包含在执行模板之前设置模板变量的代码,通过'stylepath'模板变量

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

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

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

//images/foo.png
另一种方法(以前)被皮肤使用,例如,使用类中的
getSkinStylePath()
方法(这是SkinTemplate的超类;由于历史原因,它有点混乱和混乱,但基本上你可以将它们视为一个类拆分为两个文件)

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

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

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


还有一个
getCommonStylePath()
方法,除了它使用字符串
“common”
而不是
$stylename

@Wolf:我修复了链接;显然,这些类被移动到了一个子文件夹中。然而,在这样做的同时,我也注意到,在这个答案中推荐的方法中,至少有一种已经被弃用了。自从7年前我写下这个答案以来,我一直没有真正跟上MediaWiki的发展,很可能这个答案现在已经过时了。我将把它留在这里,以防其中一些仍然有用,但欢迎提供最新的答案。我已经在这个问题上悬赏了,以防万一它会吸引人。