MediaWiki Custom Skin: Проверьте, является ли текущая страница главной страницы
-
01-10-2019 - |
Вопрос
Я устанавливаю кучу разных языков Mediawiki's на одной кодовой базе. До сих пор большая часть этого работает, но я хочу использовать главную страницу, которая выглядит отличается от остальных страниц. Для этого я изначально только что добавил некоторые правила CSS, которые применяются только к классу Main_Page:
body .page-Main_Page { <rules> }
Проблема в том, что на других языках главная страница называется по-разному (и класс изменяется соответственно), поэтому я либо должен добавлять правила CSS для всех возможных главных названий (не произойдет), либо сделать проверку внутри кожи, которая добавляет Класс к телу, если текущая страница - главная страница.
К сожалению, нет способа проверить это. Большинство решений, которые я погрузившись, основаны на «главной странице» или устанавливая собственное название. Я хочу, чтобы кожа автоматически обнаружила название.
Единственное решение, которое я подумал до сих пор, - принять переменную MediaWiki для главного URL-адреса и сравнить его на текущее название страницы:
$mainurl = $this->data['nav_urls']['mainpage']['href'];
$ismain = $this->data['thispage'] == substr($mainurl,'6');
(['href'] начинается с / wiki /, следовательно, смещение 6)
и позже
<body class="<?php echo ($ismain ? 'mainpage' : ''); ?>">
(и некоторые больше классов, конечно, но вы поняли идею)
Но это дает мне еще одну проблему. На испанском языке страница называется Página Comment. Данные [«Methpage»] не имеют проблем с этим, но ['href'] сохраняется как / wiki / p% c3% a1gina_principal
Итак, кто-нибудь может ли кто-нибудь сказать мне, как 1. Нажать на перевод «Главная страница» на языке, который в настоящее время используется или 2. Конвертировать P% C3% A1Gina_Principal в Página Comment (и тому подобное для других языков) или 3 , Покажите мне еще один способ проверить, если я на главной странице?
Решение 2
Хаха, о боже, это было так просто.
$this->data['skin']->mTitle->mUrlform == $mainurl;
Хорошо, что еще раз доказывает, что выводит вашу проблему кому-то еще, иногда может дать вам просто понимание, которое вам нужно ..: P
Другие советы
На самом деле есть еще проще
if ($this->getSkin()->getTitle()->isMainPage())
Возвращает логию
К сожалению, это не работает для меня с MediaWiki 1.16.4. Я немного посмотрел в это, и это работает (для меня) при проверке
$this->data['skin']->mTitle->mUrlform == "Main_Page"
Проблема в том, что
$this->data['nav_urls']['mainpage']['href'] == "/en/Main_Page"
Таким образом, требуется еще немного мышления, чтобы добраться до более общего решения.
(Может быть, что обновление до более позднего MW сделает приведенную выше код работы.)