Jump to content

Modèles

From mediawiki.org
This page is a translated version of the page Help:Templates and the translation is 73% complete.
Outdated translations are marked like this.
PD Note : si vous modifiez cette page, vous acceptez de placer votre contribution sous licence CC0. Plus d’informations sont disponibles sur le projet Aide dans le domaine public. PD

Si vous avez des textes standards que vous voulez inclure sur plusieurs pages, les modèles (templates) de MediaWiki peuvent vous aider. À la différence des extensions et des fichiers multimédia, il n'y a pas de lieu centralisé pour le stockage des modèles. Les modèles peuvent être écrits ex nihilo ou bien, pour récupérer un travail déjà effectué, ils peuvent être exportés d'un autre wiki (par exemple Wikipédia) puis importés dans le wiki cible. Templates can be newly written or, to save duplicating work already done, exported from another wiki e.g. Wikipedia, and then imported into the target wiki.

Basic usage

Les modèles sont des pages wiki standard dont le contenu est conçu pour être transclus (inclus) à l'intérieur d'autres pages. Par convention le nom des modèles doit avoir le préfixe "Template:", qui l'assigne à cet espace de noms  en plus de cela, vous pouvez les créer comme n'importe quelle autre page wiki.

To transclude a template, you used double open & close curly brackets {{template name}}.

L'utilisation la plus simple des modèles est la suivante. Si vous créez une page nommée « Template:Bienvenue » avec pour contenu :

Bonjour ! Bienvenue sur le wiki.

vous aurez créé votre premier modèle ! Si vous insérez ensuite le code :

{{Bienvenue}}

sur n'importe quelle autre page, le texte "Bonjour ! Bienvenue sur le wiki." apparaîtra à la place de {{Bienvenue}} quand cette page sera visualisée. Le contenu du modèle est « transclus » dans l'autre page, c'est-à-dire qu'il est intégré dans la page.

Vous pouvez ensuite insérer {{Bienvenue}} à n'importe quel endroit de n'importe quelle page où vous voulez souhaiter la bienvenue à quelqu'un. Supposez qu'il soit utilisé dans 100 pages. Si vous changez ensuite le contenu du modèle par :

Salut ! Bienvenue sur ce merveilleux wiki.

et si vous revisitez n'importe laquelle des 100 pages où le modèle est utilisé, vous verrez le nouveau texte à la place de l'original. De cette façon, vous avez changé le contenu de 100 pages sans les avoir éditées, parce que le modèle est transclus dans ces pages.

C'est le mécanisme de base. Plusieurs fonctionnalités supplémentaires de transclusion enrichissent ce mécanisme et rendent les modèles très utiles.

Ways to invoke a template

Les modèles peuvent être utilisés dans d'autres pages de plusieurs manières :

  • {{Nom du modèle}} : comme montré plus haut, ce lien est remplacé de manière dynamique par le contenu de la page "[[Template:Nom du modèle]]" en cours au moment où la page avec le lien est chargée. Mais le lien reste inchangé dans la page source. Parce que l'appel du modèle reste dans le source des pages, toute modification ultérieure faite à Template:Name est vue de la page contenant l'appel du modèle. Egalement, la page sera listée parmis les pages (link to) qui appellent le modèle.
  • {{subst:Nom du modèle}} — avec cette notation, le lien est remplacé une fois pour toutes par le contenu de la page [[Template:Nom du modèle]] au moment où vous enregistrez la page avec le lien : une copie du contenu de [[Template:Nom du modèle]] sera insérée à la place du lien vers le modèle. Le contenu du modèle devient alors un élément à part entière de la page qui l'inclut, et peut être modifié normalement, indépendamment de l'original.
    Les changements ultérieurs effectués dans le modèle ne seront plus propagés sur votre page par le lien.
    C'est à dire une copie du contenu de Template:Name sera substitué par l'appel du modèle. Aucun lien n'est maintenu entre la page et le modèle, ce qui permet ensuite de les mettre à jour séparément sans interférence. En effet, il existe une petite différence entre substituer le contenu de cette manière et le saisir simplement à la main dans le source de la page. See Aide:Substitution for more information.
  • {{safesubst:Nom}} — ceci a été introduit pour permettre la substitution récursive dans les cas où des modèles contiennent des appels à d'autres modèles ou fonctions d'analyse. Voir Aide:Substitution pour plus d'informations.
  • {{msgnw:Nom}} - ceci présente le modèle de telle manière que le contenu du modèle s’affiche en syntaxe wiki brute (comme le fait ‎<nowiki>) quand la page qui le contient est visualisée. For example, {{msgnw:Template:Thankyou}} displays:

