Aide:Créer un modèle

Une page de Wikipédia, l'encyclopédie libre.
Sauter à la navigation Sauter à la recherche
Wikicode
Cette page ne concerne que le wikicode.
Niveau avancé
Nous vous recommandons de lire auparavant Aide:modèle
Cette page explique comment créer un modèle, comment le documenter et montre les possibilités techniques. Avant de créer un nouveau modèle, il faut s’assurer qu’un modèle équivalent n’existe pas sous un titre différent.

En bref[modifier | modifier le code]

La méthode de création d’un modèle est similaire à celle de la création d’une page. Le nom de la nouvelle page doit commencer par « Modèle: » (Modèle:Nom du modèle) et peut contenir des espaces. Le plus simple est d’insérer un appel au modèle dans une page, puis de cliquer sur le lien qui apparaîtra en rouge ; l’appel s’effectue en tapant le code {{Nom du modèle}}.

Un modèle peut inclure un ou plusieurs autres modèles. Les redirections entre modèles fonctionnent.

Créez votre page Mon modèle (pour vous entraîner à la création des modèles). Pour l'utiliser, ajoutez {{Utilisateur:Monpseudo/Mon modèle}} à votre page utilisateur. Il vaut mieux travailler sur une page de brouillon pour éviter les effets de bord désagréables pour les visiteurs.

Il est nécessaire de documenter les modèles en utilisant un TemplateData pour que les autres utilisateurs n'aient pas à regarder le code source pour trouver les paramètres.

Nécessité de la documentation[modifier | modifier le code]

Un modèle est un outil partagé par tous ceux qui souhaitent l’utiliser. Il est donc indispensable de fournir une documentation expliquant : à quel besoin le modèle répond, dans quels cas il est adapté / inadapté, ce qu’il fait et comment il doit être utilisé.

Se reporter à la page Comment documenter un modèle ? qui explique comment procéder.

Demander la fabrication d'un nouveau modèle[modifier | modifier le code]

Icon tools.svg  Se rendre sur le Projet:Modèle 

Si vous avez besoin de l’aide d’utilisateurs expérimentés pour fabriquer un nouveau modèle, vous pouvez déposer une requête sur la page Projet:Modèle/Demandes.

Un langage particulier[modifier | modifier le code]

Aide détaillée : Aide:Syntaxe (wikicode).

Comme vous pourrez le remarquer, certains modèles complexes font appel à un langage informatique particulier. Pour plus de détails sur les caractères spéciaux en langage html, les ParserFunctions ou les mots magiques voir aide à la syntaxe.

Modèles à paramètres[modifier | modifier le code]

Un modèle peut dépendre de paramètres (ou arguments) extérieurs. Par exemple, le modèle {{Coord}} qui permet de placer des coordonnées géographiques, nécessite au moins deux paramètres : la latitude et la longitude.

Les paramètres sont spécifiés à l'inclusion, et suivent le nom du modèle ; ils sont isolés par des séparateurs « | » (la liste des paramètres se terminant donc par « }} ») : {{Nom du modèle|paramètre1|paramètre2…}}.

Désignation des paramètres[modifier | modifier le code]

Sur la page du Modèle:, ils sont désignés entre triples accolades : {{{paramètre 1}}}. Prenons par exemple la page fictive [[Modèle:Modèle de chose]] qui contiendrait :

La '''{{{objet}}}''' est un {{{type}}}.

Si vous effectuez l’appel :

{{modèle de chose
| objet = pomme
| type = fruit}}

Les paramètres seront « remplacés » par leur valeur (la valeur pomme sera attribuée au paramètre objet) et le modèle affichera :

La pomme est un fruit.

Il ne doit pas y avoir de retour à la ligne dans une valeur, mais <br /> est permis. Une valeur peut être un lien externe ou interne (la syntaxe des liens wiki est possible : [[page visée|texte qui apparaîtra]]).

Afin d’améliorer la lisibilité, des retours à la ligne peuvent apparaître dans l'appel au modèle (comme ci-avant).

Nom de paramètre implicite : les paramètres positionnels[modifier | modifier le code]

Par défaut, les paramètres sont désignés par leur nombre ordinal (ou rang), ils sont numérotés à partir de 1 dans leur ordre d’apparition dans l'appel. Le paramètre 2, exprimé par le code {{{2}}}, fait référence à la valeur du deuxième paramètre.

