Help:Extension:ParserFunctions/fr
From MediaWiki.org
Cette extension MediaWiki est une collection de fonctions du parseur permettant la programmation au sein des modèles. Les fonctions du parseur ont cette syntaxe typique :
{{#nom_de_la_fonction: argument 1 | argument 2 | argument 3...}}
Contents |
[edit] Fonctions
Ce module définit huit fonctions pour le moment : expr, if, ifeq, ifexist, ifexpr, rel2abs, time et switch.
[edit] if
La fonction if est une construction if-then-else. Sa syntaxe est la suivante :
{{ #if: <condition> | <alors texte1> | <sinon texte2> }}
Si la condition est une chaîne vide ou une espace, elle sera alors considérée comme fausse et <sinon texte2> sera renvoyé. Sinon, c'est <alors texte1> qui est renvoyé. Le <sinon texte2> peut être omis, dans ce cas le résultat retourné sera vide si la condition est fausse.
Un exemple, (si le #if est utilisé dans le code de « Modèle » avec « paramètre » présent, vide ou absent) :
en tapant : {{Modèle|paramètre=quelquechose}} {{Modèle}} {{Modèle|paramètre=}}
| \______________/
| |
_|_ _|_
{{ #if: {{{paramètre|}}} | Paramètre est défini | Paramètre n'est pas défini ou est vide }}
Prenez note que la fonction if ne connait pas le signe « = » ni les expressions mathématiques. {{#if: 1 = 2|oui|non }} renverra « oui » car la chaîne « 1 = 2 » n'est pas vide. Elle est prévue en tant que structure if définie. Pour comparer des chaînes, utilisez ifeq. Pour comparer des nombres, utilisez ifexpr.
[edit] Exemples avec if
{{#if: | vrai}} ->
{{#if: | vrai | }} ->
{{#if: | vrai | faux}} -> faux
{{#if: quelquechose | vrai}} -> vrai
{{#if: quelquechose | vrai | }} -> vrai
{{#if: quelquechose | vrai | faux}} -> vrai
{{#if: quelquechose | | faux}} ->
[edit] ifeq
ifeq compare deux chaînes et retourne une autre chaîne selon le résultat de la comparaison. La syntaxe est la suivante :
{{ #ifeq: <texte à comparer 1> | <texte à comparer 2> | <texte si égal> | <texte si différent> }}
[edit] ifexist
ifexist retourne une chaîne selon l'existence ou non d'une page.
{{#ifexist: <nom de la page> | <texte si la page existe> | <texte si la page n'existe pas>}}
{{#ifexist:}} ne gère pas les chemins relatifs (comme '../foo') ; pour cela, l'utiliser en combinaison avec {{#rel2abs:}}.
[edit] switch
switch compare une valeur unique à plusieurs autres et renvoie une chaîne si une correspondance est trouvée. La syntaxe est principalement :
{{ #switch: <valeur à comparer>
| <valeur1> = <résultat1>
| <valeur2> = <résultat2>
| ...
| <valeurn> = <résultatn>
| <résultat par défaut>
}}
switch cherchera à travers toutes les valeurs jusqu'à ce qu'une correspondance soit trouvée. Lorsque la correspondance est trouvée, le résultat pour cette valeur est renvoyée (la chaîne de texte après le signe égal). Si aucune correspondance n'a été trouvée, le dernier résultat trouvé n'ayant pas de signe égal sera renvoyé comme texte par défaut. Si votre résultat par défaut doit comporter un signe égal, vous devez utiliser #default :
{{ #switch: <valeur à comparer>
| <valeur> = <résultat>
| #default = <résultat par défaut>
}}
Notez qu'il est également possible d'avoir une « dégringolade » de valeurs (qui réduit la nécessité de résultats dupliqués). Par exemple :
{{ #switch: <valeur à comparer>
| <valeur1>
| <valeur2>
| <valeur3> = <résultat3>
| ...
| <valeurn> = <résultatn>
| <résultat par défaut>
}}
Notez la façon dont les valeur1 et valeur2 n'ont pas de signe égal. Si elles entrent en correspondance, elles auront alors le résultat de la valeur3 (c'est-à-dire que nous aurons le résultat3).
En revanche, (contrairement au switch de nombreux langages de programmation) le code suivant n'est pas possible :
{{ #switch: <valeur à comparer>
| <valeur1>
| <valeur2> = <résultat1>
| ...
| <valeur1> = <résultatn>
| <résultat par défaut>
}}
Si la <valeur à comparer> est <valeur1>, le résultat sera <résultat1> seulement. Il faut donc dans ce cas, employer un deuxième switch.
[edit] expr
La fonction expr calcule des expressions mathématiques. La syntaxe est :
{{ #expr: expression }}
Les opérateurs supportés (classés par ordre de priorité de traitement) sont :
-
Opérateur Opération Exemple * Multiplication {{#expr: 30 * 7}} = 210 / ou div Division {{#expr: 30 / 7}} = 4.2857142857143 + Addition {{#expr: 30 + 7}} = 37 - Soustraction (ou négation) {{#expr: 30 - 7}} = 23 mod Modulo, donnant le reste d'une division euclidienne ;
ce reste a le même signe que le quotient et est inférieur
strictement, en valeur absolue, à la valeur absolue du diviseur{{#expr: 30 mod 7}} = 2 round Arrondit un nombre au nombre spécifié
ou limite le nombre de décimales après la virgule{{#expr: 30 / 7 round 7}} = 4.2857143 = Égalité {{#expr: 30 = 7}} = 0 <> ou != Inégalité {{#expr: 30 <> 7}} = 1 < Inférieur à {{#expr: 30 < 7}} = 0 > Supérieur à {{#expr: 30 > 7}} = 1 <= Inférieur ou égal à {{#expr: 30 <= 7}} = 0 >= Supérieur ou égal à {{#expr: 30 >= 7}} = 1 and ET logique {{#expr: 30 and 7}} = 1 or OU logique {{#expr: 30 or 7}} = 1 not NON logique {{#expr: not 7}} = 0 ( ) Groupage d'opérateurs {{#expr: (30 + 7) * 7 }} = 259
Les opérateurs booléens considèrent 0 comme faux et 1 comme vrai. Les nombres ont leur décimale marquée par le point décimal « . ». Les notations scientifiques de type Fortran ne sont pas supportées.
Exemple :
{{ #expr: (100 - 32) / 9 * 5 round 0 }}
donne :
38
qui correspond à 100 °F converti en °C, résultat arrondi au nombre entier le plus proche.
[edit] ifexpr
ifexpr évalue une expression mathématique et renvoie une ou deux chaînes selon le résultat.
{{ #ifexpr: <expression> | <alors texte> | <sinon texte> }}
Si l'expression est évaluée à zéro, alors sinon texte est renvoyé, sinon c'est alors texte qui sera renvoyé. La syntaxe des expressions est la même que pour expr.
[edit] time
La ParserFunction #time évalue l'heure courante sur le serveur (UTC sur les sites de la fondation WikiMedia). Son paramètre est une chaîne de format, dont certaines lettres sont reconnues pour générer un champ basé sur l'heure actuelle, les autres caractères de la chaîne étant conservés verbatim dans le résultat (ces chaînes de format sont identiques à celles supportées dans le langage de programmation PHP utilisé sur le serveur). Les valeurs non numériques retournées dépendent de la la locale du serveur (langue, conventions locales de dates et heures, fuseau horaire), en anglais et à l'heure UTC sur le serveur Meta de WikiMedia :
(explication des champs à compléter)
|
|
[edit] rel2abs
rel2abs convertit un chemin relatif en un chemin absolu.
{{#rel2abs: <chemin>}}
{{#rel2abs: <chemin> | <chemin de base> }}
Un chemin relatif est un chemin commençant par '/', './', '../', contenant '/../' ou '/.', ou est simplement la chaîne '..' ou '.'. Si un chemin de base est donné, il doit être défini de façon absolue.
[edit] subst
L'emploi de subst à une fonction du parseur fonctionne, à condition qu'il n'y ait aucun espace entre « subst: » et « # ». Voir également la substitution récursive optionnelle.
[edit] Tableaux
Actuellement, la syntaxe du pipe des tableaux du wiki ne fonctionne pas au sein des conditionnelles, il y a deux moyens de contourner le problème :
- cacher le pipe de la fonction parseur en le mettant dans un modèle, par exemple {{!}}
- utiliser la syntaxe html des tableaux à la place (solution préférable dans le code des modèles).
[edit] Installation
Ne concerne que ceux qui ont installé un autre wiki sur leur propre site et désirent intégrer cette fonction. Téléchargez les quatre fichiers suivants et placez-les dans un nouveau répertoire appelé ParserFunctions dans votre répertoire extensions.
Ensuite, placez le texte suivant à la fin de votre LocalSettings.php :
require_once( "$IP/extensions/ParserFunctions/ParserFunctions.php" );
Vous pouvez également voir l'arborescence du code ici :
[edit] 1.6
La plupart des ParserFunctions (à l'exception de #if, qui ne fonctionne pas du tout) fonctionnent aussi bien dans MediaWiki 1.6, mais la syntaxe des ParserFunctions est précédée du caractère '#'. Si vous voulez ajouter le caractère '#', recherchez cette partie du code dans ParserFunctions.php:
$wgParser->setFunctionHook( 'expr', array( &$wgExtParserFunctions, 'expr' ) ); $wgParser->setFunctionHook( 'if', array( &$wgExtParserFunctions, 'ifHook' ) ); $wgParser->setFunctionHook( 'ifeq', array( &$wgExtParserFunctions, 'ifeq' ) ); $wgParser->setFunctionHook( 'ifexpr', array( &$wgExtParserFunctions, 'ifexpr' ) ); $wgParser->setFunctionHook( 'switch', array( &$wgExtParserFunctions, 'switchHook' ) );
Puis, replacez avec ce code :
$wgParser->setFunctionHook( '#expr', array( &$wgExtParserFunctions, 'expr' ) ); $wgParser->setFunctionHook( '#if', array( &$wgExtParserFunctions, 'ifHook' ) ); $wgParser->setFunctionHook( '#ifeq', array( &$wgExtParserFunctions, 'ifeq' ) ); $wgParser->setFunctionHook( '#ifexpr', array( &$wgExtParserFunctions, 'ifexpr' ) ); $wgParser->setFunctionHook( '#switch', array( &$wgExtParserFunctions, 'switchHook' ) );
[edit] Voir aussi
- Help:Extension:ParserFunctions pour une aide plus détaillée et à jour ;
- Extension:StringFunctions ;
- Extension:DynamicFunctions ;
- Extension:VariablesExtension.