Как получить путь к текущему файлу обложки в Mediawiki?
В определениях скинов MediaWiki BaseTemplate
Это расширяется, имеет несколько атрибутов для создания ссылок на другие страницы в вики, но у меня есть ситуация, когда мне нужен путь к каталогу скина, чтобы получить некоторые изображения, используемые для создания пользовательского интерфейса. По умолчанию это было бы просто /skins/mySkin/images/foo.png
по умолчанию, но если кто-то изменит $wgStylePath
переменная или переименовывает скин, это будет проблемой. Существует ли существующая переменная, которая имеет этот URL-адрес, скрытый где-то в BaseTemplate
методы?
2 ответа
Да, класс SkinTemplate, содержащий код для настройки переменных шаблона перед выполнением шаблона, предоставляет доступ к $wgStylePath
через 'stylepath'
переменная шаблона.
Когда вы создаете подкласс SkinTemplate для определения основного класса вашей обложки, вы также должны переопределить $stylename
переменная-член, которая указывает подкаталог, в котором находятся собственные таблицы стилей и изображения вашей обложки. (Обычно это будет то же самое, что и имя вашей обложки в нижнем регистре, но это не обязательно; очень хорошо иметь, скажем, две связанные обложки, используя изображения из одного каталога.) Это также доступно как переменная шаблона, с удивительным именем 'stylename'
, Поэтому один из способов указать путь к изображению в вашем шаблоне будет выглядеть примерно так:
<?php $this->text('stylepath') ?>/<?php $this->text('stylename') ?>/images/foo.png
Другой способ, используемый, например, скином Vector, заключается в использовании getSkinStylePath()
метод из класса Skin (который является суперклассом SkinTemplate; он немного запутан и запутан по историческим причинам, но в основном вы можете рассматривать их как один класс, разбитый на два файла).
Чтобы использовать его, вы передаете имя файла в качестве параметра, и метод автоматически добавляет $wgStylePath
а также $stylename
к нему (и добавляет $wgStyleVersion
как строка запроса). Обратите внимание, что это не шаблонный метод, поэтому вам нужно выйти и распечатать возвращенный URL-адрес самостоятельно:
<?php echo htmlspecialchars( $this->getSkin()->getSkinStylePath( 'images/foo.png' ) ) ?>
Там также есть getCommonStylePath()
метод, который делает то же самое, за исключением того, что он использует строку "common"
вместо $stylename
,
Видимо, это новый способ:
$this->getSkin()->getConfig()->get( 'StylePath' ) . '/SkinName/images/foo.png';