Pour reprendre l'exemple du [[Modèle:Modèle de chose]], présenté précédemment, et pour obtenir le même résultat, il faut procéder de la manière suivante :

Code du modèle Appel du modèle Rendu lors de l'appel du modèle
La {{{1}}} est un {{{2}}}. {{Modèle de chose|''pomme''|''fruit''}} La pomme est un fruit.
Le paramètre {{{1}}} est remplacé par la valeur pomme, et le paramètre {{{2}}} est remplacé par la valeur fruit,

Autre exemple, le modèle {{Annonce}} utilise un paramètre 1 et un paramètre 6 de cette manière : [[Image:{{{1}}}|20px|{{{6}}}]] qui s’interprète comme : « afficher l’image qui a pour nom la valeur du 1er paramètre, avec une taille de 20 pixels, et avec comme nom d'affichage la valeur du 6e paramètre ».

Une aide est certainement nécessaire pour expliquer la signification de ces paramètres.

Note : Contrairement à ce qui se passe pour les paramètres nommés, les espaces, retours chariots, sauts de ligne, tabulations, … au début et à la fin des paramètres positionnels ne sont pas automatiquement enlevés. Pour les supprimer, il faut utiliser le modèle {{trim}}.

Nom de paramètre explicite : les paramètres nommés[modifier | modifier le code]

L’usage de modèles peut être facilité par des paramètres nommés ; cette pratique est aussi recommandée pour faciliter le contrôle par des robots.

Pour nommer un paramètre, il suffit d’utiliser un nom représentatif de son rôle (au lieu des noms par défaut 1, 2, 3…) en précisant un couple paramètre=valeur. Par exemple, le code {{Avancement|42}} n'est pas très explicite ; {{Avancement|pourcentage=42}} serait plus clair.

Dans le code source du modèle « Avancement », il suffit d'utiliser {{{pourcentage}}} en lieu et place de {{{1}}}.

On peut appeler les paramètres nommés dans n’importe quel ordre.

Note : Les espaces, retours chariots, sauts de ligne, tabulations, … au début et à la fin des paramètres nommés sont automatiquement enlevés.

Le signe « = » dans la valeur d'un paramètre[modifier | modifier le code]

On a vu que le signe « = » permet d'associer un paramètre et une valeur. Mais il est possible que l'on veuille utiliser « = » dans une valeur (par exemple si on veut utiliser une URL).

  • Pour les paramètres explicites, {{MonModèle|paramètre=aaa=bbb}} associe bien la valeur « aaa=bbb ».
  • Pour les paramètres implicites, il faut les rendre explicites. Par exemple, dans {{MonModèle|1=aaa=bbb}}, le paramètre implicite « 1 » est explicité.

Le signe « | » dans la valeur d'un paramètre[modifier | modifier le code]

Le | permet de séparer les paramètres. Pour que la valeur d'un paramètre puisse contenir « | », il faut passer par le modèle {{!}} pour le remplacer, afin d'éviter la confusion.

Par exemple, {{Mon modèle|paramètre1=truc{{!}}machin…}}.

Valeur par défaut d'un paramètre[modifier | modifier le code]

Si un paramètre n'a pas de valeur spécifiée, la valeur restituée est « lui-même » (le code {{{1}}} sera « remplacé » par le texte {{{1}}}).

Le concepteur peut définir une valeur par défaut qui sera utilisée dans ce cas, en suivant la syntaxe : {{{param|123}}} dans le modèle (que l'on peut lire : « Si le paramètre param est absent, le code est fait pour utiliser 123 à la place. »). Un tel paramètre est alors dit facultatif.

Il est possible de ne rien définir pour la valeur par défaut en n’écrivant rien après la barre verticale : {{{param|}}}.

La valeur d'un paramètre peut aussi être vide (nulle). Il suffit de ne rien écrire après la barre verticale de position (paramètre implicite), ou bien rien après le signe « = » (paramètre nommé). Exemple : {{Mon modèle|}} ou {{Mon modèle|monparamètre=}}.

Pour définir la valeur par défaut d'un paramètre absent ou vide il faut utiliser la syntaxe suivante dans le modèle :{{#if: {{{param|}}} | {{{param}}} | 123}} (que l'on peut lire : « Si le paramètre param est absent ou vide, utiliser 123 à la place. »).

Valeurs par défaut imbriquées[modifier | modifier le code]

