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 peut créer un formulaire donnant la liste des commentaires émis par l'utilisateur. Les pages spéciales sont stockées dans leur propre espace de noms (Special:) et ne sont pas directement modifiables comme les autres pages. Les peuvent aussi 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 à Special:SpecialPages. Quelques pages spéciales ne sont accessibles qu'à des utilisateurs possédant certains droits et certains accès autorisés. D'autres pages spéciales ne sont pas présentées du tout dans la liste des pages spéciales car elles sont uniquement utilisées en interne par le wiki.

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 fois 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.
 * - Le.

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 du nom de 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. Elle 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 traduire les fichiers de localisation.

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'une espace dans l'ID doit être remplacée 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 dans 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 $RecentChanges 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 une 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ée ê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 quantité de fonctions pratiques et de wrappers pour interagir avec la base de données, en utilisant la classe. Il dispose également d’un schéma de partage de charge intéressant. Il est recommandé d'utiliser ces conteneurs. Consultez la base de données  pour obtenir une liste complète de toutes les fonctions pratiques, car ces documents ne vous présenteront que des mises en garde non évidentes. 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. Ceci est utile car MediaWiki utilise toutes sortes d’échappements amusants et une logique de casse particulière pour les noms de page. Ainsi, au lieu de lancer votre propre fonction de conversion de titre en URL, vous créez un objet Title avec le nom de votre page, puis utilisez  pour obtenir une URL de cette page.

Pour obtenir un objet pour le titre de votre page spéciale en dehors de la classe de page spéciale, vous pouvez utiliser. Cela vous donnera un titre internationalisé dans la langue du wiki.

Pages spéciales personnalisées
Il existe différentes manières de fournir vos propres pages spéciales non groupées dans MediaWiki :
 * Une méthode consiste à installer une extension qui génère un formulaire pour créer ou modifier un article. Une liste des extensions actuellement disponibles se trouve dans.
 * Vous pouvez également écrire une extension qui fournit votre propre page spéciale. L'écriture de votre propre extension nécessite des connaissances en codage PHP et une connaissance approfondie de la conception orientée objet et des bases de données est également utile. Vous aurez également besoin de savoir comment utiliser le code pour créer et éditer des articles MediaWiki. Pour plus d'informations, consultez cette discussion.
 * Vous pouvez également afficher une page personnalisée via JavaScript, à la place du message d'erreur par défaut "Page spéciale inconnue" (ou du message "Cette page est laissée blanche intentionnellement", si vous utilisez une sous-page de Special:BlankPage). Dans MediaWiki:Common.js, recherchez, puis masquez le contenu généré par MediaWiki (ajoutez uniquement le CSS ) et insérez le code HTML personnalisé  dans le corps   ou  . Pour un exemple, voir meta:User:Krinkle/Tools/Real-Time Recent Changes.

Définir un titre pour l'extension
MediaWiki n'initialise pas le nom de l'extension, c'est le travail du développeur. Il cherchera le nom de l'extension lorsque Special:Specialpages est appelé ou que la page spéciale est chargée. Dans la section function execute( $par ), utilisez $ttwgout pour donner un titre à l'extension comme :

L’endroit où l’extension peut être trouvée (comme spécifié par ce qui est passé au constructeur de SpecialPage) est la clé -- excepté qu'elle n'est pas en majuscules à cause de, la fonction interne utilisée qui recherche le titre (ou, ce qu’on appelle description) de la page spéciale, applique   au nom. La clé de « ThisIsACoolSpecialPage» sera donc « thisisacoolspecialpage ».

Théoriquement,  peut être surchargé afin d'éviter toute interaction avec le cache des messages mais, comme l'indique le code source: « Les classes dérivées peuvent redéfinir cela, mais il est généralement plus facile de conserver le comportement par défaut. De plus, cela empêche l'espace de noms MediaWiki de surcharger le message, comme ci-dessous.

Internationaliser le nom de l'extension
Donc, vous venez d'installer une nouvelle extension MediaWiki toute neuve et vous vous rendez compte que : « Oh non, mon wiki est en français, mais la page s'affiche en anglais! » La plupart des gens n'y font pas attention, mais c'est en fait une tâche assez simple à résoudre (tant que le développeur utilise la méthode expliquée sur cette page). Pas de nouille dans le code source. Supposons que le nom de la page soit  et qu'il apparaisse dans « List of Dirty Pages » mais que vous le vouliez (et excusez mon pauvre français) à « Liste de Pages Sales ». Eh bien, c'est aussi simple que cela :


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

Voilà, la modification est appliquée.

Ceci est également utile pour personnaliser le titre de votre wiki dans votre langue: par exemple, le développeur l'a appelé « Liste des pages sales » mais vous n'aimez pas ce nom et vous voulez le renommer « Liste des pages nécessitant un nettoyage ». 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 MediaWiki:Dirtypageshelp.

Voir aussi Help:System message.

Ne pas afficher votre page spéciale sur Special:SpecialPages
Parfois, vous voudrez peut-être limiter la visibilité de votre page spéciale en la supprimant de Special:SpecialPages et en ne la rendant visible que pour les utilisateurs disposant d'un droit particulier. Vous pouvez faire cela dans le constructeur en passant dans un paramètre  (par exemple « editinterface »), un droit uniquement attribué par défaut aux administrateurs (sysops); voir le Manuel des droits de l'utilisateur pour connaître les autres droits d'utilisateur disponibles.

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
Même si vous restreignez votre page dans le constructeur, comme mentionné ci-dessus, elle sera toujours visible directement via son URL, par exemple à Spécial: MySpecialPage. Afin de limiter réellement l'accès à votre page spéciale, vous devez appeler  dans la méthode.

Si vous avez besoin d'un contrôle plus fin des autorisations, vous pouvez modifier  et/ou ajouter la vérification des autorisations requises pour votre 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. Voir « restreindre certaines pages spéciales » si vous avez besoin de débloquer conditionnellement des pages spéciales, par exemple pour certains groupes d'utilisateurs. Le message général « Vous avez demandé une page spéciale non valide.» s'affiche si les utilisateurs tentent d'accéder à ces pages spéciales non débloquées.

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
Si vous êtes un développeur d’extensions, vous devez implémenter la méthode  comme décrit dans la section la section du groupe de pages spéciales de cette 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. Le nom du groupe doit être placé dans le message, où   est le nom canonique (en anglais) de la page spéciale en minuscules. Par exemple, si vous voulez définir le groupe dans lequel « Special:MyLittlePage » est affiché sur Special:Specialpages à « MyLittleGroup », il vous suffit de créer « MediaWiki:Specialpages-specialpagegroup-mylittlepage » avec le contenu « MyLittleGroup ». « Special:MyLittlePage » apparaîtra ensuite dans le groupe « MyLittleGroup », que vous pourrez nommer par « 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