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