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