Как получить путь к текущему файлу обложки в 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';

Источник: https://phabricator.wikimedia.org/T270754 .

Другие вопросы по тегам