![]() | Note : si vous modifiez cette page, vous acceptez de placer votre contribution sous licenceCC0. Plus d’informations sont disponibles sur le projetAide dans le domaine public. | ![]() |
L'extensionParserFunctions fournit plusieursfonctions d'analyse syntaxique qui viennent en complément des « mots magiques » déjà intégrés dans MediaWiki.(Ellepeut être configurée pour fournir des fonctions d'analyse supplémentaires pour la gestion des chaînes de caractères ; ces fonctions sur les chaînes sont documentéesici.)Toutes les fonctions d'analyse fournies par cette extension ont la syntaxe suivante :
{{#nom_de_la_fonction:argument 1 |argument 2 |argument 3 ... }}
Type | Opérateurs |
---|---|
Regroupement (parenthèses) | ( ) |
Nombres | 1234.5 e (2.718) pi (3.142) |
Opérateur binairee Opérateurs unaires+ ,- | |
Unaires | not ceil trunc floor abs exp ln sin cos tan acos asin atan sqrt |
Binaires | ^ |
* / div mod fmod | |
+ - | |
Arrondi | round |
Logiques | = != <> > < >= <= |
and | |
or |
Cette fonction évalue une expression mathématique, et renvoie la valeur calculée.Cette fonction est également disponible dansScribunto au travers de la fonctionmw.ext.ParserFunctions.expr
.
{{#expr:expression }}
Exemple de base
{{#expr: 1 + 1}}
→2Les opérateurs disponibles sont listés à droite, par ordre de priorité. VoirManual:Expr parser function syntax pour plus de détails sur la fonction de chaque opérateur.La précision et le format du résultat renvoyé varient en fonction du système d'exploitation du serveur qui exécute le wiki et du format des nombres dans la langue du site.
Lors de l'évaluation utilisantl'algèbre de Boole, zéro équivaut àfalse
et toute autre valeur différente de zéro (positive ou négative) équivaut àtrue
:
{{#expr: 1 and -1}}
→1{{#expr: 1 and 0}}
→0{{#expr: 1 or -1}}
→1{{#expr: -1 or 0}}
→1{{#expr: 0 or 0}}
→0S'il n'y a aucune expression en entrée (ou une expression vide), la fonction renverra une chaîne vide. Toute expression invalide causera le renvoi du message d'erreur correspondant, que l'on peut capturer avec la fonction#iferror
:
{{#expr:}}
→{{#expr: 1+}}
→Expression error: Missing operand for +.{{#expr: 1 =}}
→Expression error: Missing operand for =.{{#expr: 1 foo 2}}
→Expression error: Unrecognized word "foo".L'ordre des opérandes d'additions et soustractions avant ou après un nombre est important, un signe mal placé peut ne pas être considéré comme une erreur mais comme l'indicateur que le nombre est positif ou négatif :
{{#expr: +1}}
→1{{#expr: -1}}
→-1{{#expr: + 1}}
→1{{#expr: - 1}}
→-1Notez que si vous utilisez la sortie de mots magiques, vous devez les formater en brut afin de supprimer les virgules et de traduire les chiffres.Par exemple, {{NUMBEROFUSERS}} donne 18 137 925, où nous voulons 18137925, qui peuvent être obtenus en utilisant{{formatnum:{{NUMBEROFUSERS}}|R}}
.Ceci est particulièrement important dans certaines langues, où les chiffres sont traduits.Par exemple, en Bengali, {{NUMBEROFUSERS}} produit ৩০,০৬১.
{{#expr:{{NUMBEROFUSERS}}+100}}
→Expression error: Unrecognized punctuation character " ".{{#expr:{{formatnum:{{NUMBEROFUSERS}}|R}}+100}}
→18138025![]() | L'opérateurmod donne de mauvais résultats pour certaines valeurs du deuxième argument :
|
Rounds arrondit le nombre à sa gauche en un multiple d'une puissance de 1/10, l'exposant étant égal à la valeur tronquée du nombre donné à sa droite.
Pour arrondir au supérieur ou à l'inférieur, utilisez respectivement les opérateurs unairesceil
etfloor
.
Exemple de test | Résultat | Méthode d'arrondi | ||
---|---|---|---|---|
{{#expr: 1/3 round 5 }} | 0.33333 | Le chiffre final est < 5, pas d'arrondi apparent (0.333333… → 0.33333) | ||
{{#expr: 1/6 round 5 }} | 0.16667 | Le chiffre final est >= 5, arrondi vers le haut (0.166666… → 0.16667) | ||
{{#expr: 8.99999/9 round 5 }} | 1 | De nouveau, le résultat est arrondi vers le haut sur le dernier chiffre, ce qui se traduit par un arrondi supplémentaire (0.999998… → 1.00000 → 1) | ||
{{#expr: 1234.5678round -2 }} | 1200 | Arrondi aux 100 les plus proches car les valeurs négatives de l'exposant appliquent l'arrondi à la gauche de la virgule décimale | ||
{{#expr: 1234.5678round 2 }} | 1234.57 | Arrondi aux 1/100 les plus proches car les valeurs positives de l'exposant appliquent l'arrondi à la droite de la virgule décimale | ||
{{#expr: 1234.5678 round 2.3 }} | 1234.57 | Des décimales dans l'ordre d'arrondi ne donnent aucune différence dans le résultat | ||
{{#expr:trunc 1234.5678 }} | 1234 | Partie décimale tronquée | ||
Arrondi à l'entier le plus proche | ||||
{{#expr: 1/3round 0 }} | 0 | Arrondi à l'entierle plus proche, qui est zéro | ||
{{#expr: 1/2round 0 }} | 1 | Arrondi vers le haut vers l'entier le plus proche, qui est un | ||
{{#expr: 3/4round 0 }} | 1 | Arrondi vers le haut vers l'entier le plus proche, qui est un | ||
{{#expr: -1/3round 0 }} | -0 | Arrondi vers le haut vers l'entier le plus proche, qui est zéro | ||
{{#expr: -1/2round 0 }} | -1 | Arrondi vers le bas vers l'entier le plus proche, qui est moins un | ||
{{#expr: -3/4round 0 }} | -1 | Arrondi vers le bas vers l'entier le plus proche, qui est moins un | ||
Arrondi vers le haut ou le bas parceil etfloor | ||||
{{#expr:ceil(1/3) }} | 1 | Arrondi vers lehaut vers l'entier le plus proche, qui est un | ||
{{#expr:floor(1/3) }} | 0 | Arrondi vers lebas vers l'entier le plus proche, qui est zéro | ||
{{#expr:ceil(-1/3) }} | -0 | Arrondi vers le haut vers l'entier le plus proche, qui est zéro | ||
{{#expr:floor(-1/3) }} | -1 | Arrondi vers le bas vers l'entier le plus proche, qui est moins un | ||
{{#expr:ceil 1/3 }} | 0.33333333333333 | Pas arrondi car 1 est déjà un entier
| ||
Rounding large numbers | ||||
{{#expr: 1e-92 round 400 }} | 1.0E-92 | En arrondissant à un nombre très grand on arrive à l'infini. Par conséquent, la valeur initiale sans l'infini est donnée comme réponse. | ||
{{#expr: 1e108 round 200 }} | 1.0E+108 | Idem que ci-dessus. |
Les expressions ne fonctionnent qu'avec des valeurs numériques, elles ne peuvent pas comparer des chaînes ou des caractères.#ifeq doit être utilisé dans ce cas.
{{#expr: "a" = "a"}}
→Expression error: Unrecognized punctuation character """.{{#expr: a = a}}
→Expression error: Unrecognized word "a".{{#ifeq: a| a| 1| 0}}
→1Cette fonction évalue une chaîne de test et détermine si elle est vide ou non. Une chaîne de test contenant seulement des espaces est considérée comme vide.
{{#if: chaîne de test| valeur si la chaîne test n'est pas vide| valeur si la chaîne test est vide (ou contient seulement des espaces)}}
{{#if: premier paramètre| deuxième paramètre| troisième paramètre}}
Cette fonction teste d'abord si le premier paramètre n'est pas vide. S'il n'est pas vide, la fonction affiche le deuxième paramètre. Si le premier paramètre est vide ou ne contient que des caractères d'espacement (espaces, retour à la ligne, etc...), elle affiche le troisième paramètre.
{{#if:| yes| no}}
→no{{#if: string| yes| no}}
→yes{{#if: | yes| no}}
→yes{{#if:| yes| no}}
→noLa chaîne test est toujours interprétée comme du texte pur, ainsi les expressions mathématiques ne sont pas évaluées (voir#ifexpr pour cela) :
{{#if: 1==2| yes| no}}
→yes{{#if: 0| yes| no}}
→yesLe dernier paramètre (false) peut être omis
{{#if: foo| yes}}
→ yes{{#if:| yes}}
→{{#if: foo|| no}}
→La fonction peut être imbriquée. Pour cela, écrivez la fonction#if
interne avec son code à la place d'un paramètre de la fonction#if
englobante. Jusqu'à sept niveaux d'imbrication sont possibles, bien que cela puisse dépendre du wiki ou d'une limite de la mémoire.
{{#if:chaîne de test|valeur si la chaîne de test n'est pas vide|{{#if:chaîne de test|valeur quand la chaîne de test n'est pas vide|valeur si la chaîne de test est vide (ou contient seulement des espaces)}}}}
Vous pouvez également utiliser un paramètre qui serait une chaîne testée dans un#if
. Vous devez vous assurer d'ajouter le symbole|
(barre verticale) après le nom de la variable.(De sorte que, si le paramètre n'a pas de valeur, l'évaluation rende une chaîne vide au lieu de la chaîne « {{{1}}}
»).
{{#if:{{{1|}}}|Vous avez saisi du texte dans la variable 1|Il n'y a pas de texte dans la variable 1}}
VoirAide:Fonctions d'analyse dans les modèles pour plus d'exemples de cette fonction d'analyseur.
Cette fonction d’analyse compare deux chaînes d'entrée, détermine si elles sont identiques et renvoie une chaîne en fonction du résultat.Si plus de comparaisons ou de chaînes de sortie sont nécessaires, envisagez d'utiliser#switch
.
{{#ifeq:string 1 |string 2 |value if identical |value if different }}
Si les deux chaînes sont des valeurs numériques valides, les chaînes sont comparées numériquement :
{{#ifeq: 01| 1| equal| not equal}}
→equal{{#ifeq: 0| -0| equal| not equal}}
→equal{{#ifeq: 1e3| 1000| equal| not equal}}
→equal{{#ifeq:{{#expr:10^3}}| 1000| equal| not equal}}
→equalSinon la comparaison s'effectue comme du texte ; cette comparaison est sensible à la casse :
{{#ifeq: foo| bar| equal| not equal}}
→not equal{{#ifeq: foo| Foo| equal| not equal}}
→not equal{{#ifeq: "01"| "1"| equal| not equal}}
→not equal (comparer à l'exemple similaire ci-dessus, sans les guillemets (" ") ){{#ifeq: 10^3| 1000| equal| not equal}}
→not equal (comparer à l'exemple similaire ci-dessus, avec#expr
renvoyant en premier un nombre valide)Comme exemple concret, prenons lemodèle existantTemplate:Timer
qui utilise l'analyseur pour choisir entre deux formats de temps, un format court et un format long.Il compare le premier paramètre à la chaîne « courte » (il n'y a pas de convention pour l'ordre, mais c'est plus simple à lire si le paramètre est en premier).Voici le code du modèle :
{{#ifeq:{{{1|}}}| short| 20| 40}}
il en résulte ce qui suit :
{{timer|short}}
→20{{timer|20}}
→40{{timer}}
→40![]() | Lorsqu'elles sont utilisées à l'intérieur d'une fonction d'analyse, les balises d'analyseur et autres fonctions d'analyseur doivent être temporairement remplacées parun code unique. Cela affecte les comparaisons :
|
![]() | La comparaison littérale avec desmots magiques de nom de page peut échouer en fonction de la configuration du site. Par exemple, {{FULLPAGENAME}}, en fonction du wiki, peut mettre la première lettre en majuscule, et remplacer tous les caractères '_' par des espaces. Pour contourner ce problème, utilisez les mots magiques pour les deux paramètres :
|
Cette fonction prend une chaîne en entrée et renvoie un des deux résultats : la fonction s'évalue àtrue
si la chaîne d'entrée contient un objet HTML avecclass="error"
, tel que généré par d'autres fonctions du parseur comme#expr
,#time
et#rel2abs
, des erreurs detemplates comme des boucles ou les récursions, et d'autres erreurs "douces" du parseur.
{{#iferror:test string |value if error |value if correct }}
L'une ou les deux chaînes de retour peuvent être omises. Si la chaînecorrect
est omise, la chaînetest string
est renvoyée si elle n'est pas fausse. Si la chaîneerror
est aussi omise, une chaîne vide est renvoyée sur une erreur :
{{#iferror:{{#expr: 1 + 2}}| error| correct}}
→correct{{#iferror:{{#expr: 1 + X}}| error| correct}}
→error{{#iferror:{{#expr: 1 + 2}}| error}}
→3{{#iferror:{{#expr: 1 + X}}| error}}
→error{{#iferror:{{#expr: 1 + 2}}}}
→3{{#iferror:{{#expr: 1 + X}}}}
→{{#iferror:{{#expr: .}}| error| correct}}
→correct{{#iferror:<strongclass="error">a</strong>| error| correct}}
→errorCertaines erreurs peuvent entraîner l'ajout d'une catégorie de suivi, l'utilisation de{{#iferror:}}
ne supprimera pas l'ajout de cette catégorie.
Cette fonction évalue une expression mathématique, et renvoie une des deux chaînes selon la valeur booléenne du résultat :
{{#ifexpr:expression |value if true |value if false }}
L'entréeexpression
est évaluée exactement comme pour#expr
plus haut, avec les mêmes opérateurs disponibles. Le résultat est alors évalué comme une expression booléenne.
Une expression vide en entrée s'évalue àfalse
:
{{#ifexpr:| yes| no}}
→noComme mentionné plus haut, zéro équivaut àfalse
et toute autre valeur est évaluée àtrue
, ainsi cette fonction est équivalente à une autre utilisant seulement#ifeq
et#expr
:
{{#ifeq: {{#expr:expression }} | 0 |value if false |value if true }}
sauf pour une expression d'entrée vide ou erronée (un message d'erreur est traité comme une chaîne vide ; il n'est pas égal à zéro, donc on obtientvalue if true
).
{{#ifexpr: =| yes| no}}
→Expression error: Unexpected = operator.à comparer à :
{{#ifeq:{{#expr: =}}| 0| no| yes}}
→ yesL'une, l'autre ou les deux valeurs de retour peuvent être omises; on n'a aucune sortie quand la branche appropriée est laissée vide :
{{#ifexpr: 1 > 0| yes}}
→yes{{#ifexpr: 1 < 0| yes}}
→{{#ifexpr: 0 = 0| yes}}
→ yes{{#ifexpr: 1 > 0|| no}}
→{{#ifexpr: 1 < 0|| no}}
→ no{{#ifexpr: 1 > 0}}
→Les opérateurs booléens d'égalité ou les opérateurs d'inégalité sont pris en charge.
{{#ifexpr: 0 = 0 or 1 = 0| yes}}
→yes{{#ifexpr: 0 = 0 and 1 = 0|| no}}
→no{{#ifexpr: 2 > 0 or 1 < 0| yes}}
→yes{{#ifexpr: 2 > 0 and 1 > 0| yes| no}}
→yes![]() | Le résultat de la comparaison numérique avec#ifexpr ne correspond pas toujours à celui de#ifeq et#switch . Ces deux derniers sont plus précis que#ifexpr , et ne renvoient pas forcément les mêmes résultats.Soit les comparaisons suivantes, où seul le dernier chiffre est différent :
Parce que PHP, utilisé dans
Puisqu’un chiffre diffère, le résultat qui indique une égalité se révèle incorrect. Ce comportement de#ifexpr vient du fait que Mediawiki convertit les nombres littéraux en type flottant, ce qui pour des entiers très grands comme ceux-ci, implique un arrondi. |
Cette fonction prend une chaîne en entrée, l'interprète comme un titre de page, et renvoie une des deux valeurs selon que la page existe ou non sur le wiki local.
{{#ifexist:page title |value if exists |value if doesn't exist }}
La fonction rendtrue
si la page existe, qu'elle ait un contenu, ou qu'elle soit visiblement vide (mais contenant des méta-données telles que des liens vers les catégories ou desmots magiques, mais aucun contenu visible), ou qu'elle soit complètement vide, ou qu'il s'agisse d'uneredirection. Seules les pages qui ont un liens en rouge sont évaluées àfalse
, même si la page a existé autrefois et a été ensuite supprimée.
{{#ifexist: Help:Extension:ParserFunctions/fr | exists | doesn't exist }}
→exists{{#ifexist: XXHelp:Extension:ParserFunctions/frXX | exists | doesn't exist }}
→doesn't existLa fonction s'évalue àtrue
pour lesmessages système qui ont été personnalisés, et pour lespages spéciales définies par le logiciel.
{{#ifexist: Special:Watchlist | exists | doesn't exist }}
→exists{{#ifexist: Special:CheckUser | exists | doesn't exist }}
→exists (car l'extensionCheckuser est installée sur ce wiki){{#ifexist: MediaWiki:Copyright | exists | doesn't exist }}
→doesn't exist (car leMediaWiki:Copyright n'a pas été personnalisé)Si une page vérifie une page cible par#ifexist:
, alors cette page apparaîtra dans la listeSpecial:WhatLinksHere de la page cible. Ainsi, si les codes $code1:Foo $code2 ont été inclus dynamiquement dans cette page ($fullpagename1),$wth/Foo listera $fullpagename2.So if the code{{#ifexist:Foo }}
were included live on this page (Help:Extension:ParserFunctions/fr),Special:WhatLinksHere/Foo will list Help:Extension:ParserFunctions/fr.
Sur les wikis utilisant un espace référentiel partagé de médias,#ifexist:
peut être utilisé pour vérifier si un fichier a été téléversé dans cet espace, mais pas sur le wiki lui-même :
{{#ifexist: File:Example.png | exists | doesn't exist }}
→doesn't exist{{#ifexist: Image:Example.png | exists | doesn't exist }}
→doesn't exist{{#ifexist: Media:Example.png | exists | doesn't exist }}
→existsSi en local une page de description a été créée pour le fichier (média), le résultat estexists pour tous les cas ci-dessus.
#ifexist:
ne fonctionne pas avec des liens interwiki.
#ifexist:
est considéré comme une "fonction d'analyse coûteuse" ; on ne peut en inclure qu'un nombre limité sur chaque page (en comptant les fonctions internes aux modèles transclus).Quand cette limite est dépassée, toutes les fonctions#ifexist:
surnuméraires renverront automatiquementfalse
, que la page cible existe ou non, et qu'elle soit catégorisée dansCategory:Pages with too many expensive parser function calls.Le nom de lacatégorie de suivi peut varier en fonction de la langue du contenu de votre wiki.
Pour certains cas d'utilisatiion, il est possible de reproduire l'effet de la fonctionifexist sous css, avec les sélecteursa.new
(pour sélectionner les liens vers les pages inexistantes) oua:not(.new)
(pour sélectionner les liens vers les pages existantes).De plus, puisque le nombre de fonctions coûteuses du parseur utilisables sur une page est contrôlé par$wgExpensiveParserFunctionLimit
, on peut aussi augmenter la limite dans LocalSettings.php si besoin.
Un lien vers une page inexistante et qui est testée par #ifexist atterrira sur lesPages demandées.VoirT14019 pour les raisons, etw:Template:Linkless exists pour une alternative.
Cette fonction convertit un chemin relatif de fichier en chemin absolu.
{{#rel2abs:path }}
{{#rel2abs:path |base path }}
Dans le paramètrepath
, la syntaxe suivante est valide :
.
→ le niveau courant..
→ remonter d’un niveau/foo
→ descendre d’un niveau dans le sous-répertoire /fooSibase path
n'est pas renseigné, le nom complet de la page sera utilisé à la place :
{{#rel2abs: /quok | Help:Foo/bar/baz }}
→Help:Foo/bar/baz/quok{{#rel2abs: ./quok | Help:Foo/bar/baz }}
→Help:Foo/bar/baz/quok{{#rel2abs: ../quok | Help:Foo/bar/baz }}
→Help:Foo/bar/quok{{#rel2abs: ../. | Help:Foo/bar/baz }}
→Help:Foo/barUne syntaxe invalide, telle que/.
ou/./
, sera ignorée.Étant donné que seuls deuxfull stops consécutifs sont autorisés, les séquences de ce type peuvent être utilisées pour séparer les éléments successifs :
{{#rel2abs: ../quok/. | Help:Foo/bar/baz }}
→Help:Foo/bar/quok{{#rel2abs: ../../quok | Help:Foo/bar/baz }}
→Help:Foo/quok{{#rel2abs: ../../../quok | Help:Foo/bar/baz }}
→quok{{#rel2abs: ../../../../quok | Help:Foo/bar/baz }}
→Erreur : profondeur invalide dans le chemin « Help:Foo/bar/baz/../../../../quok » (tentative d’accès à un nœud au-dessus du nœud racine).Pour un groupe similaire de fonctions, voir aussi lesDonnées d'URL.Les fonctions d'analyse embarquées comprennent : 'localurl:', 'fullurl:', 'anchorencode:' etc.
Voir aussi :w:Help:Switch parser function
Cette fonction compare une valeur d'entrée parmi plusieurs cas de test, et renvoie la chaîne associée si une correspondance est trouvée.
{{#switch:comparison string |case =result |case =result |... |case =result |default result}}
Exemples :
{{#switch: baz| foo= Foo| baz= Baz| Bar}}
→ Baz{{#switch: foo| foo= Foo| baz= Baz| Bar}}
→ Foo{{#switch: zzz| foo= Foo| baz= Baz| Bar}}
→ Bar#switch avec des balises de transclusion partielle peuvent perturber un fichier de configuration qui autorise un éditeur qui n'est pas familier avec le codage des modèles à visualiser et éditer les éléments configurables.
Le résultat par défaut (default result
) est renvoyé si aucune des chaînes (case
) ne correspond à la donnée à comparer (comparison string
) :
{{#switch: test| foo= Foo| baz= Baz| Bar}}
→ BarDans cette syntaxe, le résultat par défaut doit être le dernier paramètre et ne doit pas contenir de signe égal brut (un signe égal sans{{}}
).S'il en contient un, cela sera considéré comme un cas de comparaison, et aucun texte ne sera affiché si aucun cas ne correspond.Cela vient du fait que la valeur par défaut n’a pas été définie ou qu'elle est vide.Cependant si un cas correspond, la chaîne qui lui est associée sera renvoyée.
{{#switch: test| Bar| foo= Foo| baz= Baz}}
→{{#switch: test| foo= Foo| baz= Baz| B=ar}}
→{{#switch: test| test= Foo| baz= Baz| B=ar}}
→ FooPar ailleurs, la valeur par défaut peut aussi être explicitement déclarée avec une chaîne decase
valant "#default
".
{{#switch:comparison string |case =result |case =result |... |case =result | #default =default result}}
Les valeurs par défaut déclarées de cette manière peuvent être placées n'importe où dans la fonction :
{{#switch: test| foo= Foo| #default= Bar| baz= Baz}}
→ BarSi le paramètredefault
est omis et qu'aucune valeur ne correspond à la donnée entrée, la fonction ne renvoie pas deresult
:
{{#switch: test| foo= Foo| baz= Baz}}
→Il est possible d’avoir des valeurs « communes », où plusieurs chaînescase
renvoient la même chaînerésultat
. Cela minimise les doublons.
{{#switch:comparison string |case1 =result1 |case2 |case3 |case4 =result234 |case5 =result5 |case6 |case7 =result67 | #default =default result}}
Ici les valeurscase2
,case3
etcase4
renvoient toutesresult234
;case6
etcase7
renvoient toutesresult67
.Le « #default =
» du dernier paramètre peut être omis dans l’exemple ci-dessus.
La fonction peut être utilisée avec des paramètres comme chaîne de test.Dans ce cas il n'est pas nécessaire de mettre la barre verticale '|' après le nom du paramètre car il est très rare que vous choisissiez d'initialiser un cas avec la chaîne « {{{parameter name}}}
» .(C'est la valeur qui sera affectée au paramètre par défaut si la barre verticale '|' est absente et que le paramètre n'existe pas ou qu'il a une valeur.VoirAide:Fonctions d'analyse dans les modèles.)
{{#switch:{{{1}}}| foo= Foo| baz= Baz| Bar}}
Dans le cas ci-dessus, si{{{1}}}
vautfoo
, la fonction renverraFoo
.S'il vautbaz
, la fonction renverraBaz
.Si le paramètre est vide ou s'il n'existe pas, la fonction renverraBar
.
Comme dans la section ci-dessus, les cas peuvent être combinés pour donner un seul résultat.
{{#switch:{{{1}}}| foo| zoo| roo= Foo| baz= Baz| Bar}}
Ici, si{{{1}}}
vautfoo
,zoo
ouroo
, la fonction renverraFoo
.S'il vautbaz
, la fonction renverraBaz
.Si le paramètre est vide ou s'il n'existe pas, la fonction renverraBar
.
De plus, le résultat par défaut peut être omis si vous ne souhaitez pas renvoyer quelque chose lorsque la valeur du paramètre à tester correspond à aucun des cas.
{{#switch:{{{1}}}| foo= Foo| bar= Bar}}
Dans ce cas, la fonction renvoie une chaîne vide à moins que{{{1}}}
existe et qu'il vautfoo
oubar
, auquel cas elle renvoie respectivementFoo
ouBar
.
Ceci a le même effet que si on déclarait vide le résultat par défaut.
{{#switch:{{{1}}}| foo| zoo| roo= Foo| baz= Baz|}}
Si pour quelque raison vous décidez d'initialiser un cas comme « {{{parameter name}}}
», la fonction va renvoyer le résultat de ce cas quand le paramètre n'existe pas, ou bien s'il n'a pas de valeur.Le paramètre devrait exister et avoir une valeur autre que la chaîne « {{{parameter name}}}
» pour renvoyer le résultat par défaut de la fonction.
{{{1}}}
n'existe pas ou est vide) :{{#switch:{{{1}}}|{{{1}}} = Foo| baz= Baz| Bar}}
→ Foo{{{1}}}
a la valeur "test
") :{{#switch:{{{1}}}|{{{1}}} = Foo| baz= Baz| Bar}}
→ Bar{{{1}}}
a la valeur «{{{1}}}
») :{{#switch:{{{1}}}|{{{1}}} = Foo| baz= Baz| Bar}}
→ FooDans cet hypothétique cas, il faudrait ajouter une barre verticale au paramètre ({{{1|}}}
).
Comme pour#ifeq
, la comparaison est numérique si la chaîne à comparer et la chaîne du case à tester sont toutes deux numériques ; sinon c'est une comparaison de chaine sensible à la casse :
{{#switch: 0 + 1| 1= one| 2= two| three}}
→three{{#switch:{{#expr: 0 + 1}}| 1= one| 2= two| three}}
→one{{#switch: 02| +1= one| +2= two| three}}
→two{{#switch: 100| 1e1= ten| 1e2= hundred| other}}
→hundred{{#switch: a| a= A| b= B| C}}
→A{{#switch: A| a= A| b= B| C}}
→CUne chaînecase
peut être vide :
{{#switch:|= Nothing| foo= Foo| Something}}
→NothingUne fois qu'une correspondance est trouvée avec la donnée à comparer, lesvaleurs
suivantes sont ignorées :
{{#switch: b| f= Foo| b= Bar| b= Baz|}}
→Bar![]() | Les comparaisons numériques avec#switch et#ifeq ne sont pas équivalentes aux comparaisons dans les expressions (voir aussi ci-dessus) :
|
Les chaînes de caractères desCase ne peuvent pas contenir de signes '=' bruts. Pour contourner ce comportement utilisez le mot magique{{=}}, ou remplacez les signes '=' par le code html=
.
Exemple :
Vous entrez | Vous obtenez |
---|---|
{{#switch: 1=2| 1=2 = raw| 1<nowiki>=</nowiki>2 = nowiki| 1{{=}}2 = template| default}} | template |
{{#switch: 1=2| 1=2= html| default}} | html |
#switch
peut être utilisé pour réduire laprofondeur d’expansion.
Par exemple :
{{#switch:{{{1}}}|condition1=branch1|condition2=branch2|condition3=branch3|branch4}}
est équivalent à :
{{#ifeq:{{{1}}}|condition1|branch1|{{#ifeq:{{{1}}}|condition2|branch2|{{#ifeq:{{{1}}}|condition3|branch3|branch4}}}}}}
c'est à dire imbriquer, en linéaire :
{{#ifeq:{{{1}}}|condition1|<!--then-->branch1|<!--else-->{{#ifeq:{{{1}}}|condition2|<!--then-->branch2|<!--else-->{{#ifeq:{{{1}}}|condition3|<!--then-->branch3|<!--else-->branch4}}}}}}
D'un autre côté, le remplacement du sélecteur pourrait être compliqué ou pas pratique pour lesif imbriqués dans les deux branches (affichés avec les alternatives d'indentation, indentés de chaque côté), rendant l'arbre complètement symétrique :
{{#ifeq:{{{1}}}|condition1|<!--then-->branch1t{{#ifeq:{{{1}}}|condition2|<!--then-->branch1t2t{{#ifeq:{{{1}}}|condition4|<!--then-->branch1t2t4t|<!--else-->branch1t2t4e}}|<!--else-->branch1t2e{{#ifeq:{{{1}}}|condition5|<!--then-->branch1t2e5t|<!--else-->branch1t2e5e}}}}|<!--else-->branch1e{{#ifeq:{{{1}}}|condition3|<!--then-->branch1e3t{{#ifeq:{{{1}}}|condition6|branch1e3t6t|branch1e3t6e}}|<!--else-->branch1e3e{{#ifeq:{{{1}}}|condition7|branch1e3e7t|branch1e3e7t}}}}}}
Code | Description | Valeur actuelle (Purger le cache de cette page pour mettre à jour) |
---|---|---|
Année | ||
Y | année sur 4 chiffres | 2025 |
y | année sur 2 chiffres | 25 |
L | 1 si c'est une année bissextile, 0 sinon. | 0 |
o [note 1] | Année ISO-8601 de la semaine indiquée.[note 2] | 2025[note 3] |
Mois | ||
n | Numéro du mois (entre 1 et 12), sans zéro initial. | 7 |
m | Numéro du mois sur deux chiffres, avec zéro initial si nécessaire (entre 01 et 12). | 07 |
M | Abréviation du nom du mois, dans la langue du site. | juill. |
F | Nom complet du mois, dans la langue du site. | juillet |
xg | Renvoie le nom complet du mois sous la forme dugénitif pour les langues de site distinguant les formes génitif etnominatif. Cette option est utile pour beaucoup delangues slaves comme le polonais, le russe, le biélorusse, le tchèque, le slovaque, le slovène, l'ukrainien, etc. | En polonais :{{#time:F Y|June 2010|pl}} → czerwiec 2010(nominatif) {{#time:d xg Y|20 June 2010|pl}} → 20 czerwca 2010(génitif) |
Jour du mois ou de l'année | ||
j | Numéro du jour du mois, sur 1 ou 2 chiffres, entre 1 et 31, sans zéro initial. | 18 |
d | Numéro du jour du mois sur 2 chiffres, entre 01 et 31, avec un zéro initial éventuel. | 18 |
z | Jour de l'année entre 0 (le 1er janvier) et 365.![]() | 198 |
Semaine et jour de la semaine | ||
W | Numéro de la semaine ISO 8601 justifié avec zéro. | 29 |
N | Numéro du jour dans la semaine ISO 8601, de 1 (le lundi) à 7 (le dimanche). | 5 |
w | Numéro du jour dans la semaine (de 0 pour dimanche à 6 pour samedi). | 5 |
D | Une abréviation du nom du jour de la semaine. Rarement internationalisé. | ven. |
l | Nom complet du jour de la semaine. Rarement internationalisé. | vendredi |
Heure | ||
a | « am » le matin (entre minuit et 11h 59min 59s), sinon « pm » (entre midi et 23h 59min 59s). | pm |
A | Version en majuscule dea (voir plus haut). | PM |
g | Heure en format 12h, sans zéro initial. | 7 |
h | Heure en format 12h, avec un zéro initial si inférieur à dix. | 07 |
G | Heure en format 24h, sans zéro initial. | 19 |
H | Heure en format 24h, avec un zéro initial si inférieur à dix. | 19 |
Minutes et secondes | ||
i | Minutes après l'heure, avec un zéro initial. | 40 |
s | Secondes après la minute, avec un zéro initial. | 22 |
U | Heure Unix. Secondes depuis le 1er janvier 1970 à minuit (UTC). | 1752867622 |
Zone horaire (selon1.22wmf2) | ||
e | Identifiant de la zone horaire. | UTC |
I | Si la date est ou n'est pas à l’heure d’été. | 0 |
O | Différence avec l'heure de Greenwich (UTC). | +0000 |
P | Différence avec l'heure de Greenwich (UTC), avec les deux-points | +00:00 |
T | Abréviation de la zone horaire. | UTC |
Z | Décalage du fuseau horaire en secondes. | 0 |
Divers | ||
t | Nombre de jours dans le mois actuel. | 31 |
c | Date au format ISO 8601, équivalent àY-m-d"T"H:i:s+00:00 . | 2025-07-18T19:40:22+00:00 |
r | Date selon la normeRFC 5322, équivalent àD, j M Y H:i:s +0000 , avec les noms du jour et du mois non internationalisés. | Fri, 18 Jul 2025 19:40:22 +0000 |
Calendriers non-grégoriens | ||
Islamique | ||
xmj | Numéro du jour du mois. | 22 |
xmF | Nom complet du mois. | Mouharram |
xmn | Numéro du mois. | 1 |
xmY | Année. | 1447 |
Iranien (Jalaly) | ||
xit | Nombre de jours dans le mois. | 31 |
xiz | Nombre de jours écoulés depuis le début de l'année. | 119 |
xij | Numéro du jour du mois. | 27 |
xiF | Nom complet du mois. | Tir |
xin | Numéro du mois. | 4 |
xiY | Année. | 1404 |
xiy | Année sur deux chiffres. | 04 |
Hébraïque | ||
xjj | Numéro du jour du mois. | 22 |
xjF | Nom complet du mois. | tamouz |
xjt | Nombre de jours dans le mois. | 29 |
xjx | Forme du nom de mois au génitif. | tamouz |
xjn | Numéro du mois. | 10 |
xjY | Année complète. | 5785 |
Thaïlandais solaire | ||
xkY | Année complète selon lecalendrier solaire thaïlandais.![]() | 2568 |
année Minguo/Juche | ||
xoY | Année complète. | 114 |
Japonais nengo | ||
xtY | Année complète. | 令和7 |
Drapeaux | ||
xn | Formate le code numérique suivant en nombre brut ASCII. | En hindi,{{#time:H, xnH}} produit ०६, 06. |
xN | Similaire àxn , mais fonctionne comme une bascule conservant son état jusqu’à la fin de chaîne de format ou jusqu’à la prochaine occurrence dexN dans la chaîne. | |
xr | Formate le nombre suivant comme numéral en chiffres romains. Ne fonctionne que pour les entiers positifs inférieurs à 10 000 (inférieurs à 3 000 avant Mediawiki 1.20). | {{#time:xrY}} → MMXXV |
xh | Formate le nombre suivant comme un numéral hébreu. | {{#time:xhY}} → ב'כ"ה |
Cette fonction prend une date ou une heure (selon le calendrier grégorien) et la formate selon la syntaxe donnée. Un objet date et/ou heure peut être spécifié ; par défaut, la valeur dumot magique{{CURRENTTIMESTAMP}}
est utilisée – c'est-à-dire, le moment auquel la page a été transformée en HTML pour la dernière fois.
{{#time:format string }}
{{#time:format string |date/time object }}
{{#time:format string |date/time object |language code }}
{{#time:format string |date/time object |language code |local }}
La liste des codes de formatage acceptés figure dans la table à droite.Tout caractère de la chaîne du format, qui n'est pas reconnu, est passé tel quel sans modification; ceci s'applique également aux espaces (pas utiles pour le système pour interpréter les codes).Si aucun caractère n'est reconnu dans la chaîne de format et que l'objet date / heure est sans erreur, alors la chaîne de format est renvoyée en sortie.Il existe également deux manières d'échapper les caractères à partir de la chaîne du format :
De plus, le digraphexx
est interprété comme le littéral uniquex.
La liste des codes de formatage continuant à évoluer (avec le support de nouveaux calendrier, ou de nouveaux champs de date calculés et formatés différemment), vous devez échapper tous les caractères littéraux (et pas seulement les lettres ASCII utilisées actuellement par les codes de formatage) devant être transmis sans être modifiés.
Malheureusement, à ce jour, le caractère ASCIIapostrophe n'est toujours pas reconnu comme alternative simple au caractère ASCII reconnuguillemet droit pour marquer du texte littéral (par exemple, les guillemets sont requis pour d'autres usages tels que la délimitation de valeurs de typestring en JSON, C, C++... ) et caractère d'échappement\
(qui doit être échappé dans les constantes de type string utilisées dans beaucoup de langages, notamment JSON, C, C++, PHP, JavaScript, Lua).Aussi vous ne pouvez pas mettre des guillemets sans les échapper (\"
) (ou vous pouvez utiliser des guillemets courbes, angulaires, carrés à la place).
{{#time: Y-m-d}}
→2025-07-18{{#time:[[Y]] m d}}
→2025 07 18{{#time:[[Y (year)]]}}
→2025 (25UTCpmFri, 18 Jul 2025 19:40:22 +0000){{#time:[[Y "(year)"]]}}
→2025 (year){{#time: i's"}}
→40'22"L’objet date/time
peut être dans tout format accepté par la fonctionstrtotime() de PHP.Les dates absolues (ex :20 December 2000
), relatives (ex :+20 hours
), et combinées (ex :30 July +1 year
) sont acceptées.
{{#time: r|now}}
→Fri, 18 Jul 2025 19:40:23 +0000{{#time: r|+2 hours}}
→Fri, 18 Jul 2025 21:40:23 +0000{{#time: r|now + 2 hours}}
→Fri, 18 Jul 2025 21:40:23 +0000{{#time: r|20 December 2000}}
→Wed, 20 Dec 2000 00:00:00 +0000{{#time: r|December 20, 2000}}
→Wed, 20 Dec 2000 00:00:00 +0000{{#time: r|2000-12-20}}
→Wed, 20 Dec 2000 00:00:00 +0000{{#time: r|2000 December 20}}
→Erreur : durée invalide.{{#time: r|last tuesday}}
→Tue, 15 Jul 2025 00:00:00 +0000Lecode de langue
de la normeISO 639-3 (?) permet à la chaîne d’être affichée dans la langue choisie
{{#time:d F Y|1988-02-28|nl}}
→28 februari 1988{{#time:l|now|uk}}
→п'ятниця{{#time:d xg Y|20 June 2010|pl}}
→20 czerwca 2010Le paramètrelocal
spécifie si l'objet date/heure référence le fuseau horaire local ou l'UTC.
C'est un paramètre booléen : sa valeur est définie par un cast sur la valeur de l'argument (voir ladocumentation officielle PHP pour les détails sur la façon dont le cast est fait sur les chaînes de caractères pour en faire des valeurs booléennes).
$wgLocaltimezone
est mise àUTC
, il n'y a pas de différence dans la sortie quandlocal
vauttrue
oufalse
.Voir les exemples suivants pour les détails :
{{#time: Y F d H:i:s|now|it|0}}
→2025 luglio 18 19:40:23{{#time: Y F d H:i:s|now|it|1}}
→2025 luglio 18 19:40:23{{#time: Y F d H:i:s|+2 hours||0}}
→2025 juillet 18 21:40:23{{#time: Y F d H:i:s|+2 hours||1}}
→2025 juillet 18 21:40:23{{#time:c|2019-05-16T17:05:43+02:00|it}}
→2019-05-16T15:05:43+00:00{{#time:c|2019-05-16T17:05:43+02:00|it|0}}
→2019-05-16T15:05:43+00:00{{#time:c|2019-05-16T17:05:43+02:00|it|true}}
→2019-05-16T15:05:43+00:00Si vous avez calculé un horodatage Unix, vous pouvez l’utiliser dans les calculs de date en le préfixant avec le symbole@
.
{{#time: U| now}}
→1752867623{{#time: r | @1752867622 }}
→Fri, 18 Jul 2025 19:40:22 +0000![]() | Sans le préfixe@ avant la valeur numérique de l'horodatage, le résultat sera probablement une erreur ou une valeur inattendue.
|
![]() | L’étendue des entrées acceptables est du 1er janvier 0111 au 31 décembre 9999. Le résultat est inconsistant pour les années 100 à 110; Y et les années bissextiles sont comme les années 100-110; r, D, I et U semblent interpréter ces années de la même façon que les années 2000 à 2010.
Les années 0 à 99 sont interprétées comme 2000 à 2069 et 1970 à 1999, sauf lorsqu’elles sont écrites dans un format à 4 chiffres avec des zéros initiaux :
r produitUnknown et le formatl produit<> . Par conséquent, le format de sortier n'est pas accepté en entrée pour ces années. |
Des dates absolues complètes ou partielles peuvent être spécifiées ; la fonction va "remplir" les parties de la date qui ne sont pas spécifiées en utilisant les valeurs "actuelles" :
{{#time: Y| January 1}}
→2025![]() | La fonction de remplissage n'est pas cohérente ; certaines parties sont remplies à l'aide des valeurs actuelles, d'autres ne le sont pas :
Il y a une exception pour la complétion du jour :
|
Un nombre à quatre chiffres est toujours interprété comme une année, jamais comme des heures et des minutes :[1]
{{#time: Y m d H:i:s| 1959}}
→1959 07 18 00:00:00Un nombre à six chiffres est interprété comme heures, minutes et secondes dans la mesure du possible, sinon comme erreur (non, par exemple, comme année et mois) :
{{#time: Y m d H:i:s| 195909}}
→2025 07 18 19:59:09 L'entrée est traitée comme un code de temps plutôt qu'un code d'année+mois.{{#time: Y m d H:i:s| 196009}}
→Erreur : durée invalide. Bien que 19:60:09 ne soit pas une heure valide, 196009 n'est pas interprété comme septembre 1960.La fonction exécute un certain nombre de calculs de dates :
{{#time: d F Y| January 0 2008}}
→31 décembre 2007{{#time: d F| January 32}}
→Erreur : durée invalide.{{#time: d F| February 29 2008}}
→29 février{{#time: d F| February 29 2007}}
→01 mars{{#time:Y-F|now -1 months}}
→2025-juinLa longueur totale des chaînes de format des appels de#time
est limitée à 6 000 caractères[2].
Il y a un bogue dans cette fonction #time d'analyse de la date (plus particulièrement dansPHP DateTime) qui ne permet pas de passer des nombresnon-entiers pour le décalage relatif des fuseaux horaires. Ce problème n'apparait pas quand le fuseau est aligné sur une heure entière, comme EDT. Par exemple :
{{#time:g:i A| -4 hours}}
→ 3:40 PMNéanmoins l'Inde a un décalage de +5,5 heures sur l'UTC, ainsi en utilisant son décalage on ne pourra pas normalement calculer correctement le décalage horaire. Voici ce qui se passe :
{{#time:g:i A| +5.5 hours}}
→ 7:40 PMPour contourner ce problème, convertissez simplement le temps en minutes ou en secondes comme ceci :
{{#time:g:i A| +330 minutes}}
→ 1:10 AM{{#time:g:i A| +19800 seconds}}
→ 1:10 AM(Tim Starling, le développeur de cette fonction, a fourni la syntaxe exacte pour cette solution).
Il est quelques fois pratique de construire un horodatage qui ressemble à l'horodatage automatique généré par lessignatures des commentaires sur les pages de discussion.Avec un wiki en anglais, il peut être créé avec :
{{#timel:H:i, j xg Y (e)|+330 minutes}}
→ 01:10, 19 juillet 2025 (UTC)Cette fonction est un raccouci syntaxique qui fonctionne de la même manière que{{#time: ... }}
lorsque le paramètrelocal
vauttrue
, ainsi elle utilise toujours l'heure préférée de l'utilisateur ou l'heure locale du wiki (comme défini dans$wgLocaltimezone).
Le syntaxe de la fonction est la suivante :
{{#timel:format string }}
{{#timel:format string |date/time object }}
{{#timel:format string |date/time object |language code }}
$wgLocaltimezone
est mise àUTC
, il n'y a pas de différence dans la sortie quandlocal
vauttrue
oufalse
Par exemple voir les cas suivants :
{{#time:c|now|it}}
→2025-07-18T19:40:23+00:00{{#time:c|now|it|0}}
→2025-07-18T19:40:23+00:00{{#time:c|now|it|1}}
→2025-07-18T19:40:23+00:00{{#timel:c|now|it}}
→2025-07-18T19:40:23+00:00![]() | Remarquez que U, à la fois pour time et timel renvoie le même nombre de secondes depuis le 1er janvier 1970 00:00:00 UTC sur les Wikipedias avec des fuseaux horaires différents de UTC (anciennement connu sous le nom GMT)
|
Cette fonction formate une date en utilisant un format standard de la langue sélectionnée, tel que défini dans$dateFormats
(voirT223772).
{{#timef:objet date / temps }}
{{#timef:objet date / temps |type de format }}
{{#timef:objet date / temps |type de format |code de langue }}
Le format de l'objet date/time est le même que pour#time. S'il est vide, l'horodatage de la génération de la page est utilisé.
Letype de format peut être l'un des suivants :
time
date
both
pretty
Si letype de format n'est pas spécifié, l'heure et la date seront affichées simultanément, comme siboth
était fourni.
Si lecode de la langue n'est pas précisé, on utilise la langue du contenu de la page.
En utilisant#timef
à la place de#time
vous permettez aux modèles de prendre en charge plus facilement des langues différentes, car chaque langue a sa manière de formater les dates.
En anglais l'ordre des jours et le mois sont contrôlés par$wgAmericanDates
.
Exemples :
{{#timef:now|both|en}}
→ 19:40, 18 July 2025{{#timef:now|both|ja}}
→ 2025年7月18日 (金) 19:40{{#timef:now|pretty|en}}
→ 18 July{{#timef:now|pretty|pl}}
→ 18 lipca{{#timef:|time}}
→ 19:40Cette fonction est la même que#timef sauf qu'elle utilise le fuseau horaire local du wiki tel qu'il a été configuré dans$wgLocaltimezone.
{{#timefl:date/time object }}
{{#timefl:date/time object |format type }}
{{#timefl:date/time object |format type |language code }}
Cette fonction sépare le titre d'une page en segments basés sur les barres inclinées, puis renvoie en sortie, certains de ces segments.
{{#titleparts:nom de page |nombre de segments à renvoyer |segment où commencer }}
Si le paramètrenombre de segments à renvoyer n'est pas spécifié, il vaut "0" par défaut, ce qui fait renvoyer tous les segments à partir dusegment de début jusqu'au dernier (inclus). Si le paramètresegment initial n'est pas spécifié ou vaut "0", sa valeur par défaut est mise à "1" :
{{#titleparts:Talk:Foo/bar/baz/quok }}
→Talk:Foo/bar/baz/quok{{#titleparts:Talk:Foo/bar/baz/quok | 1 }}
→Talk:Foo Voir aussi {{ROOTPAGENAME}}.{{#titleparts:Talk:Foo/bar/baz/quok | 2 }}
→Talk:Foo/bar{{#titleparts: Talk:Foo/bar/baz/quok | 2 | 2 }}
→bar/baz{{#titleparts: Talk:Foo/bar/baz/quok | 2 | 3 }}
→baz/quok{{#titleparts: Talk:Foo/bar/baz/quok | 3 | 2 }}
→bar/baz/quok{{#titleparts: Talk:Foo/bar/baz/quok | | 2 }}
→bar/baz/quok{{#titleparts: Talk:Foo/bar/baz/quok | | 5 }}
→Les valeurs négatives sont acceptées pour les deux valeurs. Les valeurs négatives pour le paramètrenombre de segments à renvoyer va effectivement 'supprimer' des segments à partir de la fin de la chaîne. Les valeurs négatives pour lepremier segment à renvoyer sont traduites en "commencer avec ce segment en comptant à partir de la droite" :
{{#titleparts:Talk:Foo/bar/baz/quok | -1 }}
→Talk:Foo/bar/baz Enlève un segment à la fin de la chaîne. Voir aussi {{BASEPAGENAME}}.{{#titleparts: Talk:Foo/bar/baz/quok | -4 }}
→ Enlève l'ensemble des quatre segments de la fin de la chaîne{{#titleparts: Talk:Foo/bar/baz/quok | -5 }}
→ Enlève cinq segments de la fin de la chaîne (plus qu'il n'en existe){{#titleparts: Talk:Foo/bar/baz/quok | | -1 }}
→ quok Renvoie le dernier segment. Voir aussi {{SUBPAGENAME}}.{{#titleparts: Talk:Foo/bar/baz/quok | -1 | 2 }}
→ bar/baz Enlève un segment de la fin de la chaîne, puis renvoie le second segment et les suivants{{#titleparts: Talk:Foo/bar/baz/quok | -1 | -2 }}
→ baz Commence la copie au second dernier élément; enlève un segment de la fin de la chaîneAvant traitement, le paramètrepagename est décodé au niveau HTML: s'il contient des entités caractères HTML standards, elles seront converties en caractères simples (codés en interne en UTF-8, c'est à dire avec le même encodage que les pages source de MediaWiki qui utilisent cette fonction d'analyseur).
"
,"
, ou"
depagename sera remplacée par"
.{{PAGENAME}}
et similaires) sont connues pour renvoyer des chaînes qui sont inutilement encodées HTML, même si leur propre paramètre d'entrée n'était pas encodé HTML :La fonction d'analyse des composants des titres peut alors être utilisée comme palliatif, pour convertir ces chaînes renvoyées pour qu'elles puissent être traitées correctement par d'autres fonctions d'analyse qui prennent aussi le nom de page en paramètre (comme{{PAGESINCAT:}}
mais qui ne fonctionnent pas encore correctement avec les chaînes de caractères encodées HTML en entrée).
Par exemple, si la page actuelle estCategory:Côte-d'Or, alors:
{{#ifeq: {{FULLPAGENAME}} | Category:Côte-d'Or | 1 | 0 }}
, et{{#ifeq: {{FULLPAGENAME}} | Category:Côte-d'Or | 1 | 0 }}
renvoient tous deux1
; (la fonction analyseur #ifeq réalise bien le décodage HTML de ses paramètres d'entrée).{{#switch: {{FULLPAGENAME}} | Category:Côte-d'Or = 1 | #default = 0 }}
, et{{#switch: {{FULLPAGENAME}} | Category:Côte-d'Or = 1 | #default = 0 }}
renvoient tous deux1
; (la fonction d'analyse #switch, réalise effectivement le décodage HTML de ses paramètres d'entrée).{{#ifexist: {{FULLPAGENAME}} | 1 | 0 }}
,{{#ifexist: Category:Côte-d'Or | 1 | 0 }}
, ou même{{#ifexist: Category:Côte-d'Or | 1 | 0 }}
vont tous renvoyer1
si cette page de catégorie existe (la fonction analyseur #ifexist réalise effectivement le décodage HTML de ses paramètres d'entrée);{{PAGESINCAT: Côte-d'Or }}
va renvoyer un nombre différent de zéro, si cette catégorie contient des pages ou des sous-catégories,mais:{{PAGESINCAT: {{CURRENTPAGENAME}} }}
, peut encoreinconditionnellement renvoyer 0, tout comme :{{PAGESINCAT: {{PAGENAME:Category:Côte-d'Or}} }}
{{PAGESINCAT: {{PAGENAME:Category:Côte-d'Or}} }}
La raison de ce comportement inattendu est que, avec les versions actuelles de MediaWiki, il existe deux mises en garde :
{{FULLPAGENAME}}
ou même{{FULLPAGENAME:Côte-d'Or}}
peuvent renvoyer la chaîne encodée en entités HTMLCategory:Côte-d'Or
et pas celle attendueCategory:Côte-d'Or
{{PAGESINCAT: Côte-d'Or }}
renvoie 0inconditionnellement (le mot-clé magique PAGESINCAT ne réalise aucun décodage HTML de son paramètre d'entrée).Le palliatif simple utilisant des parties de titre (qui continuera à fonctionner si les deux mises en garde sont corrigées dans une version ultérieure de MediaWiki) est :
{{PAGESINCAT: {{#titleparts: {{CURRENTPAGENAME}} }} }}
{{PAGESINCAT: {{#titleparts: {{PAGENAME:Category:Côte-d'Or}} }} }}
{{PAGESINCAT: {{#titleparts: {{PAGENAME:Category:Côte-d'Or}} }} }}
, que tous renvoient le nombre actuel de pages dans la même catégorie.Ensuite le nom de page décodé est mis sous forme canonique dans un titre de page standard supporté par MediaWiki, au tant que possible :
{{#titleparts: Talk:Foo/bah_boo|1|2}}
→bah boo Pas bah_boo, malgré le souligné figurant dans l'original.{{#titleparts: a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/aa/bb/cc/dd/ee | 1 | 25 }}
→y/z/aa/bb/cc/dd/ee{{#titleparts: {{#titleparts: a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/aa/bb/cc/dd/ee| 1 | 25 }} | 1 | 2}}
→z{{#titleparts:talk:a/b/c }}
→Talk:A/b/c{{#titleparts:one/two/three/four|1|1 }}
→One{{#titleparts: one/two/three/four|1|2 }}
→twoS'il faut des minuscules, utilisez la fonction lc: pour contrôler la sortie :
{{lc: {{#titleparts:one/two/three/four|1|1 }} }}
→oneVous pouvez préfixer avec une barre inclinée 'vide' le début de la chaîne pour obtenir correctement la capitalisation de la première sous-chaîne (en majuscules ou en minuscules). Utilisez2
au lieu de1
pour lepremier segment à renvoyer:
{{#titleparts:/one/two/three/four|1|2 }}
→one{{#titleparts:/One/two/three/four|1|2 }}
→One![]() | Certains caractères qui sontillégaux dans un titre de page feront que#titleparts n'analysera pas la chaîne :
|
![]() | Si une partie quelconque du titre est juste ". " ou ".. ", #titleparts n'analysera pas la chaîne :
|
![]() | Cette fonction ne se dégrade pas correctement si l'entrée dépasse 255 octets en UTF-8. Si la chaîne d'entrée fait 256 octets ou plus, la chaîne entière est renvoyée. |
L'extension ParserFunctions définit facultativement différentes fonctions sur les chaînes de caractères quand$wgPFEnableStringFunctions
vauttrue
:
#len
#pos
#rpos
#sub
#count
#replace
#explode
#urldecode
Voir les sous-pages pour la documentation etManual:Performing string operations with parser functions pour les exemples.
![]() | En 2013, il a été décidé queces fonctionsne seront jamais activées sur aucun wiki Wikimedia, car elles sont inefficaces si elles sont utilisées à grande échelle (voirphab:T8455 pour l'historique).Ces fonctions ne sont pas opérationnelles sur les wikis Wikimedia ! Si vous êtes ici pour écrire quelque chose sur un projet Wikimedia, vous cherchez autre chose : si votre wiki d'accueil a des fonctions de chaîne de caractères, il utilise probablementLua. Par exemple, la Wikipedia anglaise utiliseModule:String, qui réalise partiellement des fonctions similaires mais avec une syntaxe très différente. Il existe aussi desmodèles de traitement de chaines de caractères individuels. |
Voici un bref aperçu des fonctionsModule:String :
{{#invoke:String|len|target_string}}
{{#invoke:String|sub|target_string|start_index|end_index}}
{{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}}
{{#invoke:String|pos|target_string|index_value}}
{{#invoke:String|find|source_string|target_string|start_index|plain_flag}}
{{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}}
{{#invoke:String|rep|source|count}}
{{#invoke:String|escapePattern|pattern_string}}
{{#invoke:String|count|source_str|pattern_string|plain_flag}}
{{#invoke:String|join|separator|string1|string2|...}}
Les fonctions d'analyseur peuvent êtresubstituées en préfixant le caractère de hachage parsubst:
:
{{subst:#ifexist: Help:Extension:ParserFunctions/fr | [[Help:Extension:ParserFunctions/fr]] | Help:Extension:ParserFunctions/fr }}
→ le code[[Help:Extension:ParserFunctions/fr]]
sera inséré dans le texte wiki car la page Help:Extension:ParserFunctions/fr existe.![]() | Les résultats des fonctions substituées d'analyse sont non-définis si les expressions contiennent du code volatilenonsubstitué tel quevariables ou d'autres fonctions d'analyse. Pour avoir des résultats cohérents, tout le code volatile des expressions à évaluer doit avoir été substitué. VoirHelp:Substitution. |
La substitution ne fonctionne pas à l'intérieur de<ref>
…</ref>
, vous pouvez utiliser{{subst:#tag:ref|
…}}
dans ce but.
Particulièrement{{#time:
…|now-
…}} serait pratique pour lesredirections vers les pages contenant des dates, mais cela ne fonctionne pas.
Les fonction d'analyseur vont casser la syntaxe destableaux wiki et des caractères pipe (|
), en traitant l'ensemble de la ligne des caractères pipe comme des séparateurs de paramètres.Pour éviter cela, la plupart des wikis utilisaient un modèleTemplate:! dont le contenu n'était qu'un caractère pipe (|
), depuis MW 1.24 un{{!}}
mot magique a remplacé cette structure.Ceci 'cache' le pipe à l'analyseur MediaWiki, en assurant qu'il n'est pas pris en compte tant que tous les modèles et les variables d'une page n'ont pas été expansés.Après seulement, il sera interprété comme un séparateur de rangée ou de colonne de tableau.Alternativement, la syntaxe des lignes de tableau HTML peut être utilisée, bien qu'elle reste moins intuitive et plus sujette à faire des erreurs.
Vous pouvez aussi échapper le caractère | pour être affiché directement, comme un caractère non interprété, en utilisant une entité HTML :|
ou|
.
Description | Vous entrez | Vous obtenez |
---|---|---|
Protection du caractère pipe en tant que séparateur de ligne/colonne de tableau | {{!}} | | |
Protection du caractère pipe comme simple caractère | | | | |
La même protection du pipe s'applique à l'exemple suivant :
{{Documentation|content=... text before ...<code>subpage-name=sandbox3</code> is equivalent to <code>sandbox link=../sandbox3 | sandbox name=sandbox3</code>.... text after ...}}
Nous observons quetext after n'est pas affiché lorsque le pipe | juste avantsandbox name= est présent puisque|sandbox name= est à tord considéré comme un paramètre du modèleDocumentation au même niveau que|content=.
Les blancs, incluant les nouvelles lignes, les tabulations, et les espaces, sont supprimés au début et à la fin de tous les paramètres de ces fonctions d'analyse. Si cela n'est pas souhaité, la comparaison des chaînes peut être faite en les entourant avec des apostrophes.
{{#ifeq: foo | foo | equal | not equal }}
→equal{{#ifeq: "foo " | " foo" | equal | not equal }}
→not equalPour éviter le rognage des partiesthen etelse, voirm:Template:If. Certaines personnes y parviennent en utilisant <nowiki> </nowiki> au lieu d'espaces.
foo{{#if:|| bar}}foo
→foobarfoofoo{{#if:||<nowiki/>bar<nowiki/>}}foo
→foo bar fooCependant, cette méthode peut être utilisée pour restituer un caractère espaceunique, car l'analyseur remplace plusieurs caractères espace consécutifs d'une ligne par un seul.
<spanstyle="white-space: pre;">foo{{#if:||<nowiki/> bar<nowiki/>}}foo</span> | → | foo bar foo |
Dans cet exemple, le stylewhite-space: pre
est utilisé pour forcer à préserver les blancs par le navigateur, mais même avec cela, les espaces ne sont pas affichées. Ceci arrive parce que les espaces sont supprimées par le logiciel, avant qu'elles ne soient envoyées au navigateur.
Il est possible de contourner ce comportement en remplaçant les blancs par 
(espace sécable) ou
(espace non sécable), parce qu'ils ne sont pas modifiés par le logiciel :
<spanstyle="white-space: pre;">foo{{#if:||   bar   }}foo</span>
→foo bar foofoo{{#if:|| bar }}foo
→foo bar fooAttention à ne pas créer tous les paramètres avec la même valeur.Dans ParserFunctions, l'espace figurant au début et à la fin est toujours supprimé.Danstemplates, les espaces de début et de fin sont supprimées pour les paramètres nommés et les paramètres numérotés maispas pour les paramètres non nommés :
"{{lc: AbC}}"
→ "abc"[1]"{{uc: AbC}}"
→ "ABC"[2]"{{lcfirst: AbC}}"
→ "abC"[3]"{{ucfirst: abc}}"
→ "Abc"[4]"{{urlencode: AbCdEf ghi}}"
Rendu :
"AbC%0AdEf+ghi"
Ainsi, les sauts de ligne internes sont convertis en %0A, et les espaces internes sont convertis en +.
{{anchorencode: AbC dEf ghi}}
Rendu :
AbC_dEf_ghi