Manual:Special pages/fr

Les pages spéciales sont des pages créées par le logiciel en vue de réaliser une fonction spécifique. Par exemple, une page spéciale présente toutes les pages qui ont un ou plusieurs liens avec un site internet ; une autre crée un rapport de situation. Les pages spéciales sont stockées dans leur propre espace de nom (Special:) et ne sont pas directement visualisables comme les autres pages. Les développeurs peuvent créer de nouvelles pages spéciales. Ces pages peuvent être rendues accessibles aux utilisateurs et seront généralement présentées dans la liste des pages spéciales Quelques pages spéciales sont accessibles uniquement par les utilisateurs possédant les privilèges d'accès requis. Enfin, d'autres pages spéciales ne sont pas présentées dans la liste des pages spéciales car elles sont uniquement utilisées en interne par le logiciel.

Informations générales
Toutes les pages spéciales fournies par défaut avec MediaWiki sont appelées  et sont situées dans le répertoire. Les pages spéciales du coeur doivent être enregistrées dans la liste système située dans  pour être chargées par MediaWiki. Les pages spéciales créées par des développeurs tiers sont généralement enregistrées dans le répertoire  dans leur propre fichier ou comme partie d'une extension plus grande. Toutes les pages spéciales héritent d'une classe appelée définie dans. Quand une nouvelle page spéciale est créée, les droits utilisateur nécessaires pour accéder à la page peuvent être définis. Ces droits spécifient, entre autres choses, si la page doit être affichée sur Special:SpecialPages et si la page peut être incluse dans d'autres pages.

Les pages spéciales ont aussi des noms uniques qui peuvent être adaptés sur un wiki. La forme générale est « Special:Pagename » où à la fois « Special » et « Pagename » sont adaptables. Le pseudo de Special peut être traduit en d'autres langues. Cet espace de noms traduit peut être produit avec le texte wiki    , sur ce wiki donnant ainsi «      ». Le nom de la page spéciale peut aussi être redéfini dans un message système, pour la langue du site, avec le nom générique de la page spéciale pour identifiant (ID).

Une page spéciale peut ou non accepter des entrées. Par exemple, Special:Export permet à un utilisateur de définir une page spécifique à exporter en appelant Special:Export/Sun. Si la page spéciale permet des entrées complexes, les paramètres additionnels seront envoyés au composant de la chaîne de requête de l'URL pour traitement, par exemple : http://www.mediawiki.org/w/index.php?title=Special:Recentchanges&days=3&limit=250.

Modèle de page spéciale de base
La plupart des pages spéciales d'extensions ont besoin de trois fichiers :
 * un petit fichier de configuration, qui se recharge à chaque foois que MediaWiki démarre.
 * un fichier avec le gros du code.
 * un fichier de messages traduits dans la langue locale.

Les conventions de codage dans MediaWiki définissent ces trois fichiers ainsi :


 * - Le fichier de configuration.
 * - Le code de page spécial.
 * - La.

Placez tous les fichiers dans un nouveau répertoire à l'intérieur du répertoire  dans votre MediaWiki.

Il faut nommer le fichier de la page spéciale comme l'extension. Par exemple, l'extension Gadgets contient le fichier. Si votre extension utilise plus d'une page spéciale, vous aurez besoin de noms supplémentaires.

Dans l'exemple ci-dessous, le nom de la page spéciale est MyExtension.

Après avoir créé les fichiers listés ci-dessous, si on ajoute les lignes suivantes à LocalSettings.php, on active l'extension :

Fichier de configuration
Exemple de fichier de configuration pour :

Ce fichier enregistre plusieurs éléments importants et obligatoires :


 * Emplacement de la classe MediaWiki\Extension\MyExtension\Special ;
 * Emplacement des fichiers de localisation ;
 * La nouvelle page spéciale et son nom de classe.

