Manual:Developing extensions/fr



Chaque extension se compose de trois parties :


 * 1) Installeur
 * 2) Exécution
 * 3) Emplacement

Une extension minimale se compose de trois fichiers, une pour chaque partie :


 * MyExtension/extension.json: Stocke les instructions de l'installateur. Le nom du fichier doit être "extension.json". (Pour les versions antérieurs à MédiaWiki 1.25 les instructions d'installation se trouvent dans un fichier  nommé d'après l'extension. Plusieurs extensions peuvent avoir des fonctionnalités rétro-compatibles dans ce fichier PHP.)
 * MyExtension/MyExtension_body.php: Stocke le code d'exécution pour l'extension. Le nom de fichier "MonExtension_body.php" est conventionnel mais non requis. Si votre extension est complexe et implique plusieurs fichiers PHP, vous devez suivre la convention de placer son code d'implémentation dans un sous-répertoire nommé  (bien que l'extension Exemple ne suive pas cette convention). Par exemple, regardez l'extension SemanticMediaWiki
 * MyExtension/i18n/*.json: Stocke l'information d'emplacement de l'extension.

Lorsque vous développez une extension, remplacez "MyExtension" ci-dessus par le nom de votre extension. Utilisez les noms UpperCamelCase pour son répertoire et son/ses fichiers PHP; ce sont les conventions générales de nommage des fichiers. (l' est un bon point d'entrée pour commencer les entensions. Vous pouvez aussi prendre en compte l'utilisation de MWStew pour le génération de votre extension boilerplate. Voir aussi le modèle cookiecutter pour les extensions MediaWiki sur GitHub).

Les trois parties d'une extension, la configuration, l'exécution, et l'internationalisation tout comme les types d'extensions, la licence et la publication de votre extension sont décrits dans les sections suivantes de cette page.

Configuration
Votre but en écrivant la partie de configuration est de consolider l'initialisation des paramètres pour que les utilisateurs qui installent votre extension n'aient rien à faire d'autre que d'inclure le fichier de configuration dans leur fichier, comme cela :

Si vous voulez rendre votre extension configurable par l'utilisateur, vous devez définir et documenter certains paramètres de configuration et le setup utilisateur devrait ressembler à ceci :

Pour atteindre cette simplicité, votre fichier setup doit effectuer un certain nombre de tâches (décrites en détails dans les sections suivantes) :


 * enregistrer tout pilote de média, fonction d'analyseur, page spéciale, balise XML personnalisée, et la variable utilisée par votre extension.
 * définir et/ou valider toutes les variables de configuration que vous avez définies pour votre extension.
 * préparer les classes utilisées par votre extension pour l'auto-chargement
 * déterminer quelles parties de votre installation doivent être faites immédiatement et quelles autres doivent être reportées après que le coeur de MediaWiki ait été initialisé et configuré.
 * définir toutes les accroches supplémentaires nécessaires à votre extension
 * créer ou vérifier toutes les nouvelles tables de la base de données, nécessaires à votre extension.
 * configurer l'internationalisation de votre extension

Enregistrement des fonctionalités avec MediaWiki
MediaWiki liste toutes les extensions qui ont été installées sur sa page de. A titre d'exemple, vous pouvez voir toutes les extensions installées sur ce wiki en Special:Version. Il est de bon ton de vérifier que votre extension est aussi affichée sur cette page. Pour faire cela, vous devrez ajouter une entrée à pour chaque pilote de média, fonction d'analyseur, page spéciale, balise XML personnalisée, et variable utilisée par votre extension. L'entrée ressemblera à quelque chose comme ceci :

Voir pour les détails complets de la signification de ces champs. Beaucoup de ces champs sont optionnels, mais il est encore bon de les remplir. La  fait référence à la version du schéma pour lequel le fichier  est écrit. Jusqu'à présent (janvier 2018) les versions disponibles sont la 1 et la 2. Voir ici pour la documentation concernant cette fonction.

En plus de l'enregistrement ci-dessus, vous devez également définir les accroches de votre fonction dans MediaWiki. Ce qui figure ci-dessus ne configure que la page Special:Version. La manière dont vous faites cela dépend du type de votre extension. Pour les détails, voyez la documentation de chaque type d'extension :

Rendre votre extension configurable par l'utilisateur
Si vous voulez que l'utilisateur puisse configurer votre extension, vous devrez fournir une ou plusieurs variables de configuration. C'est une bonne idée que de donner à ces variables un nom unique. Elles devront aussi suivre les conventions de nommage de MediaWiki (par exemple les variables globales doivent commencer par $wg).

Par exemple, si votre extension s'appelle "Very silly extension that does nothing", vous pourriez vouloir que le nom de vos variables de configuration commence par  ou. Ce que vous choisissez n'a réellement pas d'importance tant que personne du coeur de MediaWiki ne commence ses variables de cette manière et vous avez fait un travail raisonnable en vérifiant que personne parmi les extensions publiées n'avait fait commencer ses variables de la sorte. Les utilisateurs n'hésiteront pas à choisir entre votre extension et d'autres extensions car vous avez choisi des noms de variables qui se chevauchent.

Une bonne idée aussi est d'inclure la documentation détaillée de toutes les variables de configuration dans vos informations d'installation.

Voici un exemple de boiler plate qui peut être utilisé pour commencer :

Remarquez que après l'appel à  la variable globale   n'existe pas. Si vous initialisez la variable, par exemple dans  alors la valeur donnée dans ne sera pas utilisée.

Préparer des classes pour l'auto-chargement
Si vous choisissez des classes pour implémenter votre extension, Mediawiki fournit un mécanisme simplifié pour aider PHP à trouver le fichier source dans lequel se trouve votre classe. Dans la plupart des cas cela évite d'écrire votre propore méthode d'.

Pour utiliser le mécanisme d'auto-chargement de MediaWiki, ajoutez les entrées dan sle champ. La clé de chaque entrée est le nom de la classe; la valeur est le fichier qui héberge la définition de la classe. Pour une extension simple ne comportant qu'une seule classe, on donne souvent à la classe le nom de l'extension et donc la section d'auto-chargement pourrait ressembler à ceci (avec une extension appelée MyExtension):

Le nom de fichier est relatif au répertoire dans lequel se trouve le fichier extension.json.

Définir des accroches supplémentaires
Voir.

Ajouter des tables dans la base de données
Si votre extension a besoin d'ajouter ses propres tables de base de données, utilisez l'accroche. Voir la page du manuel pour davantage d'informations sur l'utilisation.

Configurer l'internationalisation
Voir:
 * Internationalisation (sommaire)
 * Internationalisation (détaillé)
 * Namespaces

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.

Execution
La technique pour l'écriture de la portion d'implémentation dépend de la partie du système Mediawiki que vous souhaitez étendre :
 * Balisage Wiki : Les extensions qui étendent le marquage du wiki contiendront typiquement du code qui definit et implémente les balises XML personnalisées, les fonctions d'analyseur et les variables.
 * Rapports et administration : Les extensions qui ajoutent des rapports et des possibilités administratives habituellement le font en ajoutant des pages spéciales. Pour davantage d'informations, voir.
 * Automatisation des articles et intégrité : Extensions that improve the integration between MediaWiki and its backing database or check articles for integrity features, will typically add functions to one of the many hooks that affect the process of creating, editing, renaming, and deleting articles. Pour plus d'informations concernant ces accroches et sur la manière d'y attacher votre code, veuillez voir.
 * Habillage et convivialité : Les extensions qui apportent un nouvel aspect et comportement à MediaWiki sont embarquées dans les skins. Pour davantage d'information sur la manière d'écrire vos propres habillages, voir et.
 * Sécurité: Les extensions qui limitent leur utilisation à certains utilisateurs doivent s'intégrer au système des droits propre à MediaWiki. Pour en connaître plus sur ce système, veuillez voir . Certaines extensions aussi laissent Mediawiki utiliser des mécanismes d'autentification externes. Pour davantage d'informations, voir . In addition, if your extension tries to limit readership of certain articles, please check out the gotchas discussed in.

Voir aussi ,

Localisation
Si vous voulez que votre extension soit utilisable sur les wikis qui ont des lecteurs en plusieurs langues, vous devez ajouter une prise en charge de l'internationalisation à votre extension.

Enregistrer les messages dans .json
Enregistrer les définitions de messages dans un fichier d'internationalisation JSON, un par clé de langue dans laquelle votre extension a été traduite. Les messages sont enregistrés avec une clé de message et le message lui-même, en utilisant le format standard JSON. Chaque identifiant de message doit être en minuscules et ne doit pas contenir d'espaces. Un exemple que vous pouvez trouver par exemple dans l'extension MobileFrontend. Voici un exemple de fichier JSON minimal (dans ce cas en.json:

en.json

Enregistrer la documentation des messages dans qqq.json
La documentation concernant les clés des messages peut être mise dans le fichier JSON pour le pseudo language avec le code qqq. Une documentation de l'exemple ci-dessus peut-être :

qqq.json:

Definir des messages

 * Attribuez à chaque message un identificateur de message unique, en minuscules, et sans espaces ; par exemple :uploadwizard-desc
 * Pour toute chaîne de caractères à afficher à l'utilisateur, veuillez définir un message.
 * MediaWiki supports parameterized messages and that feature should be used when a message is dependent on information generated at runtime. Les paramètres de substitution sont spécifiés par $n, où n représente l'index du paramètre; par exemple

Définir la documentation du message
Chaque message que vous définissez doit avoir une entrée de documentation du message associée Message documentation; dans qqq.json par exemple

Charger le fichier d'internationalisation
Dans votre routine d'installation, définissez l'emplacement de vos fichiers de messages (par exemple dans le répertoire i18n/):

Utilisation de wfMessage dans PHP
Dans votre code d'installation et d'implémentation, remplacez chaque utilisation littérale du message par un appel à. In classes that implement (as well as some others such as subclasses of SpecialPage), you can use   instead. Exemple:

Utiliser mw.message sous JavaScript
Il est aussi possible d'utiliser les fonctions i18n dans JavaScript. Voir pour les détails.

Types d'extensions
Extensions can be categorized based on the programming techniques used to achieve their effect. Les extensions les plus complexes utilisent plus d'une des techniques suivantes :
 * Sous-classement: MediaWiki expects certain kinds of extensions to be implemented as subclasses of a MediaWiki-provided base class:
 *  – Subclasses of the class are used to build pages whose content is dynamically generated using a combination of the current system state, user input parameters, and database queries. Both reports and data entry forms can be generated. Ils sont utilisés à la fois pour des raisons statistiques et administratives.
 *  – Les habillages modifient l'aspect et le comportement de Mediawiki en modifiant le code qui génère les pages en sous-classant la classe Mediawiki.
 *  – A technique for injecting custom php code at key points within MediaWiki processing. They are widely used by MediaWiki's parser, its localization engine, its extension management system, and its page maintenance system.
 *  – XML style tags that are associated with a php function that outputs HTML code. Vous n'avez pas besoin de vous limiter au formatage du texte à l'intérieur des balises. Vous n'avez même pas besoin de l'afficher. Many tag extensions use the text as parameters that guide the generation of HTML that embeds google objects, data entry forms, RSS feeds, excerpts from selected wiki articles.
 *  – A technique for mapping a variety of wiki text string to a single id that is associated with a function. Both variables and parser functions use this technique. All text mapped to that id will be replaced with the return value of the function. The mapping between the text strings and the id is stored in the array $magicWords. The interpretation of the id is a somewhat complex process – see  for more information.
 *  – Variables are something of a misnomer. They are bits of wikitext that look like templates but have no parameters and have been assigned hard-coded values. Le marquage standard de wiki tel que ou  sont des exemples de variables. They get their name from the source of their value: a php variable or something that could be assigned to a variable, e.g. a string, a number, an expression, or a function return value.
 *  – .  De même manière que les extensions de balises, les fonctions d'analyseur traitent les paramètres et retournent une valeur. A l'inverse des extensions de balises, le résultat des fonctions d'analyseur est du texte wiki.
 *  – you can add custom modules to MediaWiki's action API, that can be invoked by JavaScript, bots or third-party clients.
 *  – If you need to store data in formats other than wikitext, JSON, etc. then you can create a new.

Support des autres versions du coeur
Il existe deux conventions largement répandues pour supporter les versions plus anciennes du coeur MediaWiki :

Extension maintainers should declare with the  parameter of the Extension template which convention they follow.
 * Master: the master branch of the extension is compatible with as many old versions of core as possible. This results in a maintenance burden (backwards-compatibility hacks need to be kept around for a long time, and changes to the extension need to be tested with several versions of MediaWiki), but sites running old MediaWiki versions benefit from functionality recently added to the extension.
 * Release branches: release branches of the extension are compatible with matching branches of core, e.g. sites using MediaWiki need to use the  branch of the extension. (For extensions hosted on gerrit, these branches are automatically created when new versions of MediaWiki are released.) This results in cleaner code and faster development but users on old core versions do not benefit from bugfixes and new features unless they are backported manually.

Publication
To autocategorize and standardize the documentation of your existing extension, please see. To add your new extension to this Wiki:

Deploiement et enregistrement
If you intend to have your extension deployed on Wikimedia sites (including possibly Wikipedia), additional scrutiny is warranted in terms of performance and security. Consulter.

If your extension adds namespaces, you may wish to register its default namespaces; likewise, if it adds database tables or fields, you may want to register those at.

Please be aware that review and deployment of new extensions on Wikimedia sites can be extremely slow, and in some cases has taken more than two years.

Documentation d'aide
You should provide public-domain help documentation for features provided by your extension. est un bon exemple. You should give users a link to the documentation via the function.

Fournir du support / collaborer
Extension developers should open an account on Wikimedia's, and request a new project for the extension. This provides a public venue where users can submit issues and suggestions, and you can collaborate with users and other developers to triage bugs and plan features of your extension.

Voir aussi

 * – implements some example features with extensive inline documentation
 * – une extension Boilerplate fonctionnelle, utile comme point de départ pour votre propre extension
 * Lisez l'extension Example, basez votre propre code sur l'extension BoilerPlate.
 * cookiecutter-mediawiki-extension – a template for the python tool cookiecutter to generate a boilerplate extension (with variables etc.)
 * Vous permet d'avancer rapidement avec votre propre extension. Peut aussi générer l'extension BoilerPlate.
 * - copier le code spécifique à partir d'eux
 * – explique comment votre extension peut fournir une API aux clients
 * Meilleures pratiques pour les extensions
 * Meilleures pratiques pour les extensions
 * Meilleures pratiques pour les extensions
 * Meilleures pratiques pour les extensions
 * Meilleures pratiques pour les extensions