En imbriquant les paramètres {{{paramètre1|{{{paramètre2|...}}} }}}, un modèle peut établir une séquence de sélection ordonnée des valeurs.

Par exemple, le modèle fictif Monmenu qui est un « Menu fromage ou dessert » comporte l'imbrication {{{fromage|{{{dessert|ni fromage ni dessert}}} }}} :

  • L'appel {{monmenu|fromage=camembert}} retournera le texte « camembert », de même que {{monmenu|fromage=camembert|dessert=pomme}}.
  • L'appel {{monmenu|dessert=pomme}} retournera le texte « pomme ».
  • L'appel {{monmenu}} retournera le texte « ni fromage ni dessert ».

Les balises d’inclusion sélective[modifier | modifier le code]

Ce sont des balises XML permettant de sélectionner une partie du code source d’une page.

Balisage <noinclude>...</noinclude>[modifier | modifier le code]

  • Note : Ces balises sont recommandées dans les modèles.

Il est utile de pouvoir placer certains éléments du code source du modèle, comme les liens interlangues, la catégorisation ou la documentation du modèle, sans que ces éléments apparaissent sur la page où le modèle est inséré. Pour cela, on place les éléments à exclure entre les balises <noinclude> et </noinclude>.

Par exemple, un Modèle:Exemple contenant :

''(contenu {{{1|}}} à compléter…)''

et qui affiche ceci dans l’article qui l’inclut :

(contenu à compléter…)

peut être complété d’une catégorie et d’un lien interwiki destinés à sa propre classification, mais non destinés aux articles qui incluent ce modèle :

''(contenu {{{1|}}} à compléter…)''<noinclude>

[[Catégorie:Espace Modèle]]
[[Catégorie:Exemple]]

</noinclude>

Notez ci-avant l’absence de tout saut de ligne entre le contenu et le début de la section <noinclude>. Il est recommandé de ne faire précéder ou suivre la séquence <noinclude></noinclude> par AUCUN SAUT de LIGNE ou ESPACE supplémentaire car ils seraient conservés à l’inclusion du modèle et pourraient nuire à la présentation de son contenu. Par contre, on peut mettre des blancs et sauts de lignes à volonté à l’intérieur pour améliorer la lisibilité.

Ainsi :

  • sur la page du modèle, les catégories et liens interwikis apparaîtront, exactement comme si les deux balises <noinclude> et </noinclude> n’agissaient pas ;
  • lorsque le modèle est inclus dans un article par le code {{Exemple}}, seule la ligne « ''(contenu {{{1|}}} à compléter…)'' » sera utilisée (car cette ligne est située en dehors des <noinclude></noinclude>) sans les liens interwikis, ni les catégories.

Balisage <includeonly>...</includeonly>[modifier | modifier le code]

  • Note : Ces balises ne sont pas recommandées dans les modèles.

Les éléments qu’on veut voir apparaître en insertion, mais qu’on veut voir disparaître lors de la visualisation du modèle seul, sont placés entre les balises <includeonly> et </includeonly>.

Il est recommandé de laisser AU MOINS un SAUT de LIGNE ou ESPACE entre le dernier signe « = » d’une ligne de titre et une balise <includeonly>.

Par exemple, il peut être parfois nécessaire de montrer plusieurs exemples d’un modèle lui-même, en fournissant des paramètres différents. Dans ce cas, le code du modèle sera préférablement placé en tête mais caché dans la page de description :

<includeonly>''(contenu {{{1|}}} à compléter…)''</includeonly><noinclude>

{{Documentation|contenu=

== Utilisation ==
Ce modèle n’est qu’un exemple à compléter. Aucun paramètre obligatoire n’est ici nécessaire dans un article.

== Syntaxe ==
<code>{{Exemple|1}}</code>
* <code>1</code> : permet d’ajouter du texte au milieu du contenu affiché par ce modèle (facultatif, vierge par défaut).

== Exemple ==
« <code>{{Exemple|de cette section}}</code> » donne « {{Exemple|de cette section}} »

== Voir aussi ==
* [[Aide:Modèle]]
}}
[[Catégorie:Exemple]]
</noinclude>

Notez ci-avant la récursion du modèle : il est possible, lors de l’édition d’un modèle déjà existant, qu’il faille le publier deux fois pour que l’auto-inclusion dans sa page de description soit prise en compte.