Le fichier de page spéciale
Le fichier corps doit contenir une sous-classe de   ou l'une de ses sous-classes. Ce fichier se charge automatiquement lorsque quelqu'un demande la page spéciale. L'exemple ci-dessous implémente la sous-classe SpecialMyExtension.

Il faut disposer du constructeur de  car son premier paramètre est le nom de votre page spéciale.

est la fonction principale appelée quand une page spéciale est accédée. Cette fonction supplante la fonction. Il passe le paramètre unique, qui est le composant sous-page du titre actuel. Par exemple, si on choisit de suivre un lien vers Special:MyExtension/blah,  va contenir « blah ».

Vous devez exécuter la génération du Wikitext et du HTML via. N'utilisez pas 'print' ni 'echo' directement lorsque vous travaillez avec les interfaces utilisateur du wiki.

Néanmoins, si vous utilisez votre page spéciale comme point d'accès pour personnaliser la sortie XML ou binaire, voyez.

Le fichier de localisation

 * Voir pour connaître la manière de les traduire.

Toutes les pages spéciales ont un titre, comme.


 * Le titre est utilisé dans les éléments  et   de la page de l'extension et sur Special:SpecialPages.
 * Cela peut être ce que vous voulez, mais il doit décrire la page spéciale et l'extension.
 * Il est spécifié par un message. La structure du message est une paire clé-valeur. La clé, doit être entièrement en minuscules.

Exemple de ficher de localisation en  :

Dans, la documentation du message :

Notez que les IDs ne doivent pas commencer par une lettre majuscule, et qu'un espace dans l'ID doit être remplacé par un caractère souligné '_' dans le code.

Le message -summary est optionnel. La création se fait automatiquement via la classe parent et s'affiche en haut de la page spéciale, habituellement avec une description concise de ce que l'utilisateur peut en faire. Si vous ne définissez pas son contenu, il ne sera utilisé que lorsque les administrateurs wiki vont le personnaliser sur le wiki.

Le fichier d'alias
Vous pouvez aussi internationaliser le nom de la page spéciale en créant pour elle des alias. L'exemple ci-dessous utilise le fichier « i18n/MyExtension.i18n.alias.php ». Dans cet exemple, le page spéciale  enregistre un alias de sorte que la page devient accessible par   et   en allemand.

Ajoutez votre fichier d'alias à  :

Ajoutez les alias des pages spéciales à  :

Encore une fois, vous devez écrire une espace dans l'ID et un caractère souligné '_' dans le code.

Pour l'entête de la page et les liens, les règles habituelles concernant les noms de pages s'appliquent.

Si  est à true, une lettre minuscule est convertie en majuscule, et un caractère souligné est affiché à la place de l'espace.

Par exemple, à la place de ce qui est ci-dessus, vous pouvez utiliser, en supposant que l'extension a bien été identifiée ailleurs comme.

Notez que dans le cas d'un tableau associatif en anglais, la chaîne qui identifie la page spéciale ( dans l'exemple) est aussi un titre valide.

Notez également que le premier élément de  doit être le même que la clé ! Sinon Special:Specialpages ne listera pas la page.

Groupe des pages spéciales
Vous pouvez initialiser le groupe sous lequel votre page spéciale apparaîtra sur Special:SpecialPages, en modifiant  dans votre sous-classe.

, qui traduit en anglais 'Rapports de media et téléversements'; *     * @return string */   function getGroupName { return 'media'; }

Quelques valeurs communes sont 'login', 'maintenance', 'media', 'other', 'pagetools', 'redirects', 'users'. Vous pouvez voir les valeurs acceptées sur Special:AllMessages (cherchez specialpages-group) ou cherchez sur le wiki en utilisant le pseudo langage 'qqx' en allant à Special:SpecialPages?uselang=qqx ) et en regardant les titres. Spécifiez le mot 'media' pour utiliser le message d'interface 'specialpages-group-media'.

Si votre page spéciale ne correspond à aucun des titres préconfigurés, vous pouvez ajouter un nouveau titre en le mettant dans votre fichier de localisation, voir Le fichier de localisation).

