Mediawikiカスタムスキン:現在のページがメインページであるかどうかを確認します
-
01-10-2019 - |
質問
私は1つのコードベースにさまざまな言語Mediawikiをセットアップしています。これまでのところ、ほとんどが機能していますが、他のページとは異なるように見えるメインページを使用したいと思います。これを行うために、私はもともと、main_pageクラスにのみ適用されるいくつかのCSSルールを追加しました。
body .page-Main_Page { <rules> }
問題は、他の言語ではメインページが異なって呼ばれている(およびクラスがそれに応じて変更される)ため、可能なすべてのメインページタイトルにCSSルールを追加する必要があるか(発生しない)、またはを追加するスキンの内部でチェックする必要があることです。現在のページがメインページである場合、ボディへのクラス。
残念ながら、それをチェックする方法はありません。私がグーグルで検索したほとんどのソリューションは、「メインページ」または独自のタイトルの設定に基づいています。肌にタイトルを自動的に検出してもらいたいです。
私がこれまで考えていた唯一の解決策は、メインページURLのMediawikiの変数を取得し、現在のページのタイトルと比較することです。
$mainurl = $this->data['nav_urls']['mainpage']['href'];
$ismain = $this->data['thispage'] == substr($mainurl,'6');
(['href']は /wiki /で始まる、したがって6のオフセット)
以降
<body class="<?php echo ($ismain ? 'mainpage' : ''); ?>">
(そしてもちろんいくつかのクラスですが、あなたはアイデアを得ます)
しかし、これは私に別の問題を与えます。スペイン語では、このページはPáginaPrincipalと呼ばれます。データ['thispage']はそれに問題はありませんが、['href']は /wiki /p%c3%a1gina_principalとして保存されます
だから...誰でも私に方法を教えてもらえますか1.現在使用されている言語で「メインページ」の翻訳を検索するか、2をc3%c3%a1gina_principalをpáginaプリンシパル(および他の言語のようなもの)または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にアップグレードすると、上記のコードが機能する可能性があります。)