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'; }

Some common values are 'login', 'maintenance', 'media', 'other', 'pagetools', 'redirects', 'users'. You can see the accepted values at Special:AllMessages (search for specialpages-group) or browse the wiki using the pseudo language 'qqx' by going to Special:SpecialPages?uselang=qqx ) and looking at the headings. Specify the word 'media' to use the interface message 'specialpages-group-media'.

If your special page doesn't fit into any of the preconfigured headings, you can add a new heading by adding it to your localisation file, see The localisation file).

The standard page groups that come with MediaWiki are listed in the localisation file. For example, the English messages are in ) and begin with  . If you want to categorize your special page under , then the message is  . The value for this key is the text that appears as the name of that category, for example,.

If your special page does not seem to fit under any of the existing categories, you can always make a new one. In your extension's localisation file simply insert a new key for the  array. 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
You can overload the constructor to initialize your own data, but the main reason you would want to do it is to change the behavior of the SpecialPage class itself. When you call the base class constructor from your child class, the following parameters are available:


 * string  Name of the special page, as seen in links and URLs
 * string  User right required, e.g. "block" or "delete"; also see Restricting page access
 * boolean  Whether the page is listed in Special:Specialpages

This initialises the OutputPage object  with the name and description of your special page. It should always be called from your execute method.

This method returns an OutputPage object which can be accessed as described below. Comme dans le code d'exemple, utilisez

au lieu de la variable globale obsolète

This method returns a WebRequest object which can be accessed as described below. 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. For example, if you add to the wikitext of a page, it will insert a listing of recent changes within the existing content of the page.

Including a special page from another web page is only possible if you declared the page to be includable in the constructor. You can do this by adding the following in the  method after the parent class initialization:

You can also define your special page class as extending the IncludableSpecialPage class.

The SpecialPage->including function returns a boolean value telling you what context the special page is being called from: false if it is a separate web page, and true if it is being included from within another web page. Usually you will want to strip down the presentation somewhat if the page is being included.

This is the function which your child class should overload. It passes a single parameter, usually referred to cryptically as  (short for $parameter, as it is the parameter the users can feed to your special page). This parameter is the subpage component of the current title. For example, if someone follows a link to Special:MyExtension/blah,  will contain "blah".

Page d'aide
It's useful to add help pages on MediaWiki.org, where they'll be translatable. To make sure users find your help page, it's advisable and very simple for your special page to link the help page in question:

OutputPage.php
OutputPage.php contains the class definition for objects of type. You can get an object of this class from your SpecialPage using

The variablename $output is, of course, arbitrary. Whatever you call it, this is the variable you will use the most, because it is the way to send output to the browser (no, you don't use  or  ). If you want to use it somewhere, declare the variable global:

If you want to, you can create multiple OutputPage objects in different methods in your SpecialPage extension. They will add to the output in the order they are executed.

You can inspect the OutputPage class by viewing  (indeed, all of these can be inspected), but there are a few methods you should definitely know about.

Essentially the quick and dirty substitute for. Il prend vos entrées et les ajoute dans le buffer: sans poser de question. In the below action, if  contains user-data, it could easily have XSS, evil stuff, or the spawn of Satan injected in. You're better off using escaping (such as with the php function htmlentities) or the XML builders class to build trusted output.

pour la plupart des sorties, vous devriez utiliser cette fonction. It's a bit of a black magic function: wikitext goes in, HTML comes out, and a whole lotta arcane code and demon summonings happen in between.

What's worth noting is that the parser will view your chunks as cohesive wholes and paragraph accordingly. That is...

Will output three lists with one item each, which probably wasn't intended.

Note however, if you just want to insert a system message and have it treated like parsed wikitext, you can use code like. This will not have the issue with nested parser calls mentioned above.

contournement numéro 1
Important: these work arounds are only needed if you are making a transcludable special page. Normal special pages do not need these.

As a workaround, you can have your extensions convert Wikitext to HTML using a separate Parser object and then use. Exemple :

contournement numéro 2
I tried the above, and found that the same problem now applied to any s in the transcluded text. This won't be a problem for a lot of extensions, but the extension I was writing was intended to show wikitext from another page as part of its functionality, so this was a problem.

Le processus pour analyser syntaxiquement une page qui transclue une page spéciale semble être le suivant :
 * 1) Replace  with a UNIQ-QINU marker (because SpecialPage output is expected to be ready-to-output HTML)
 * 2) Replace any s with QINU markers as above
 * 3) Parse everything else from wikitext to HTML
 * 4) Replace all QINU markers with their respective stored values, in a single pass

The process for parsing a page which transcludes a non-special page, though, is apparently like this:
 * 1) Replace  or  with contents of transcluded page (because transcluded pages contain unparsed wikitext)
 * 2) Replace any s with QINU markers as above
 * 3) Parse everything else from wikitext to HTML
 * 4) Replace all QINU markers with their respective stored values, in a single pass

The problem is apparently that in the earlier case, the parsing of the SpecialPage's wiki text is lacking the final QINU decoding step (why?), so all the QINU markers are left undecoded. (This may be a leftover from using the same syntax to invoke transclusion of a wikitext page, which is just pasted straight into the host page's wikitext contents and parsed, as is used to invoke transclusion of a SpecialPage, which must not be parsed at all. Wherever the code is that decides "wait, this is a special page -- replace it with a QINU", it should be doing the extra unstripGeneral before doing the QINU substitution.)

So I just did the following -- after this line: ...I added these lines (the second one is only because the function definition for the first one recommends it): Since I have now documented this, of course, I will now find a tragic flaw with it and feel really stupid... but as long as it seems to be working, I had to note it here. (It is also important to note the problem with work-around #1.) Also, I have only tested this with MediaWiki 1.10.1. The problem still exists under MW 1.14, but this solution may or may not work. -- 18:26, 9 avril 2009 (UTC)

Une page d'erreur est affichée. The arguments  and   specify keys into $this->msg, not text. Par exemple :


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

You can also specify message objects or add parameters:

WebRequest.php
The class is used to obtain information from the GET and POST arrays. Using this is recommended over directly accessing the superglobals, since the object does fun stuff like magic_quotes cleaning. The WebRequest object is accessible from extensions by using the.

Database.php
MediaWiki has a load of convenience functions and wrappers for interacting with the database, using the class. It also has an interesting load balancing scheme in place. It's recommended you use these wrappers. 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 should be used to obtain a User object for the currently logged in user. 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. It will give you a localised title in the wiki's language.

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 does not set the title of the extension, which is the developer's job. 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). In the function execute( $par ) section, use  to title the extension like:

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). No noodling around in source code. 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". Well, it's as simple as this:


 * 1) Navigate to, this page may not exist, but edit it anyway
 * 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.

Also, if your extension has a large block of text that does change, like a warning, don't directly output the text. Instead, add it to the message cache and when the time comes to output the text in your code, do this:

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.

Since MediaWiki 1.21, the special page group can be overridden by editing a system message. 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".

If you want to change the group of existing special pages, have a look on Special:SpecialPages&uselang=qqx and use those names instead of "mylittlepage".

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