Les groupes de pages standards venant avec MediaWiki sont listés dans le fichier de localisation. Par exemple, les messages anglais sont en  et commencent avec. Si vous voulez catégoriser votre page spéciale sous, alors le message est. La valeur de cette clé est le texte qui apparaît comme le nom de cette catégorie, par exemple,.

Si votre page spéciale semble ne rentrer dans aucune des catégories existantes, vous pouvez toujours en créer une nouvelle. Dans le fichier de localisation de votre extension insérez simplement une nouvelle clé pour le tableau. Dans cet exemple, nous définissons le groupe  :

Maintenant, en supposant que vous initialisiez la valeur de retour pour la méthode  à   dans la définition de votre classe, rechargez Special:SpecialPages pour voir votre nouvelle catégorie.

Constructeur
Vous pouvez surcharger le constructeur pour initialiser vos propres données, mais la raison principale de faire cela est parce que vous voulez modifier le comportement de la classe SpecialPage elle-même. Lorsque vous appelez le constructeur de la classe de base à partir de votre classe enfant, les paramètres suivants sont disponibles :


 * string  Nom de la page spéciale, tel qu'il apparait dans les liens et les URLs
 * string  Droit utilisateur nécessaire, par exemple « block » ou « delete » ; voir aussi Restreindre l'accès à la page
 * boolean  Si la page doit apparaître dans Special:Specialpages

Ceci initialise l'objet OutputPage  avec le nom et la description de votre page spéciale. Doit toujours être appelé à partir de votre méthode execute.

Cette méthode rend un objet OutputPage qui peut être accédé comme indiqué ci-dessous. Comme dans le code d'exemple, utilisez

au lieu de la variable globale obsolète

Cette méthode retourne un objet WebRequest qui peut être accédé comme décrit ci-dessous. Comme dans le code d'exemple, utilisez

au lieu de la variable globale obsolète

Certaines pages spéciales peuvent être incluses à partir d'autres pages. Par exemple, si vous ajoutez au texte wiki d'une page, vous allez insérer une liste des modifications récentes à l'intérieur du contenu existant de la page.

Il est possible d'inclure une page spéciale d'une autre page web, à condition de la déclarer dans le constructeur comme pouvant être incluse. Vous pouvez faire cela en ajoutant ce qui suit dans la méthode  après l'initialisation de la classe parent :

Vous pouvez aussi définir votre classe de page spéciale comme une extension de la classe IncludableSpecialPage.

La fonction SpecialPage->including retourne une valeur booléenne qui vous renseigne sur le contexte à partir duquel la page spéciale va être appelée : false, si c'est une page web séparée, et true si elle va être incluse à partir d'une autre page web. Habituellement, vous voudrez peut-être alléger quelque peu la présentation si la page doit être incluse.

