2010-08-28 8 views
1

Je suis en train de mettre en place un tas de mediawiki différents sur une base de code. Jusqu'à présent, la plupart fonctionnent, mais je veux utiliser une page principale qui semble différente du reste des pages. Pour ce faire, je l'origine juste ajouté quelques règles CSS qui n'appliqués à la classe main_page:Skin personnalisé par MediaWiki: vérifiez si la page en cours est la page principale

body .page-Main_Page { <rules> } 

Le problème est que dans d'autres langues, la page principale est appelée différemment (et les changements de classe en conséquence), donc je soit avoir ajouter des règles CSS pour tous les titres de pages principaux possibles (ne va pas arriver) ou faire une vérification dans l'habillage qui ajoute une classe au corps si la page en cours est la page principale.

Malheureusement, il n'y a aucun moyen de vérifier cela. La plupart des solutions que j'ai googlé sont basées sur 'Main Page' ou en définissant votre propre titre. Je veux que la peau détecte le titre automatiquement.

La seule solution est de pensée Ive jusqu'à prendre la variable mediawiki's pour la principale URL de la page et le comparer au titre de la page courante:

$mainurl = $this->data['nav_urls']['mainpage']['href']; 
$ismain = $this->data['thispage'] == substr($mainurl,'6'); 

(le [ « href »] commence par/wiki /, d'où le décalage de 6)

et plus tard

<body class="<?php echo ($ismain ? 'mainpage' : ''); ?>">  

(et quelques autres classes de cours, mais vous voyez l'idée)

Mais cela me pose un autre problème. En espagnol, la page s'appelle Página Principal. Les données ['thispage'] n'ont pas de problèmes avec ça, mais le '' href '' est enregistré sous/wiki/P% C3% A1gina_Principal

Alors ... quelqu'un peut-il me dire comment 1. recherche la traduction de 'Main Page' dans la langue qui est actuellement utilisée OU 2. convertir P% C3% A1gina_Principal en Página Principal (et similaires pour d'autres langues) OU 3. montrez-moi une autre façon de vérifier si je suis sur la page principale?

Répondre

4

Haha omg, c'était si simple.

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

bien qui prouve encore une fois que taper votre problème à quelqu'un d'autre peut parfois vous donner les informations dont vous aviez besoin ..: P

+0

booléenne Eh oui, je y a été. Souvent, après avoir posté une question, la réponse "apparaît".Bien, vous avez également posté la réponse, merci. (Ne pas oublier de l'accepter.) – Wikis

+0

merci pour le rappel: D –

0

Malheureusement, il ne fonctionne pas avec moi MediaWiki 1.16.4 . Je regardais dans un peu et il fonctionne (pour moi) lors de la vérification sur

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

Le problème est que

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

donc il faut un peu plus penser à se rendre à une solution plus générique.

(Peut-être que la mise à niveau à un MW plus tard fera le travail de code ci-dessus cependant.)

+0

Cela peut avoir à faire avec la façon dont vous installez votre wiki, je n'ai jamais rencontré une installation de mediawiki qui utilise la langue en tant que sous-dossier avant la page uri . Je pense que cela doit faire plus avec la version que vous utilisez. –

4

Il est en fait une manière encore plus simple:

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

Renvoie une

+0

Fonctionne très bien, merci! – Heihachi

+0

Cela devrait être la réponse acceptée, car cela fonctionnera indépendamment des structures url. Aussi, c'est ce que 'isMainPage()' est pour. – leo

Questions connexes