Aide:Modèle/FAQ

Une page de Wikipédia, l'encyclopédie libre.

Cette foire aux questions sur les modèles concerne les modèles de la syntaxe de Wikipédia.

Général[modifier | modifier le code]

Un modèle en bref, c'est quoi ?[modifier | modifier le code]

C'est un moyen d'insérer du texte ou du code wiki dans une page, de manière automatisée, dynamique et configurable :

  • automatisée, parce que le modèle se charge d'inclure le texte, formaté à souhait ;
  • dynamique, parce que la modification du modèle se répercute sur chacune des pages qui inclut le modèle ;
  • configurable, parce que les modèles peuvent prendre des paramètres.

Où se trouvent les modèles ?[modifier | modifier le code]

Dans l'espace de noms « Modèle », autrement dit, le modèle appelé par {{Nom du modèle}} se trouve dans la page « Modèle: Nom du modèle ». Les modèles sont catégorisés dans l'arborescence Catégorie:Espace Modèle.

Utiliser un modèle[modifier | modifier le code]

Comment utiliser un modèle ?[modifier | modifier le code]

Un modèle d'insertion de texte s'appelle ainsi {{Nom du modèle}}. Les modèles plus compliqués peuvent prendre des paramètres {{Nom du modèle|argument|param=valeur}}. La page « Modèle: Nom du modèle » donne un mode d'emploi.

Dans quels contextes use-t-on d'un modèle ?[modifier | modifier le code]

Les usages les plus courants sont :

Peut-on renommer un modèle ?[modifier | modifier le code]

Oui, comme pour les articles, l'ancien nom devient une redirection qui continue de fonctionner.

Comment utiliser un modèle d'une autre Wikipédia ?[modifier | modifier le code]

Il n'est pas possible d'utiliser un modèle défini sur un autre projet. Il faut créer un modèle sur la Wikipédia française et y recopier le code source du modèle d'origine.

Peut-on insérer une valeur figée telle que donnée par un modèle à un moment donné ?[modifier | modifier le code]

Oui en préfixant de « subst: » le nom du modèle. Par exemple, {{subst:CURRENTDAY}} insère la valeur du jour courant au moment de la sauvegarde de la page (cette valeur ne varie plus ensuite). Au contraire, {{CURRENTDAY}} insère le jour courant au moment de la visualisation (cette valeur varie avec le temps).

Créer un modèle[modifier | modifier le code]

Comment fabriquer un nouveau modèle ?[modifier | modifier le code]

Comme pour un article, mais le nom doit commencer par « Modèle: ».

Je ne sais pas écrire un modèle dont j'ai besoin, comment dois-je m'y prendre ?[modifier | modifier le code]

Créer le modèle « Modèle: Nom du modèle » et y apposer le bandeau {{Ébauche|modèle}} ; puis expliquer les besoins dans la page de discussion attenante ; enfin, signaler votre travail au projet modèle.

De quoi partir pour écrire un modèle ?[modifier | modifier le code]

Voici deux versions minimales de modèle bien structuré :

Avec une sous-page de documentation :

<includeonly><!--

  -->Texte du modèle pouvant utiliser les paramètres {{{1}}}, {{{2}}}, {{{param}}}.<!--

--></includeonly><noinclude>{{Documentation}}</noinclude>

Sans sous-page de documentation :

<includeonly><!--

  -->Texte du modèle pouvant utiliser les paramètres {{{1}}}, {{{2}}}, {{{param}}}.<!--

--></includeonly><noinclude>

{{Documentation|contenu=

Mode d'emploi.
}}<!-- fin contenu -->
[[Catégorie:Catégorie décrivant le type ou la forme du modèle]]
</noinclude>

Modifier un modèle[modifier | modifier le code]

Qui peut modifier un modèle ?[modifier | modifier le code]

Tout le monde, comme pour les articles. Les modèles sensibles peuvent être protégés ou semi-protégés pour éviter la casse (volontaire ou non). Mais, attention, il ne faut pas modifier un modèle qu'on ne comprend pas : une erreur peut se répercuter sur toutes les pages qui l'incluent !