Ceci est la fonction que votre classe fille doit surcharger. Elle passe un paramètre unique, habituellement référencé de manière codée comme  (raccourci pour $parameter, parce qu'il est le paramètre que les utilisateurs peuvent remplir pour votre page spéciale). Ce paramètre est le composant sous-page du titre actuel. Par exemple, si quelqu'un suit un lien vers Special:MyExtension/blah,  va contenir « blah ».

Page d'aide
Il est utile de mettre les pages d'aide sur MediaWiki.org, c'est là qu'elles pourront être traduites. Pour être sûr que les utilisateurs trouveront vos pages d'aide, il est conseillé et très simple que votre page spéciale pointe vers la page d'aide en question :

OutputPage.php
OutputPage.php contient la définition de classe pour les objets de type. Vous pouvez obtenir un objet de cette classe de votre page spéciale en utilisant :

Le nom de variable $output est, bien sûr arbitraire. Peu importe la manière dont vous l'appelez, il s'agit de la variable que vous utiliserez le plus parce que c'est la manière d'envoyer les sorties vers le navigateur (non, on n'utilise pas  ni  ). Si vous voulez l'utiliser ailleurs, déclarez la comme globale :

Si vous le désirez, vous pouvez créer plusieurs objets OutputPage dans différentes méthodes de votre extension SpecialPage. Ils s'ajouteront à la sortie dans l'ordre où ils sont exécutés.

Vous pouvez voir la classe OutputPage en affichant  (bien sûr, toutes les classes sont visualisables), mais il existe quelques méthodes que vous devez absolument connaître.

C'est essentiellement un substitut rapide et sale de. Il prend vos entrées et les ajoute dans le buffer: sans poser de question. Dans l'action ci-dessous, si  contient des données utilisateur, elle peut facilement contenir du XSS, du matériel diabolique, ou un rejeton de Satan à l'intérieur. Vous feriez mieux d'utiliser un échappement (comme avec la fonction php htmlentities) ou la classe de générateurs XML pour générer une sortie sécurisée.

pour la plupart des sorties, vous devriez utiliser cette fonction. C'est un peu une fonction de magie noire : on entre du texte wiki, HTML apparaît, et tout un code mystérieux et des invocations de démons se produisent entre les deux.

Il est à noter que l’analyseur syntaxique considère vos morceaux comme des ensembles cohérents et les paragraphes aussi. C'est à dire que ...

va générer trois listes avec chacune un élément qui probablement n'a pas été attendu.

Notez néanmoins que, si vous voulez simplement insérer un message système et que vous l'avez traité comme du texte wiki analysé, vous pouvez utiliser du code comme. Ceci ne présentera pas le problème des appels imbriqués à l'analyseur mentionnés ci-dessus.

contournement numéro 1
Important: ces contournements de travail ne sont nécessaires que si vous faites un page spéciale qui peut être transclue. Les pages spéciales 'normales' n'ont pas besoin de cela.

Comme contournement, vous pouvez faire en sorte que votre extension convertisse le texte wiki en HTML en utilisant un objet Parser séparé et ensuite utilise .. Exemple :

contournement numéro 2
J'ai essayé ce que est dit plus haut, et j'ai vu que le même problème maintenant s'applique à n'importe quel des s du texte transclus. Ceci n'est pas un problème pour beaucoup d'extensions, mais l'extension que j'étais en train d'écrire devait montrer le texte wiki d'une autre page comme partie de ses fonctionalités, et donc c'était un problème.

Le processus pour analyser syntaxiquement une page qui transclue une page spéciale semble être le suivant :
 * 1) Remplacez  par une marque UNIQ-QINU (parce que la sortie de SpecialPage est supposé être complètement du HTML)
 * 2) Remplacez tout les s par des marqueurs QINU comme ci-dessus
 * 3) Conversissez tout le reste du texte wiki en HTML
 * 4) Remplacez tous les marqueurs QINU par leurs valeurs respectives enregistrées, dans une passe unique

Le processus pour analyser syntaxiquement une page qui transclue une page non spéciale semble être apparemment le suivant :
 * 1) Remplacez  ou  par le contenu de la page transclue (parce que les pages transclues contiennent du texte wiki non converti)
 * 2) Remplacez tous les s par des marqueurs QINU comme ci-dessus
 * 3) Convertissez tout autre texte wiki en HTML
 * 4) Remplacez tous les marqueurs QINU par leur valeur enregistrée respective, dans une seule passe

Le problème est apparemment celui du premier cas; la conversion du texte wiki de la page spéciale ne réalise pas l'étape finale de décodage QINU (pourquoi ?), et donc tous les marqueurs QINU sont laissés non décodés. (Cela peut être un résidu de l'utilisation de la même syntaxe pour invoquer la transclusion d'une page de texte wiki, qui vient d'être collée directement dans le contenu de la page hôte de texte wiki et analysée, comme c'est le cas pour invoquer la transclusion d'une page spéciale, qui ne doit pas être analysé du tout. Chaque fois que le code décide « d'attendre, il s'agit d'une page spéciale -- remplacez-le par un QINU », il devrait effectuer une décompression générale supplémentaire (unstripGeneral) avant de procéder à la substitution QINU.)

