2013-08-06 118 views
2

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

回答

1

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

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

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

另一种方式,例如,皮肤,皮肤,将使用Skin类(这是SkinTemplate的超类;由于历史原因,这是一种凌乱和纠结的类型,但基本上你可以几乎把它们当作一个类拆分成两个文件)的getSkinStylePath()方法。

要使用它,你的文件作为参数的名称传递和方法自动会预先$wgStylePath$stylename它(并附加$wgStyleVersion作为查询字符串)。请注意,这是不是一个模板方法,所以你要逃跑,并打印自己返回的URL:

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

还有一个getCommonStylePath()方法,做同样的事情,不同的是它采用了串"common"代替$stylename

相关问题