2013-08-06 4 views
2

В определениях кожи MediaWiki у расширенного расширения BaseTemplate есть несколько атрибутов для создания ссылок на другие страницы в вики, но у меня есть ситуация, когда мне нужен путь к каталогу скина, чтобы вытащить некоторые изображения, используемые для создания UI. По умолчанию это будет только /skins/mySkin/images/foo.png, но если кто-то изменяет переменную $wgStylePath или переименовывает скин, это будет проблемой. Существует ли существующая переменная, которая имеет этот URL-адрес, скрытый где-то в методах BaseTemplate?Как получить текущий путь к файлу Skin в Mediawiki?

ответ

1

Да, класс 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.

 Смежные вопросы

  • Нет связанных вопросов^_^