J'ai donc fait simplement ceci -- après cette ligne : ...J'ai ajouté ces lignes (la deuxième seulement parce que la défintion de la function pour la première le recommandait) : Maintenant que j'ai documenté cela, bien sûr, je vais maintenant trouver une faille tragique et me sentir vraiment stupide ... mais tant que cela semble fonctionner, je devais le noter ici. (Il est aussi important de noter le problème avec le contournement numéro 1.) Aussi, je n'ai testé ceci qu'avec MediaWiki 1.10.1. Le problème est toujours présent avec MW 1.14 et cette solution peut fonctionner ou pas. -- 18:26, 9 avril 2009 (UTC)

Une page d'erreur est affichée. Les arguments  et   spécifient les clés dans $this->msg, et non pas le texte. Par exemple :


 * 'error' fait référence au texte « Error ».
 * 'badarticleerror' fait référence au texte « This action cannot be performed on this page. ».

Vous pouvez aussi spécifier des objets de messages ou ajouter des paramètres :

WebRequest.php
La classe est utilisée pour obtenir des informations à partir des tableaux GET et POST. Il est recommandé d'utiliser plutôt ceci que d'accéder directement aux superglobales, car l'objet effectue des tâches amusantes telles que le nettoyage de magic_quotes. L'objet WebRequest est accessible aux extensions en utilisant le.

Database.php
MediaWiki a une charge de fonctions pratiques et de wrappers pour interagir avec la base de données, en utilisant la classe. It also has an interesting load balancing scheme in place. Il est recommandé d'utiliser ces conteneurs. Check out  for a complete listing of all the convenience functions, because these docs will only tell you about the non-obvious caveats. Voir.

User.php
La classe est utilisée pour représenter les utilisateurs du système. SpecialPage->getUser doit être utilisé pour obtenir un objet User pour l'utilisateur actuellement connecté. L'utilisation de la variable globale  est obsolète

Title.php
Title représente le nom d'une page du wiki. This is useful because MediaWiki does all sorts of fun escaping and special case logic to page names, so instead of rolling your own convert title to URL function, you create a Title object with your page name, and then use  to get a URL to that page.

To get a title object for your special page from outside of the special page class, you can use. Cela vous donnera un titre internationalisé dans la langue du wiki.

Pages spéciales personnalisées
There are various ways to provide your own special pages not bundled within MediaWiki:
 * One method is to install an extension that generates a form to create or edit an article. A list of extensions currently available, can be found at.
 * You can also write an extension which provides your own special page. Writing your own extension requires PHP coding skill and comfort with object oriented design and databases also is helpful.  You will also need to know how to use code to create and edit MediaWiki articles. For more information, please see this discussion.
 * You can also display a custom page through Javascript, in place of the default error message "Unknown special page" (or the "This page is intentionally left blank." message, if using a subpage of Special:BlankPage). In MediaWiki:Common.js, check for, then hide the MediaWiki-generated content (just appendCSS  ), and inject custom HTML  into the   or  . For an example, see meta:User:Krinkle/Tools/Real-Time Recent Changes.

Définir un titre d'extension
MediaWiki n'initialise pas le nom de l'extension, c'est le travail du développeur. It will look for the name of the extension when Special:Specialpages is called or the special page is loaded (specifically right before the registered  function is called). Dans la section fonction execute( $par ), utilisez  pour donner un titre à l'extension comme :

The place where the extension can be found (as specified by what is passed into the SpecialPage constructor) is the key--except that it is not capitalized because of, the internally used function that finds out the title (or, what they call description) of the special page,   the name. "ThisIsACoolSpecialPage"'s key would be "thisisacoolspecialpage."

