Extension:LoopFunctions
LoopFunctions État de la version : stable |
|
---|---|
Implémentation | Fonction d'analyseur |
Description | Permet de limiter le nombre de boucles dans le wikicode |
Auteur(s) | |
Dernière version | 2020-03-26 |
MediaWiki | 1.35+ |
PHP | 5.3+ |
Modifie la base de données |
Non |
Licence | Licence publique générale GNU v2.0 ou supérieur |
Téléchargement | |
Téléchargements trimestriels | 4 (Ranked 132nd) |
Traduire l’extension LoopFunctions sur translatewiki.net si elle y est disponible | |
L'extension LoopFunctions permet une fonctionnalité de boucle limitée dans le wikicode, où une variable ($n$
par défaut) est remplacée par le numéro courant d'itération de la boucle.
La variable peut être utilisée dans un texte simple ou un lien.
Le résultat de l'ensemble de la boucle peut également être inséré dans une expression, par exemple pour calculer une factorielle.
Cependant, le corps de boucle est évalué avant de remplacer la variable, de sorte qu'un calcul à l'intérieur de ce corps de boucle en fonction de la valeur de la variable, n'est pas possible.
Fonctions
#for
{{#for: n | text }}
Où n est le nombre d'itérations et le texte est le texte à répéter.
{{#for: n | text | paramètre de remplacement }}
Si, après l'expansion des modèles, des fonctions de parser et des variables, le texte contient le texte $n$
ou ce qui est défini par le troisième paramètre, il sera remplacé par l'itération actuelle, à partir de 1.
Attention aux espaces, car le code génère stringstringstring
|
Utilisation dans les modèles
En appelant le modèle {{foo | n=4 | list1=a | list3=c | list4=d }}
, si le modèle foo contient: {{#for: {{{n}}} | {{{list$n$}}}<br/>}}
, cela donnera le wikicode : a<br/>b<br/>c<br/>d<br/>
Utilisation pour le calcul
Total des carrés de 1^2 à 5^2 : {{#expr:{{#for:5|+$n$*$n$}}}}
donne 55
Factorielle 6 (6!): {{#expr:1{{#for:6|*$n$}}}}
donne 720
{{#expr:{{for|call=plus square|pv=1|1|2|3|4|5}}}}
donne 55; pour la liste des carrés il semble que nous puissions utiliser seulement for
et non #for
.Limitation
Dans le corps de boucle, les modèles, les fonctions d'analyse et les variables sont expansées avant de remplacer la variable d'index par ses valeurs, à savoir :
- Paramètre d'une fonction d'analyse basé sur la variable d'index
-
- Le code
{{#for:3|{{lc:Ab$n$}}}}
donneab1ab2ab3
; le résultat est dans ce cas le même que lorsque la répétition a été faite en premier, puis l'évaluation de chaque élément. - Le code
{{#for:3|{{uc:Ab$n$}}}}
donneAB$N$AB$N$AB$N$
; le résultat n'est pas le même dans ce cas, parce que$n$
est changé en$N$
, et donc il n'est pas traité comme une variable d'index. - L'application de #expr à une expression contenant la variable d'index ne fonctionne pas : l'expansion de #expr dans par exemple
{{#expr:2*$n$}}
donne le texte qui sera répété :Expression error: Unrecognised punctuation character "$"
- Le code
- Nom du modèle fonction de la variable d'index
-
- Le code
{{#for:3|{{a$n$}}}}
donne :- [[Template:a1]] [[Template:a2]] [[Template:a3]] si le modèle avec le nom littéral
Template:a$n$
n'existe pas. Le corps de boucle est évalué comme [[Template:a$n$]], après quoi la fonction de la boucle le répète en remplaçant$n$
. - le résultat de
{{a*$n$}}{{a*$n$}}{{a*$n$}}
si le modèle avec le nom littéralTemplate:a$n$
existe. C'est-à-dire que le contenu est répété inchangé.
- [[Template:a1]] [[Template:a2]] [[Template:a3]] si le modèle avec le nom littéral
- Le code
- Limitation combinée avec Extension:Variables
- Dans la boucle, une variable peut recevoir une valeur fonction de l'indice de boucle et la valeur de cette variable peut être récupérée.
- Cependant, il semble que dans la boucle, la variable ne peut pas recevoir une nouvelle valeur dépendant de sa propre valeur courante. Au lieu de cela, sa valeur à l'entrée de la boucle, est prise.
#foreach
Ne fonctionne que s'il est utilisé par un modèle.
{{#foreach: mask | text }}
{{#foreach: mask | text | paramètre de remplacement }}
mask est une chaîne au format prefix$n$suffix où $n$
peut être modifié via le paramètre de substitution.
La fonction #foreach, appelée à l'intérieur d'un modèle, produira le texte pour $n$ = 1, 2, 3,... tant que prefix$n$suffix est un paramètre de modèle défini dans l'appel du modèle.
Si le texte contient le texte $n$
ou ce qui est défini par le troisième paramètre, celui-ci sera remplacé par la valeur courante de $n$
.
Il semble que l'ensemble de l'appel à #foreach soit ignoré si le corps de boucle contient un appel de modèle ou un appel de fonction d'analyse syntaxique, ou si le corps de boucle ne contient pas {{{$n$}}}.
Exemple
L'appel du modèle {{foo | foo2_bar=a | foo1_bar=b | a=12 | 6 | foo4_bar=c }}
en utilisant le modèle foo, contenant {{#foreach: foo$n$_bar | foo$n$_bar = {{{foo$n$_bar}}}<br/>}}
donnera le wikicode expansé foo1_bar = b<br/>foo2_bar = a<br/>
et donc la sortie :
- foo1_bar = b
- foo2_bar = a
Étant donné que foo3_bar
n'est pas défini, foo4_bar
n'est également pas répertorié; ni a et 1
, les noms des paramètres qui existent mais qui ne correspondent pas au modèle.
Utilisation sans préfixe ou suffixe
Le code {{showpars | abc | de | w=fgh | ijk}}
appelle Template:Showpars contenant {{#foreach: $n$ | $n$ = {{{$n$}}}<br/>}}
et donne :
- 1 = abc
- 2 = de
- 3 = ijk
Contenu d'un modèle qui lie les pages données par les valeurs des paramètres non nommés :
{{#foreach:$n$|[[{{{$n$}}}]]<nowiki> </nowiki>}}
Installation
- Téléchargez et placez le(s) fichier(s) dans un répertoire appelé
LoopFunctions
dans votre dossierextensions/
.
Les développeurs et les contributeurs au code doivent à la place installer l'extension à partir de Git en utilisant:cd extensions/
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/LoopFunctions - Ajoutez le code suivant à la fin de votre fichier LocalSettings.php :
wfLoadExtension( 'LoopFunctions' );
- Fait – Accédez à Special:Version sur votre wiki pour vérifier que l'extension a bien été installée.