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