Theoretically,  can be overloaded in order to avoid interacting with the message cache but, as the source code states: "Derived classes can override this, but usually it is easier to keep the default behavior. Les messages peuvent être ajoutés au moment de l'exécution ; voir « MessageCache.php ». Furthermore, this prevents the MediaWiki namespace from overloading the message, as below.

Internationaliser le nom de l'extension
So you've just installed a shiny new MediaWiki extension and realize: "Oh no, my wiki is in French, but the page is showing up as English!" Most people wouldn't care, but it's actually a quite simple task to fix (as long as the developer used the method explained on this page). Pas de nouille dans le code source. Let's say the name of the page is  and the name comes out to "List of Dirty Pages" but you want it to be (and excuse my poor French) "Liste de Pages Sales". Voila, c'est aussi simple que cela :


 * 1) Allez sur, celle page peut ne pas exister, mais modifiez-la de toute manière
 * 2) Insérez « Liste de Pages Sales » et enregistrez

Et voilà, la modification est appliquée.

This is also useful for customizing the title for your wiki within your language: for instance, the developer called it "List of Dirty Pages" but you don't like that name, so you rename it "List of Pages needing Cleanup". Voir Special:Allmessages pour en connaître davantage.

De même, si votre extension possède un grand bloc de texte qui ne change pas, comme un avertissement, ne sortez pas le texte directement. A la place, ajoutez-le au cache du message et quand le moment sera venu de sortir le texte dans votre code, faites ceci :

Alors ce message aussi peut être personnalisé sur.

Voir aussi Help:System message.

Ne pas afficher votre page spéciale sur Special:SpecialPages
Sometimes you may want to limit the visibility of your Special Page by removing it from Special:SpecialPages and making it visible to only those users with a particular right. You can do this in the constructor by passing in a  parameter; e.g., “editinterface”, a right only assigned to sysops by default; see the User rights manual for other available user rights.

Ou vous pouvez créer vos propres droits dans le fichier setup et les assigner aux administrateurs (sysops) par exemple :

et ensuite appelez le constructeur avec vos droits :

Empêcher l'accès à votre page spéciale
Even if you restrict your page in the constructor, as mentioned above, it will still be viewable directly via the URL, e.g. at Special:MySpecialPage. In order to actually limit access to your SpecialPage you must call  in the   method.

If you need more fine-grained control over permissions, you can override, and/or add whatever permissions-checking is required for your extension.

Désactiver les pages Special:UserLogin et Special:UserLogout
Dans LocalSettings.php vous pouvez utiliser le pour désinitialiser les pages spéciales embarquées non désirées. See "making a few SpecialPages restricted" if you need conditional unsetting of special pages for example for certain user groups. The general message "You have requested an invalid special page." is shown if users try to access such unset special pages.

Ajouter des journaux
Sur MediaWiki, toutes les actions des utilisateurs sur le wiki sont tracées pour la transparence et la collaboration. Voir pour savoir comment le faire.

Modifier les groupes sur Special:Specialpages
If you're an extension developer, you have to implement the  method as described in the Special page group section of this page.

Depuis MediaWiki 1.21, le groupe des pages spéciales peut être réécrasé en modifiant un message système. Cette méthode n'est pas faite pour les développeurs d'extensions mais pour les administrateurs de site. The group name must be placed in the  message, where   is the canonical name (in english) of the special page in lowercase. For example, if you want to set the group under which "Special:MyLittlePage" is displayed on Special:Specialpages to "MyLittleGroup", you just have to create "MediaWiki:Specialpages-specialpagegroup-mylittlepage" with content "MyLittleGroup". "Special:MyLittlePage" will then show up under the group "MyLittleGroup", which you can name under "MediaWiki:Specialpages-group-mylittlegroup".

Si vous voulez modifier le groupe des pages spéciales existantes, voyez Special:SpecialPages&uselang=qqx et utilisez ces noms au lieu de « mapetitepage ».

Voir aussi

 * HTMLForm – Tutoriel pour créer des cases à cocher, des zones de texte, des boutons radio, etc. à l'intérieur des pages spéciales