Пользовательский скин MediaWiki: проверьте, является ли текущая страница главной страницей

Я настраиваю кучу медиавики на разных языках на одной кодовой базе. Пока большая часть работает, но я хочу использовать главную страницу, которая выглядит иначе, чем остальные страницы. Для этого я изначально просто добавил несколько правил css, которые применялись только к классу main_page:

body .page-Main_Page { <rules> }

Проблема в том, что в других языках главная страница называется по-другому (и соответственно меняется класс), поэтому мне либо нужно добавить правила css для всех возможных заголовков главной страницы (этого не произойдет), либо сделать проверку внутри скина, которая добавляет класс в тело, если текущая страница является главной страницей.

К сожалению, нет возможности это проверить. Большинство решений, которые я искал в Google, основаны либо на «Главной странице», либо на установке собственного заголовка. Я хочу, чтобы скин автоматически определял название.

Единственное решение, о котором я подумал до сих пор, это взять переменную 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 Principal. У data['thispage'] нет проблем с этим, но ['href'] сохраняется как /wiki/P%C3%A1gina_Principal

Итак ... может ли кто-нибудь сказать мне, как 1. найти перевод «Главной страницы» на языке, который используется в настоящее время ИЛИ 2. преобразовать P% C3% A1gina_Principal в Página Principal (и т.п. для других языков) ИЛИ 3 .покажите мне другой способ проверить, нахожусь ли я на главной странице?


person Stephan Muller    schedule 28.08.2010    source источник


Ответы (3)


На самом деле есть еще более простой способ:

if ($this->getSkin()->getTitle()->isMainPage())

Возвращает логическое значение

person Mastergalen    schedule 12.01.2013
comment
Это должен быть принятый ответ, так как он будет работать независимо от структуры URL. Кроме того, для этого предназначен isMainPage(). - person leo; 03.10.2014

Ха-ха омг, это было так просто.

$this->data['skin']->mTitle->mUrlform == $mainurl;

Что ж, это еще раз доказывает, что изложение вашей проблемы кому-то другому иногда может дать вам именно то, что вам нужно.. :P

person Stephan Muller    schedule 28.08.2010
comment
да, я был там. Часто после того, как я публикую вопрос, сразу же появляется ответ. Отлично, что вы тоже опубликовали ответ, спасибо. (Не забудьте принять его.) - person Reinstate Monica - Goodbye SE; 30.08.2010

К сожалению, у меня не работает MediaWiki 1.16.4. Я немного изучил это, и это работает (для меня) при проверке

$this->data['skin']->mTitle->mUrlform == "Main_Page"

Проблема в том, что

$this->data['nav_urls']['mainpage']['href'] == "/en/Main_Page"

поэтому требуется больше размышлений, чтобы найти более общее решение.

(Возможно, обновление до более поздней версии MW заставит приведенный выше код работать.)

person kqw    schedule 31.03.2012
comment
Это может быть связано с тем, как вы настраиваете свою вики, я никогда не сталкивался с установкой медиавики, которая использует язык как подпапку перед uri страницы. Я думаю, что это связано с этим больше, чем с фактической версией, которую вы используете. - person Stephan Muller; 02.04.2012