Comment modifier un modèle ?[modifier | modifier le code]

Comme pour un article, il suffit de modifier la page « Modèle: Nom du modèle ». Mais attention, il ne faut pas modifier un modèle qu'on ne comprend pas : une erreur peut se répercuter sur toutes les pages qui l'incluent !

Comment donner une valeur par défaut à un paramètre ?[modifier | modifier le code]

En codant systématiquement défaut​ pour le premier paramètre d'un modèle « Modèle », l'appel {{modèle}} devient équivalent à {{modèle|défaut}}. Cela marche aussi pour les paramètres nommés : préciser param|défaut​ dans le code du modèle permet d'appeler {{modèle}} au lieu de {{modèle|param=défaut}}.

Comment exécuter du code en fonction de certaines conditions ?[modifier | modifier le code]

Les fonctions d'évaluation conditionnelle #if, #ifeq, #ifexpr, #switch sont prévues pour ça.

Comment tester qu'un paramètre a été précisé par un appel du modèle ?[modifier | modifier le code]

{{#if:{{{param|}}}|code si param défini|code sinon}} teste si le paramètre a été précisé et est non vide.

Peut-on faire des calculs faisant intervenir les paramètres d'un modèle ?[modifier | modifier le code]

Oui grâce à {{#expr:formule}}. La formule comprend les quatre opérateurs et les parenthèses, les comparaisons, l'arrondi, le modulo et les fonctions booléennes « not », « or », « and ». Les calculs sont faits avec des nombres à virgule flottante.

Comment ajouter des cases à un tableau de manière conditionnelle ?[modifier | modifier le code]

Oui, avec les fonctions du parseur. Cela nécessite un certain doigté, car les |-, | ou || du tableau sont interprétés comme des séparateurs des arguments de la fonction du parseur. Il faut donc les remplacer par {{!-}}, {{!}} et {{!!}}.

Exemple :

{|
! Titre 1 !! Titre 2
|-
| 1A  !! 1B
{{#if:{{{ligne2|}}}|{{!-}}
{{!}} 2A {{!!}} 2B
}}
|}

Y a-t-il l'équivalent d'une boucle for pour répéter une instruction n fois ?[modifier | modifier le code]

Non, pas pour l'instant. Pour contourner ce problème, on définit un sous-modèle qu'on appelle n dans le modèle principal. Si n est une variable, on peut combiner avec #if ou #ifexpr pour s'assurer que seuls n appels au sous-modèles sont effectués. Voici un exemple, admettant que le paramètre n soit passé en paramètre du modèle :

<!-- boucle for :

-->{{#ifexpr:{{{n}}} > 0|{{sous-modèle}}}}<!--
-->{{#ifexpr:{{{n}}} > 1|{{sous-modèle}}}}<!--
-->{{#ifexpr:{{{n}}} > 2|{{sous-modèle}}}}<!--
-->{{#ifexpr:{{{n}}} > 3|{{sous-modèle}}}}<!--
-->{{#ifexpr:{{{n}}} > 4|{{sous-modèle}}}}<!--
-->{{#ifexpr:{{{n}}} > 5|{{sous-modèle}}}}<!--

etc. -->

Note : une extension de MediaWiki, mw:Extension:LoopFunctions, non installée sur Wikipédia, permet de le faire.

Un modèle peut-il être appelé récursivement ?[modifier | modifier le code]

Non. On ne peut même pas tricher avec un cycle de modèles s'appelant les uns les autres.

Peut-on tester si une page Wikipédia existe, est une ébauche, etc. ?[modifier | modifier le code]

La fonction parseur #ifexist permet de tester l'existence d'une page : {{#ifexist:page|existe|n'existe pas}}. Actuellement, il est impossible de tester d'autres conditions (ébauche, redirect, etc.).

Documenter un modèle[modifier | modifier le code]

Comment documenter un modèle ?[modifier | modifier le code]

Ajouter la documentation dans <noinclude>…</noinclude>. Donner un exemple, expliquer les différents paramètres s'il y a lieu et catégoriser le modèle dans des sous-catégories de Catégorie:Espace Modèle. Voir : Modèle/Comment documenter un modèle ?.

Quels sont les différents moyens de documenter un modèle ?[modifier | modifier le code]

Soit directement dans la partie <noinclude>…</noinclude>, dans laquelle on appose le modèle {{Documentation}} et on insère le texte dans le paramètre contenu ; soit dans une sous-page si la documentation est longue. Dans ce cas on appose {{Documentation}} dans la partie <noinclude>…</noinclude> et l'on rédige la documentation sur la sous-page Modèle:Nom du modèle/Documentation.

Problèmes fréquents[modifier | modifier le code]

L'argument positionnel que je donne au modèle n'est pas pris en compte[modifier | modifier le code]

Il y a parfois des problèmes lorsque cet argument comprend lui-même des appels à des modèles. (Note : le rédacteur de cette FAQ n'a toujours pas bien compris pourquoi.) Un moyen de contourner ce bogue est d'utiliser : {{test|argument 1|2=argument 2}} dans le cas où c'est le second argument de position qui pose problème.

Exemple : problème rapporté pour {{référence nécessaire}}.

Des problèmes surviennent quand on utilise les caractères = ou | dans les arguments d'un modèle[modifier | modifier le code]

Il faut utiliser les modèles {{=}} et {{!}} pour transcrire ces caractères dans les paramètres des modèles.

Note : Les caractères = et | font partie de la syntaxe du modèle : le premier pour séparer les paramètres, le second pour indiquer un paramètre nommé ; MediaWiki n'a pas les moyens de savoir qu'on veut les utiliser pour autre chose.

Je ne peux pas passer un tableau en argument de modèle[modifier | modifier le code]

Première solution : remplacer les | du tableau par {{!}}. Exemple :

{{Mon modèle|
{{(!}}
{{!+}} Légende
{{!-}}
{{!}} col. 1, l. 1 {{!!}} col. 2 l. 1
{{!-}}
{{!}} col. 1, l. 2 {{!!}} col. 2 l. 2
{{!)}}
}}</noinclude>

Deuxième solution : placer la table dans Modèle: Table et appeler {{modèle|{{table}}}}.

Troisième solution : dans certains cas on peut séparer le modèle en {{début modèle}} et {{fin modèle}} et insérer la table entre les deux. Exemple : {{boîte déroulante début}} et {{boîte déroulante fin}} au lieu de {{boîte déroulante}}.

Note : Le caractère | est interprété par MediaWiki comme un séparateur d'argument de modèle, même s'il se trouve à l'intérieur d'une table.

La modification d'un modèle ne se répercute pas sur la page qui l'inclut[modifier | modifier le code]

Il faut purger le cache de la page qui inclut le modèle. Le plus simple est d'ajouter ?action=purge à la fin de l'URL dans la barre d'adresse du navigateur.

Note : Le non rafraîchissement est un comportement normal prévu pour épargner les serveurs de la Fondation Wikimédia.

Quand on modifie une catégorie dans un modèle, les pages qui l'incluent ne sont pas recatégorisées[modifier | modifier le code]

C'est un problème de cache qui ne concerne que les modèles « catégorisants », c'est-à-dire ajoutant une catégorie dans la page qui l'inclut.

Le problème est à deux niveaux :

  1. Une simple purge du cache met à jour la liste des catégories en bas de page mais pas la liste des pages dans les catégories.
  2. Pour mettre à jour la liste des pages dans les catégories, il faut alors effectuer modification pipeau sur chacune des pages qui incluent le modèle catégorisant. On peut implorer un bot si elles sont nombreuses.

Note : La seconde partie est un bogue de MediaWiki ; la première un cas particulier du non-rafraîchissement des pages qui incluent des modèles.

L'appel au modèle inclut une partie de sa documentation[modifier | modifier le code]

Vérifier que la documentation est dans une partie <noinclude>…</noinclude>. Les erreurs fréquentes sont une coquille dans le nom de la balise, l'oubli d'une balise ouvrante ou fermante, et l'ajout de texte supplémentaire au-delà d'un </noinclude>.

Une catégorie ou un lien d'interlangue interlope est présent sur toutes les pages incluant un modèle[modifier | modifier le code]

Vérifier que la catégorie ou le lien d'interlangue est dans une partie <noinclude>…</noinclude>. Les erreurs fréquentes sont une coquille dans le nom de la balise, l'oubli d'une balise ouvrante ou fermante, et l'ajout de texte supplémentaire au-delà d'un </noinclude>.

L'appel au modèle insère des } ou des { non désirés ?[modifier | modifier le code]

Vérifier le parenthésage dans le code du modèle. Une erreur fréquente est de confondre le triple parenthésage des paramètres (param​, défaut​) avec le double des modèles spéciaux ({{#if:…}}, {{NUMBEROFARTICLES}}).

L'appel à un modèle insère des espacements non désirés[modifier | modifier le code]

Vérifier qu'il n'y a pas de sauts de ligne ou des espaces non voulus qui traînent dans le code du modèle. Des erreurs fréquentes sont : séparer les parties <includeonly>…</includeonly> et <noinclude>…</noinclude> par des espaces ou un saut de ligne ; ajouter des sauts de ligne au tout début ou en toute fin de la page en dehors du <noinclude>…</noinclude>.

Pour pallier ce problème on peut, au choix :

  • compacter l'ensemble du code du modèle à l'exception de l'intérieur du <noinclude>…</noinclude> (peu lisible mais fiable) ;
  • placer ces espaces et sauts de lignes dans des commentaires HTML <!-- … --> (lisible, mais sensible aux erreurs d'attention).

{{#if:expr|vrai|faux}} exécute toujours le code « vrai »[modifier | modifier le code]

Pour tester une valeur booléenne (c'est-à-dire « vrai » ou « faux »), il faut utiliser #ifexpr, car #if ne fait que tester si l'expression est non vide. Ainsi, {{#if:0|vrai|faux}} interprète « vrai » car la chaîne de caractères « 0 » est non vide.

La division entière div ne marche pas dans #expr[modifier | modifier le code]

La fonction parseur #expr ne gère pas l'arithmétique entière, tout est fait en nombres à virgule flottante. De fait, div est un synonyme de /. Pour effectuer une division entière, il faut recourir au modulo : {{#expr:(a - (a mod b))/ b}}.

Le modèle spécial #if évalue ma condition à vrai lorsque le paramètre n'est pas défini[modifier | modifier le code]

Il doit manquer une barre verticale (symbole : |) dans le code.

Il est tout à fait normal que la condition d'une structure {{ #if:{{{paramètre}}}| <alors texte1> | <sinon texte2> }} soit considérée, lorsque paramètre n'est pas défini, comme vraie et que <alors texte1> soit renvoyé. La raison en est simple : lorsque paramètre n'est pas défini, la chaîne {{{paramètre}}} n'est pas interprétée, et vaut donc {{{paramètre}}}, ce qui n'est ni une chaîne vide, ni une suite d'espaces. La condition est donc considérée comme vraie.

Il faut utiliser la syntaxe {{ #if:{{{paramètre|}}}| <alors texte1> | <sinon texte2> }} pour obtenir le résultat escompté.

La balise <ref> (ou autre) bloque l'interprétation d'un paramètre[modifier | modifier le code]

Un modèle défini par {{{1}}}<ref>{{{2}}}}</ref> affichera systématiquement {{{2}}} en note, ce qui n'est pas exactement ce à quoi on s'attend. C'est la balise <ref> (ou autre) qui bloque l'interprétation du paramètre. Pour que le code fonctionne, il faut utiliser le modèle spécial {{#tag:}} : {{{1}}}{{#tag:ref| {{{2}}}} }}</ref>. Le second paramètre sera alors bien interprété.

Note : ce modèle crée de vraies notes de bas de page, et non des notes de bas de modèle.