Jump to content

Extension:LoopFunctions

From mediawiki.org
This page is a translated version of the page Extension:LoopFunctions and the translation is 100% complete.
Manuel des extensions MediaWiki
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 133rd)
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.

Par définition, le nombre d'itérations est limité à 100 itérations par session.

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.

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

Comparer à l'utilisation de m:Template:for et m:Template:plus square : {{#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$}}}} donne ab1ab2ab3; 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$}}}} donne AB$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 "$"
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éral Template:a$n$ existe. C'est-à-dire que le contenu est répété inchangé.
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$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 dossier extensions/.
    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' );
    
  • Yes Fait – Accédez à Special:Version sur votre wiki pour vérifier que l'extension a bien été installée.

Voir aussi