Aide:Modèle/FAQ

Un article 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.

Sommaire

[modifier] Général

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

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.

[modifier] Où se trouvent les modèles ?

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.

[modifier] Utiliser un modèle

[modifier] Comment utiliser un modèle ?

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.

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

Les usages les plus courants sont :

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

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

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

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.

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

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).

[modifier] Créer un modèle

[modifier] Comment fabriquer un nouveau modèle ?

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

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

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.

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

Voici une version minimale de modèle bien structuré :

<includeonly><!--

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

--></includeonly><noinclude>

{{Documentation modèle}}

Mode d'emploi.

[[Catégorie:Catégorie décrivant le type ou la forme du modèle]]

</noinclude>

[modifier] Modifier un modèle

[modifier] Qui peut modifier un modèle ?

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 !

[modifier] Comment modifier un modèle ?

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 !

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

En codant systématiquement {{{1|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}}.

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

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

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

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

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

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

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

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

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

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.

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

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

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

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.).

[modifier] Documenter un modèle

[modifier] Comment documenter un modèle ?

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 ?.

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

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

[modifier] Problèmes fréquents

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

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}}.

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

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.

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

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.

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

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.

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

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.

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

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>.

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

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>.

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

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

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

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).

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

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.

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

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}}.

[modifier] {{subst:REVISIONID}} ne fonctionne pas

C'est un bogue de MediaWiki (bogue n° 6181). Il n'y a pas d'autre solution pour l'instant que d'aller chercher le numéro de version d'une page dans le lien « Adresse de cette version » de la boîte à outils (c'est le nombre qui suit « oldid= ») puis de l'insérer à la main.