<noinclude> <languages/> </noinclude> '''Un petit remerciement...''' pour {{{reason|{{{1}}}}}}. bises, {{{signature|{{{2}}}}}} <noinclude> [[Category:Template examples{{#translation:}}|{{PAGENAME}}]] </noinclude>.

En fait, une page ordinaire du wiki peut être utilisée comme un modèle, simplement en spécifiant l'espace de nom où elle se trouve, et donc :

  • {{Template:Nom de la page}} transclut la page nommée Modèle:Nom de page (équivaut à {{Template:Nom de la page}})
  • {{Talk:Nom de la page}} transclut la page nommée Discussion:Nom de la page
  • {{:Nom de la page}} inclut [[Nom de la page]]
    • {{subst::Nom de la page}} est remplacé par le contenu de [[Nom de la page]]

Si un tel espace de noms n'existe pas, le titre complet est considéré comme étant un modèle :

  • {{Foo:Bar}} transclut Modèle:Foo:Bar

Regardless of what syntax is used, the name of the template can be relative to the current page For example, if {{/bar}} is called on page foo, it will transclude the page foo/bar.

It can also be generated dynamically. For example, {{ {{foo}} }} calls Template:foo and interprets the result as the name of another template to call.

Paramètres

Pour enrichir le mécanisme de transclusion, Mediawiki permet de passer des paramètres à un modèle lorsqu'il est transclus. Les paramètres permettent au modèle d'afficher des contenus différents ou d'avoir des comportements différents.

Supposons que vous vouliez insérer une petite note de remerciement sur la page de discussion d'autres utilisateurs, comme ceci :


Un petit remerciement... pour tous tes efforts. bises, Moi


La note de remerciement contiendra la raison du remerciement (dans ce cas, tous tes efforts) et une signature (Moi). Votre but est que tout utilisateur soit capable de remercier tout autre utilisateur, quel qu'en soit le motif.

Pour que la note ait la même apparence partout où elle est utilisée, vous pouvez définir un modèle appelé Template:Thankyou , par exemple. Bien que la note doive avoir la même apparence à chaque fois qu'un utilisateur remercie un autre utilisateur, son contenu spécifique (c'est à dire la raison et la signature) sera différent. Pour cela, vous devez les passer en tant que paramètres. Si on omet les autres éléments de mise en forme de la boîte et de l'image, le contenu principal du modèle sera celui-ci :

'''Un petit remerciement...'''
pour {{{1}}}.
bises, {{{2}}}

Notez l'utilisation de {{{1}}} et {{{2}}}. C'est la manière d'identifier, à l'intérieur du modèle, les paramètres qui lui sont passés lorsqu'il sera utilisé. Notez qu'à l'intérieur du modèle chaque paramètre est encadré par trois accolades : {{{ }}}. Cela diffère de l'utilisation normale d'un nom de modèle.

Quand vous utilisez le modèle sur une page, vous complétez les valeurs des paramètres, séparés par un caractère "pipe" (|). MediaWiki permet la transmission des paramètres aux modèles selon trois manières : anonymement, numéroté, et nommé.

Paramètres anonymes

Pour passer des paramètres anonymes, listez les valeurs de ces paramètres de manière séquentielle :

{{Thankyou/fr|pour tous tes efforts|Moi}}

Dans ce cas, le modèle {{Thankyou/fr}} reçoit les paramètres {{{1}}}=pour tous tes efforts et {{{2}}}=Moi, ce qui produit :


Un petit remerciement... pour tous tes efforts. bises, Moi


L'ordre de passage des paramètres anonymes est crucial pour le comportement du modèle. Inverser l'ordre des paramètres, comme ceci :

{{Thankyou/fr|Moi|tous tes efforts}}

produirait ce résultat :


Un petit remerciement... pour Moi. bises, tous tes efforts


Identifier les paramètres selon un numéro d'ordre (avec {{{1}}}, etc.) ne fonctionne qu'avec des paramètres anonymes. Tout paramètre identifié par son nom, comme montré ci-après, ne sera plus accessible dans le modèle en utilisant un numéro d'ordre.
Si le signe égal apparaît dans l'argument d'un paramètre de modèle anonyme, ce paramètre peut être interprété à tort comme un paramètre nommé (voir la description plus bas dans ce document) pour lequel le texte qui précède le signe égal est le nom du paramètre et le texte qui le suit, est la valeur de l'argument. Ce problème commun survient lorsque vous voulez inclure un lien externe ou un élément HTML avec des attributs (voir tâche T16235). Pour le contourner, employez plutôt des paramètres nommés, voire des paramètres numérotés comme expliqué dans la section suivante.

Paramètres numérotés

Pour passer des paramètres numérotés, identifiez chaque paramètre quand vous le passez :

{{Thankyou/fr|2=Moi|1=ton amitié}}

Cette fois, le modèle {{Thankyou/fr}} reçoit comme paramètres {{{1}}}=ton amitié et {{{2}}}=Moi, même s'ils ont été fournis dans l'ordre inverse, et produit le résultat :


Un petit remerciement... pour ton amitié. bises, Moi


Ceci peut être également utile quand un des paramètres numérotés contient un signe «  =  » .
Exemples
{{Thankyou|1=ajouter “=”|2=Moi}}

produit


Un petit remerciement... pour ajouter “=”. bises, Moi

Avertissement Avertissement : Ceci nécessite également de numéroter chacun des autres paramètres.

Paramètres nommés

La troisième façon de passer des paramètres est d'utiliser des noms, à la place de nombres. Dans ce cas, le contenu du modèle deviendrait :

'''Un petit remerciement...''' pour {{{reason}}}. bises, {{{signature}}}

Dans le modèle, on utilise {{{reason}}} et {{{signature}}} pour identifier chaque paramètre, au lieu des numéros. Pour passer ces paramètres par leur nom, identifiez chaque paramètre lorsque vous le passez :

{{thankyou/fr|signature=Moi|reason=être toi-même}}

Dans ce cas, le modèle {{Thankyou/fr}} reçoit les paramètres {{{reason}}}=être toi-même et {{{signature}}}=Moi et produit le résultat :


Un petit remerciement... pour être toi-même. bises, Moi


Les paramètres nommés sont sensibles à la casse, donc :

{{Thankyou/fr|signature=Moi|Reason=être moi-même|reason=being case-sensitive}}

produit :


Un petit remerciement... pour being case-sensitive. bises, Moi


L'avantage d'utiliser des paramètres nommés dans votre modèle, en plus d'apporter une flexibilité quant à l'ordre dans lequel on peut passer les paramètres, est que le code du modèle est beaucoup facile à comprendre s'il y a beaucoup de paramètres.

Spaces and newlines are automatically stripped from the start and end of named parameter names and values, but are preserved in unnamed parameters.

Mixing named and unnamed parameters

If the template supports it, both kinds of parameters can be used in one call.

For example, {{Thankyou|supporting both parameter types|signature=Me}} results in:


Un petit remerciement... pour supporting both parameter types. bises, Me


Be careful when doing this, because it can result in conterintuitive results as unnamed parameter counts are based only on the unnamed parameters, not the named parameters. For example, {{Thankyou|Me|reason=supporting both parameter types}} results in:


Un petit remerciement... pour supporting both parameter types. bises, {{{2}}}


The template is coded to prefer the named parameter for the reason over the unnamed parameter, resulting in the "Me" being lost and no signature being given. This results in a default value of {{{2}}} being shown, as explained below.

Valeurs par défaut

Si vous incluez un modèle qui attend des paramètres, mais sans lui fournir leurs arguments, comme ici :

{{Thankyou/fr}}

dans l'exemple des paramètres numérotés ci-dessus vous obtiendriez ce qui suit :


Un petit remerciement... pour {{{1}}}. bises, {{{2}}}


À partir du moment où aucun argument n'a été passé au modèle, ce dernier affiche les paramètres eux-mêmes, au lieu de leurs valeurs respectives. Dans ce cas, il serait plus utile de définir des valeurs "par défaut" pour les paramètres, c.à.d des valeurs qui seront utilisées si aucune valeur n'est fournie. Par exemple, si le contenu du modèle est changé pour :

'''Un petit remerciement...'''
pour {{{reason|tout}}}.
bises, {{{signature|Moi}}}

alors {{{reason|tout}}} définit que si aucun argument n'est fourni pour le paramètre {{{reason}}}, alors la valeur toutsera utilisée. De même, le paramètre {{{signature|Moi}}} fait que la valeur par défaut de {{{signature}}} est Moi. Maintenant, inclure le modèle à nouveau et sans passer d'argument donnera le résultat suivant :


Un petit remerciement... pour tout. bises, Moi


La valeur du paramètre peut être une chaîne vide. Par exemple, dans {{foo|bar=}} ou {{foo|bar=|baz=qux}}, le modèle foo considère que le paramètre bar vaut "". C'est différent du cas où les paramètres sont tous omis, ce qui les laisse à des valeurs non définies et déclenche le mécanisme des valeurs par défaut décrit ci-dessus.
If you need to treat an empty string the same way as a missing parameter, you can use a conditional operator through an extension like ParserFunctions. For instance, {{#if:{{{1|}}}|{{{1|}}}|undefined}} returns undefined if the parameter is either undefined or empty, while {{{1|undefined}}} does so only if the parameter is undefined.

Souvent les valeurs par défaut sont utilisées pour préciser les noms alternatifs des paramètres. Par exemple, si vous avez {{{a|{{{b|}}} }}}, le modèle cherchera d'abord un paramètre qui s'appelle « a ». S'il n'est pas renseigné, il utilisera le paramètre « b  ». Si ni « a » ni « b » ne sont renseignés, il ne produira rien.

Passing parameters to other templates

If raw parameter syntax is generated by the above template call, and then passed through to another template, it is not interpreted as a parameter. This means that {{Thankyou2 }}, which just calls {{Thankyou }} with no parameters, does not work: {{thankyou2|everything|me}} -> Un petit remerciement... pour {{{1}}}. bises, {{{2}}} .

You instead need to explicitly pass the parameter to the other template, i.e if {{Thankyou3 }} contains

{{thankyou|{{{1}}}|{{{2}}}}}}

then {{thankyou3|everything|me}} -> Un petit remerciement... pour everything. bises, me } works properly.

This example does not preserve emptiness vs. undefinedness in parameter values - you would need more complicated syntax if you wanted to do that.


Empty vs undefined parameters

The {{t2demo|| a }} (refer to {{T2demo }} ), with a double pipe, sets the first parameter to an empty string instead of leaving it undefined. It produces the output start--middle- a -end, similar to how {{t2demo|1=|2= a }} results in start--middle- a -end. On the other hand, explicitly setting the parameter "2" to "a," results in the first unnamed parameter being left undefined:

{{t2demo|2= a }} results in start-{{{1}}}-middle- a -end

If the second parameter should not be trimmed, it must be unnamed.

Therefore, you can assign an empty string to the first parameter, but you cannot leave it undefined.

Making emptiness and undefinedness equivalent

Good template coding practices result in passing an empty string to a parameter working the same as not assigning any value. This makes things easier and more consistent.

For example, using p= can show that a template has a parameter "p" that doesn't have a value yet.

To make an empty string and an undefined value equivalent, use the following approaches:

  • Use {{{p|}}} exclusively instead of {{{p}}} or q where "q" is a non-empty value.
  • Use conditional checks like {{#if:{{{p|}}}|..{{{p}}}..|..}}, to ensure {{{p}}} is only used when it has a value.

If for some reason you want to treat undefined parameters differently from empty parameters or any other possible value you can compare the same parameter twice with different defaults, i.e {{#ifeq:{{{foo|bar}}|{{{Foo|baz}}}|parameter is undefined|parameter is defined}}.

Using equals signs in unnamed parameters

Unnamed parameters can include equals signs, but this must be done indirectly. Here are some methods using template:T1demo:

Default Value for Undefined Parameter

Assign a default value to an undefined parameter:

{{T1demo|{{{1| a=b }}}}}

This renders as: start a=b end.

Using the {{=}} parser function

Use a parser function that safely includes an equals sign:

{{T1demo| a{{=}}b }}

This renders as: start a=b end.

HTML Entities

Replace the equals sign with an HTML entity for display:

{{T1demo| a=b }}

This renders as: start a=b end.

This renders correctly without affecting the other parameters.

Handling unmatched curly and square brackets

Unmatched curly brackets ({{, }}) or square brackets ([[, ]]) must be inside nowiki tags or use HTML entities:

  • Rendering curly brackets have two options:
    • Use <nowiki>{{</nowiki> or &#123; for {
    • Use <nowiki>}}</nowiki> or &#125; for }.
  • Use &#91; for [ and &#93; for ].

Below are some examples:

Unmatched curly brackets
{{T1demo| <nowiki>{{</nowiki>content<nowiki>}}</nowiki> }}

This correctly renders the braces without breaking the template.

Unmatched square brackets
{{T1demo| text [link] more text }}

This correctly renders the braces without breaking the template.

This renders as: start text [link] more text end

Unmatched pairs not placed in nowiki tags either prevent template expansion or are taken as closing braces for the template call.

Below are some examples:

{{T1demo|abc]]def[[ghi}}

This will not expand correctly because of unmatched brackets.

The correct use:

{{T1demo|abc<nowiki>]]</nowiki>def<nowiki>[[</nowiki>ghi}}

This renders as: startabc]]def[[ghiend

Template-generated brackets

An alternate technique for passing arguments with unmatched brackets is to wrap them in another template. In that situation, (which exists with {{(( }} and {{)) }}) on this wiki), the unmatched brackets will be rendered literally, and not decoded as another template call. For example:

{{t1demo|{{((}}t1demo{{))}}}}

results in: start{{t1demo}}end

When substituting a template, template inclusions are parsed once when the subst happens (with the same caveats explained above) and then a second time when rendering the resulting wikitext. For example:

{{subst:((}}t1demo|foo}}

will expand on save to:

{{((}}t1demo|foo}}

which will then render as:

startfooend

If the wikitext generated via the first subst itself includes "subst:" syntax it will not be processed on the same save, but may be on the next save. This technique may be used to implement recursive substitutions that take multiple saves to evaluate.

Using pipes in parameter values

A parameter value cannot contain a pipe character (|), because it would be interpreted as the end of that parameter and the start of the next parameter. This can be worked around by using the parser function {{!}}, or the HTML entity &124;. The two methods of doing this have slightly different behavior, which can be relevant in some corner cases like when a template is producing wikitable syntax.

Example: {{T1demo|abc|def}} produces: startabcend

The "def" doesn't display because it is treated as part of another unnamed parameter, which the template does not use.

{{T1demo|abc{{!}}def}} produces: startabc|defend

The "def" displays properly.

{{T1demo|abc|def}} produces: startabc|defend

The "def" displays properly again.

Formatting template calls using extra parameters

Since templates ignore parameters they are passed but do not handle specifically, they can be used as a way of a adding extra whitespace or unused content to the template call.

For example:

{{template name|foo|bar|baz|mumble|quux}}

is equivalent to, assuming the template doesn't recognize SPACEN as a parameter name:

{{template name|SPACE1=
|foo|SPACE1=
|bar|SPACE2=Random stuff
|baz|SPACE3=
   |mumble|SPACE4=
  quux
}}

It is also possible to use the same name for each spacer (often the empty string), but this will populate Category:Pages using duplicate arguments in template calls, which many wikis prefer to keep empty to catch instances of user error.

This can be used to make the template render in a way similar to its output, like showing each row of w:Template:Chess position on its own like to make the wikitext also look like a chessboard.

Tracking parameter usage


It may be wise for a template to add a link or category to a page if a certain parameter or combination of parameters is used, to make if possible to easily determine what pages are using a given parameter, and thus what the impacts of changing that parameter in the template would be.

Évaluation

Ceci est un sujet avancé que vous pouvez sauter sauf si vous en avez absolument besoin.

D'une manière générale, les paramètres des modèles sont substitués dans le modèle après l'attribution des marques (tokenization). Ils ne sont pas évalués tant qu'ils ne sont pas utilisés.

Ceci a quelques conséquences.

  1. D'abord si vous avez un Template:Start contenant {{mytemplate, et un Template:End contenant |foo=bar}}, et que vous mettez {{start}}{{end}} sur une page, mytemplate ne sera pas transclus car les éléments tels que "|" ne peuvent pas être ajoutés par un modèle et ils conservent leur signification spéciale dans les modèles. Vous pouvez toujours utiliser les modèles pour contrôler le nom d'un paramètre ou du modèle, mais vous ne pouvez pas répartir l'appel d'un modèle sur plusieurs modèles.
  2. La seconde conséquence de ceci est la suppression du code mort. Si vous faites l'appel d'un modèle comme {{foo|{{DISPLAYTITLE:Bar}} }}, et que Template:Foo ne contient pas {{{1}}}, alors le displaytitle n'est pas utilisé car il n'est évalué que lorsque c'est nécessaire et qu'ici aucun paramètre ne demande sa substitution, il est donc jamais évalué. Ceci se passe habituellement avec l'extension ParserFunctions, et peut être observé particulièrement quand elle est utilisée en combination avec le mot magique int: qui change avec la langue de l'utilisateur. This isn't perfect, and in some cases even if the result of expanding a template is not used (because it is part of an if statement condition, for example), the process of evaluating it can still have side effects. For example, any links produced or other templates used will still be added to Special:WhatLinksHere even if they are not displayed.


Template parameters are pass by value, which means a template cannot modify its arguments. Parameters are treated as associative array, and parameter names are evaluated before parameter values. If the same parameter name is given more than once (either as named or unnamed), only the last instace is used, and the page is added to Category:Pages using duplicate arguments in template calls.

L'appel aux modèles commençant par le mot magique subst: ou safesubst: est évalué dans une première passe indépendante qui n'apparaît qu'au moment de la sauvegarde, en même temps que ~~~~ et s'enchaîne en utilisant l'astuce des pipes '|'. S'ils ne peuvent pas être évalués durant la première passe, les appels subst: sont ignorés, et les safesubst: sont traités comme pour un modèle normal.

Beaucoup de fonctions de l'analyseur syntaxique (mais pas toutes), de l'analyseur de balises et des pages spéciales transcluses ne sont pas directement incluses comme les modèles mais sont remplacées à la place par une étiquette d'identification (strip marker). Cela signifie que vous ne pouvez pas manipuler les résultats avec les fonctions d'analyse des extensions telles que padleft: ou équivalent, parce qu'elles voient le strip marker au lieu du résultat de la fonction d'analyse.

Récursivité dans les modèles

Appeler un modèle à partir de lui-même ne bloquera pas MediaWiki sur une récursion infinie. MediaWiki arrêtera la récursivité au modèle dont le nom figure en gras. Par exemple, si le contenu de Template:Aaaa est a {{Aaaa}} z, il sera montré "a a Template loop detected: Template:Aaaa z z".

Cette sauvegarde exclut un nom de modèle potentiellement utile où un modèle auto-normalise ses propres arguments d'appel. Dans cet exemple interdit template:d peut être appelé soit {{d|20200311}} soit {{d|y=2020|m=3|d=11}}. S'il est appelé de la première façon, il revient sur lui-même avec la deuxième structure d'argument (obtenue à l'aide de fonctions d'analyseur de chaînes), qui suit ensuite un chemin de traitement unifié.

{{#if:{{{1|}}}|{{d|y={{#sub:{{{1}}}|0|4}}|m={{#sub:{{{1}}}|4|2}}|d={{#sub:{{{1}}}|6|2}}}}|<!-- processing path with arguments y,m,d regardless of original call pattern -->}}

Si template:d est modifié pour se récurser en template:d/2 et template:d/2 est une copie manuelle identique de template:d, cet idiome fonctionne bien car la protection d'auto-récursivité fonctionne de manière dynamique et non statique.

Un moyen possible pour le logiciel MediaWiki d'assouplir la règle d'auto-récursivité serait d'exiger que chaque appel récursif ait un nombre d'arguments distinct de tous les appels actifs précédents, récurrent au plus une fois, avec le nombre d'arguments non décroissant. Cela fournirait une garantie solide contre l'auto-récursivité infinie tout en permettant des idiomes utiles tels que celui décrit ici de manière flexible.

Si la séquence de traitement est de faible complexité, une simple solution en utilisant seulement un seul modèle est de gérer chacune des conventions d'appel dans une branche séparée if/else, en dupliquant la logique du traitement à l'intérieur de chaque cas. Si la séquence de traitement est trop complexe, chaque cas de structure d'appel peut être délégué à un modèle d'implémentation avec une structure d'appel unifiée fournissant le comportement final du modèle.

Tableaux dans les paramètres

Parce que la barre verticale (|) et le signe égal (=) ont différentes significations dans l'appel des modèles et les tables wiki, pour utiliser le balisage des tables comme valeur de paramètre de modèle, on a généralement recours à l'échappement de ces caractères (pour empêcher qu'ils ne soient interprétés comme balisage du modèle) en utilisant des séquences spéciales :

  • le mot magique embarqué {{!}} fournit une version échappée de | depuis MediaWiki 1.24
  • le mot magique embarqué {{=}} fournit une version échappée de = depuis MediaWiki 1.39

Avant l'introduction de ces mots magiques, beaucoup de wikis utilisaient les modèles pour accomplir les mêmes choses. Sur un tel wiki, les mots magiques prévalent sur les modèles ayant le même nom.

Tableau d'exemple

A B C
A1 B1 C1
A2 B2 C1

Code de la table :

{| class=wikitable
!A!!B!!C
|-
|A1||B1||C1
|-
|A2||B2||C1
|}

Code échappé, de la table :

{{{!}} class{{=}}wikitable
!A!!B!!C
{{!}}-
{{!}}A1{{!}}{{!}}B1{{!}}{{!}}C1
{{!}}-
{{!}}A2{{!}}{{!}}B2{{!}}{{!}}C2
{{!}}}

Notez que la première accolade ouvrante ({) est interprétée comme un caractère littéral parce qu'elle est immédiatement suivie du mot magique {{!}}. De manière équivalente, la dernière accolade fermante (}) et interprétée comme un caractère littéral car elle est immédiatement précédée du même mot magique. Néanmoins, dans certains cas ces caractères accolades causent réellement des problèmes, et quelques wikis fournissent des modèles pour échapper ces caractères, comme :

  • l'appel du modèle {{(}} pourrait fournir une version échappée de {
  • l'appel du modèle {{)}} pourrait fournir une version échappée de }

Certains wikis vont même plus loin et fournissent d'autres modèles pratiques comme {{(!}}, {{!)}}, {{!!}}. Sur un tel wiki, le code peut être un peu simplifié sous cette forme :

{{(!}} class{{=}}wikitable
!A!!B!!C
{{!}}-
{{!}}A1{{!!}}B1{{!!}}C1
{{!}}-
{{!}}A2{{!!}}B2{{!!}}C2
{{!)}}

Contrôler l'inclusion des modèles

Par défaut, le contenu d'un modèle est affiché intégralement, qu'il soit affiché directement ou qu'il soit inclus dans une autre page. Cependant, vous pouvez contrôler quelle partie du modèle sera vue et incluse en utilisant les balises $noinclude, $includeonly et $onlyinclude.

The template's page when viewed directly appears exactly as the template would render without any parameters. If the template requires parameters to function properly, this will result in raw wikitext syntax or errors as a result of them being missing.

However, you can control which parts of a template will be seen and included by the use of the ‎<noinclude>, ‎<includeonly> and ‎<onlyinclude> tags.

Tout ce qui est contenu entre ‎<noinclude> et ‎</noinclude> est affiché uniquement sur la page du modèle lorsqu'elle est affichée directement, mais pas lorsqu'elle sera incluse dans une autre page. Ceci est utile lorsque vous désirez inclure du texte ou du code dans un modèle, sans que ces éléments ne soient propagés sur les pages appelant le modèle, comme par exemple :

  • liens de catégorie pour la catégorisation du modèle lui-même
  • des liens interwikis pour les modèles similaires dans d'autres langues
  • texte d'explication sur l'utilisation du modèle

De manière équivalente, tout ce qui est contenu entre ‎<includeonly> et ‎</includeonly> sera pris en compte et affiché uniquement quand la page est incluse, et non pas quand la page du modèle est affichée directement, ceci est utile dans des situations telles que :

  • la catégorisation des pages qui incluent le modèle. Remarque : quand vous modifiez de cette manière les catégories appliquées à un modèle, la catégorisation des pages qui incluent ce modèle peut ne pas être mise à jour immédiatement. Ceci est géré par la file des travaux . Pour forcer la re-catégorisation d'une page particulière, ouvrez cette page pour la modifier et enregistrez-la sans rien changer.
  • le fait de s'assurer que le code du modèle n'est pas exécuté lors de la lecture de la page même du modèle. Habituellement, c'est parce que ce code attend des paramètres et que son exécution sans paramètres produit un résultat inattendu.

Tout ce qui est en dehors des balises ‎<noinclude> et ‎<includeonly> est pris en compte et affiché normalement, que ce soit sur la page même du modèle qui est affiché, ou sur une page où ce modèle est inclus. Le focus concerne ce qui se trouve entre ces deux balises.

Tout ce qui se trouve à l'extérieur des balises ‎<onlyinclude> n'est pas pris en compte pour l'inclusion. Même les sections balisées includeonly sont exclues de l'inclusion à moins qu'elles ne soient également balisées onlyinclude. Le focus concerne ce qui se trouve à l'extérieur de cette balise.

For example, if a page like Help:Templates/onlyinclude demo has the wikitext:

abc<onlyinclude>def</onlyinclude>ghi<includeonly>jkl</includeonly>

The result of transcluding it is def.

Il est aussi possible d'imbriquer ces balises.

Les trois balises d'inclusion partielles autorisent toutes les combinaisons possibles de ce qui est traité et mis en forme. Les commentaires jouent aussi un rôle. Inclusion tags are respected when using {{subst:templatename}}, but they are not respected when using {{msgnw:templatename}} as that displays the raw wikitext without any processing.

Section transclusion

To transclude different sections of a template on different pages, you can wrap the content in onlyinclude tags and use an if statement on parameters to select which section.

Consider "Template:Example" with this wikitext:

== Section 1 ==
{{#ifeq:{{{1|1}}}|1|
Content of section one.
}}
{{#ifeq:{{{1|1}}}|1|
== Section 2 ==
Content of section two.
}}

This will render both sections on the example page itself, and allow other pages to transclude the first section with {{example|1}} and the second section with {{example|2}}.

Another approach is to use literal parameter syntax instead:

{{{section1|
== Section 1 ==
Content of section one.
}}}
{{{section2|
== Section 2 ==
Content of section two.
}}}

Transclude the first section with {{example|section2=}} and the second section with {{example|section1=}}. If neither parameter is used, then both sections will display.

A third approach is to use Labeled Section Transclusion.

Organiser les modèles

Pour que les modèles soient utiles, les utilisateurs doivent les trouver et savoir comment les utiliser.

Pour les trouver, les utilisateurs peuvent :

  1. cliquer sur Pages spéciales > Toutes les pages
  2. dans la liste des Espace de noms :, choisir Modèle et cliquer sur Lister.

Pour donner des informations sur l'utilisation, incluez un exemple comme celui-ci sur la page du modèle :

 
<noinclude> 
== Utilisation == 
Remercier les utilisateurs :
{{Thankyou/fr|reason=votre raison|signature=votre signature}} </noinclude>

Ainsi, un utilisateur peut simplement copier et coller l'exemple pour utiliser le modèle.

Durant la modification d'une page, une liste de tous les modèles utilisés est disponible sous le formulaire d'édition, dans une section repliable intitulée Modèle utilisé par cette page : (appelée aussi Modèle utilisé dans cette prévisualisation :, ou Modèle utilisé dans cette section : en fonction du contexte). Cette liste fournit un lien pratique vers la page du modèle, ainsi que des informations sur l'état de protection. Les modèles redirigés sont affichés en italiques, avec la cible de la redirection ajoutée comme élément de liste séparé.

Faire un lien vers un modèle

Il est possible de faire un lien vers une page de modèle comme pour n'importe quelle autre page du wiki. Par exemple, le lien Template:Navbar est généré en utilisant le code wiki [[Template:Navbar]].

Sur de nombreux wikis, Template:Tl peut être utilisé pour fournir un lien vers un modèle mis en forme de manière à montrer le code entre « double accolades » nécessaire pour transclure le modèle, sans réaliser la transclusion. Par exemple, le code {{tl|Navbar}} peut être utilisé pour créer le lien {{Modèle:Navbar }}.

Cette construction est couramment utilisée dans les pages de documentation des modèles, sur les pages d'aide, et sur les pages de discussion lorsqu'il est fait référence aux modèles. Le même objectif peut être atteint en utilisant {{[[Template:Navbar|Navbar]]}}, mais l'approche utilisant le modèle {{Tl }} est plus simple à saisir au clavier. Sur n'importe quel wiki, le modèle Tl s'il est défini, peut ou pas, effectuer le rendu du texte encadré par les balises « code », ou avec un type à largeur fixe. Si ce n’est pas le cas (comme sur ce wiki), il devrait exister un autre modèle avec un nom similaire pour réaliser la même chose. Voir, par exemple, la section « Voir aussi » de notre documentation du modèle Tl.

Template naming

The name of a template is case-sensitive excluding the first character.

You make redirects for alternate capitalizations. For example, if a template is named "AdminAbbr", you can create a redirect named "Adminabbr". This way, the template can be called with either {{AdminAbbr}} or {{adminabbr}}. If an editor prefers a mix of upper and lower case for clarity, they can use functions like lc or uc. For instance, instead of {{CURRENTINTERNETTIME}}, they could use {{ {{uc:CurrentInternetTime}} }}

Because template names are interpreted in the same way to the names of other pages, underscores are replaced with spaces, and any text after a number sign (what would be a anchor in a standard link) is ignored.

An underscore _ can be alternative to a blank space.

Possible uses of templates

Templates can be used for any situation in which one wants two or more pages to contain identical or similar content that is edited together rather than independently. They can be used to:

  • Provide structured elements on many pages, like infoboxes, maintenance templates, navigational boxes, etc.
  • Perform calculations used as a programming tool on various pages, like w:Template:Sum.
  • Build composite pages that display the content of multiple existing pages together, like w:WP:Village pump (all) which includes content from each section of the village pump. The content of these pages can either be shown individually, or together, but the revision history, watchlist, etc. will only pick up changes to the transcluded pages and the raw wikitext of the composite page itself, not implicit changes to the composite page.
  • Share some content between a few related pages. For example, the list at Help:Preferences#Beta features is duplicated at Beta Features#Current Beta Features. While on MediaWiki.org that is built using Extension:LabeledSectionTransclusion instead, it could have been done using a template.
  • Store content referenced multiple times on the same page, so it only has to be written and calculated once. For example w:Template:Cite Monumentenregister/URL is called twice by w:Template:Cite Monumentenregister in two different places, and using another template means the URL pattern only has to be written once in the base template.
  • Use templates as a programming element to generate a loop: if Template:A calls Template:B 10 times with different parameters, then that crudely simulates a for loop. If Template:B calls Template:C 10 times, then you have a nested loop of 100 calls of Template:C. But keep in mind that it is easy to run into the template limits when using templates as advanced programming constructs, and using Scribunto is generally clearer and easier to follow.

Copier d'un wiki vers un autre

It is possible, if allowed by the wiki configuration to transclude templates from other wikis. This configuration setting is disabled on Wikimedia wikis. Otherwise, you need to manually copy the template and its dependencies from the source wiki to the destination wiki to use it.

Les modèles requièrent parfois du CSS ou d'autres modèles, les utilisateurs ont parfois des problèmes lorsqu'ils copient les modèles d'un wiki à un autre. Les étapes ci-dessous doivent fonctionner avec la plupart des modèles :

Code MediaWiki

Si vous avez les droits d'importation (et en particulier importupload) sur le wiki cible :

  1. Allez à Special:Export sur le wiki original, et téléchargez un fichier .XML avec l'historique complet de tous les modèles nécessaires, comme ceci :
    • Entrez le nom du modèle dans la grande zone de texte, par exemple "Modèle:Bienvenue". Faites très attention à la casse et aux caractères spéciaux - si le nom du modèle n'est pas correctement entré, l'export aura bien lieu mais le fichier .XML ne contiendra pas les données attendues.
    • Sélectionnez la case « Inclure les modèles ».
    • Sélectionnez la case «  Exporter uniquement la version courante, sans l’historique complet ».
    • Cliquez sur « Exporter » .
  2. Allez à Special:Import sur le nouveau wiki et téléversez le fichier XML.

Si vous n'avez pas les droits d'importation sur le wiki cible :

  1. Allez sur le modèle que vous voulez copier du wiki source. Allez sur la page de modification, et copier tout le code wiki.
  2. Sur le nouveau wiki, allez sur la page de même nom que celui du modèle que vous avez copié. Cliquer sur créer ou modifier et coller le code copié. Dans le résumé d'édition de chaque modèle, liez à la page originale pour l'attribution des droits.
  3. De retour sur le wiki original, en dessous de la boîte d'édition, regardez la liste des modèles utilisés dans cette page. Pour chaque modèle listé, suivez ces mêmes instructions d'importation. Faites de même pour les modèles utilisés par ces modèles, et ainsi de suite.

Cette procédure va copier entièrement le code nécessaire, et sera suffisante pour certains modèles. Notez-bien que ne sont exportés que les éléments de page analysés pour le rendu de la page, donc les sous-pages de documentation ne sont pas exportées car elles ne font pas partie du processus. Si ça ne marche pas, vérifiez aussi qu'il n'y a pas de liens rouges sous pages incluses dans la version actuelle de cette page, au dessous de la boîte d'édition. Si il y en a, répétez les étapes ci-dessus pour chacun des liens corrigés et recopiez aussi le code dans les modules.

Après avoir importé correctement le modèle et ses modèles liés depuis d'autres wikis, modifiez-le pour le personnaliser et l'adapter à votre wiki. Par exemple pour changer un logo, pour enlever les catégories redondantes ou faire disparaître les liens rouges.

Extensions

ParserFunctions est une extension souvent utilisée dans les modèles. Allez sur Aide:Extension:Fonctions d'analyse et vérifiez si, parmi les fonctions affichées, certaines sont utilisées dans les modèles que vous avez copiés. Si c'est le cas, vous devez installer l'extension ParserFunctions . Pour l'installer, vous avez besoin de l'accès administrateur système au serveur de votre instance de MediaWiki.

Une autre dépendance qui peut être utilisée dans les modèles, notamment ceux de Wikipédia, est Lua. La présence de {{#invoke: }} dans le code des modèles est un bon indice de son utilisation. Dans le cas où il est utilisé, vous devez installer l'extension Scribunto et il faut avoir également l'accès administrateur. Voir cette page pour les instructions détaillées concernant l'installation et l'usage de l'extension.

Code CSS et JavaScript

En plus du code MediaWiki, beaucoup de modèles font usage du CSS et certains emploient le JavaScript pour fonctionner. Si les modèles copiés n'ont pas le comportement attendu, cela pourrait venir de cela. Pour copier le CSS et le JavaScript requis sur votre wiki, vous devez normalement avoir besoin des droits d'administrateur, car vous aurez à éditer les messages système dans l'espace de noms « MediaWiki: ».

  1. Recherchez l'utilisation de classes CSS dans le texte de votre modèle (ex : class="foobar"). Si ces classes apparaissent dans « MediaWiki:Common.css » ou « MediaWiki:Monobook.css » sur le wiki d'origine, copiez-les dans « MediaWiki:Common.css » sur le nouveau wiki et vérifiez si le modèle fonctionne mieux.
  2. Si le modèle copié ne fonctionne toujours pas comme prévu, vérifier s'il y a du code dans « MediaWiki:Common.js » ou « MediaWiki:Monobook.js » sur le wiki d'origine. Si c'est le cas, vous pouvez essayer de le copier dans « MediaWiki:Common.js » sur le nouveau wiki. Normalement, le mieux serait de copier seulement le code issu de sources fiables, et de parcourir d'abord le code pour identifier et sélectionner les parties pertinentes. Vous devriez trouver des commentaires qui peuvent vous servir d'indice pour identifier la fonction de chaque partie.

Redirection

If a page uses a redirect as a template, the redirect is resolved before processing the template and the target is used instead. This won't work if the target doesn't exist (a broken redirect), or is itself a redirect (a double redirect).

A page that just includes another page as a template might look like a redirect, but there are several differences between them:

  • The header of the result displays the title of the page it came from.
  • No "Redirected from" message is shown.
  • Buttons like edit, watch, talk, history, "what links here," and "last modified" point to the referring page. To access the target page, use a section edit link and navigate from there.
  • Unless includeonly and/or noinclude tags are used, the referring page shares the same categories as the target page.
  • "Double redirects" work when one or both are this type of pseudo-redirect.
Embedding works on pages that support redirects and doesn't work on pages without it.

Parser functions

Page principale : Help:Parser functions

MediaWiki also supports parser functions, which function similarly to templates but follow slightly different syntax:

  • Parser functions utilize a ":" instead of the initial "|".
  • An edit page does not display parser functions used on that page.
  • There is no "What links here" feature for parser functions to identify the pages where they are utilized.
  • Parser functions templates do not generally accept named parameters, so equal signs generally have no special significance. For example:
{{ #if: not blank | x=abc }} gives x=abc

Voir aussi

Utilisation générale des modèles

Constructions spéciales utilisées dans les modèles


Autres informations relatives

Liens externes