Notez également comment sont disposées les balises </includeonly><noinclude>, SANS AUCUN SAUT de LIGNE intermédiaire en plus risquant d’interrompre une liste à numérotation automatique ou de provoquer une rupture de paragraphe indésirable ou de créer des sauts blancs verticaux.

Le balisage <includeonly></includeonly> doit donc rester exceptionnel et être utilisé avec précaution. Le placement d’un titre dans une section <includeonly> peut désorganiser la numérotation du sommaire et des liens « modifier » qui apparaissent à droite des titres de section.

Balises d’inclusion sélective et substitution[modifier | modifier le code]

Lors d’une insertion par substitution, les balises <noinclude></noinclude> et leur contenu ne sont pas reproduites.

Les parser functions[modifier | modifier le code]

Les parser functions sont des modèles « analyseurs » ; en anglais : parser. Ils permettent d’effectuer certaines fonctions d'analyse sur les paramètres passés à l'utilisation du modèle. Les plus courantes sont les branchements conditionnels #if et #switch.

Un exemple où les valeurs possibles d’un paramètre sont connues et en nombre limité : si l’utilisateur donne la valeur 4 au 3e paramètre du modèle contenant le code suivant : [[Image:{{#switch:{{{3}}}|0=00|1=25|2=50|3=75|4=100}}%.svg]], l’image affichée sera l’icône Image:100%.svg, soit 100 percent.svg.

Pour plus de détails, voir sur le site de MediaWiki : Mediawiki-logo.png  Parser Functions .

Modèles utilisateur[modifier | modifier le code]

Pour créer un modèle non encyclopédique (destiné à être appelé par une page utilisateur ou pour faire des tests), nul besoin de « polluer » l’espace des modèles. Cela peut se faire sur une sous-page utilisateur de manière tout à fait similaire.

Par exemple, si Utilisateur:Quidam veut tester un modèle appelé « Article fastidieux », il procède comme suit :

  • Il crée une sous-page utilisateur Utilisateur:Quidam/Article fastidieux dans laquelle il écrit le modèle :
<div style="border: 1px solid black; background: rgb(80%,100%,80%); text-align: center; padding: 0.4ex;">
 ''Ceci est un article fastidieux. Le taux d’ennui est estimé à {{{ennui}}} %.''</div>
  • Il l’utilise ensuite en tapant :
{{Utilisateur:Quidam/Article fastidieux|ennui=55}}

Ce qui donne :

Ceci est un article fastidieux. Le taux d’ennui est estimé à 55 %.

D’une façon générale, la syntaxe d’appel d’un modèle {{espace de noms:nom de modèle|paramètre1=valeur1}} reconnaît la présence de l’espace de noms qui, ici, ne prend pas la valeur par défaut Modèle:. Les paramètres peuvent ainsi être nommés explicitement, ou implicitement.

subst: imbriqué[modifier | modifier le code]

Si vous voulez qu'un Modèle:Modèle1 ne soit pas substitué dans un Modèle:Modèle2, mais que le Modèle:Modèle1 soit substitué dans la page où vous substituerez le Modèle:Modèle2, vous devez placez dans le Modèle:Modèle2 le code suivant :

{{<includeonly>subst:</includeonly>Modèle2}}

De cette manière, vous repoussez le processus de substitution du Modèle:Modèle1 dans le Modèle:modèle2, processus qui se produira à chaque fois que vous substiturez Modèle:modèle2 dans une page.

Exemple :

Imaginons que vous vouliez créer un modèle qui dise

« À l'instant où je publie cette page il est : indication de l'heure exacte »

Il existe une manipulation qui permet d'indiquer l'heure au moment de la publication, il s'agit de {{subst:CURRENTTIME}}.

Utilisons pour notre exemple le modèle Modèle:Bac à sable et Aide:Bac à sable :

À l'instant où je publie cette page il est : {{<includeonly>subst:</includeonly>CURRENTTIME}}

Grâce à l'imbrication de {{<includeonly>subst:</includeonly>CURRENTTIME}} dans Modèle:Bac à sable, vous obtiendrez ce que vous désirez dans Aide:Bac à sable ! Si vous n'aviez pas « cassé » {{subst:}}, le modèle {{CURRENTTIME}} se serait substitué dans Modèle:Bac à sable : vous auriez eu l'heure de publication de la page Modèle:Bac à sable et non celle de la page Aide:Bac à sable.

Annexes[modifier | modifier le code]