Extension:LoopFunctions
LoopFunctions Stav rozšíření: stabilní |
|
---|---|
Implementace | Funkce analyzátoru |
Popis | Poskytuje funkce, které umožňují zpracovávat wikitext ve smyčce, do předem stanoveného maximálního počtu cyklů |
Autoři | |
Nejnovější verze | 2020-03-26 |
MediaWiki | 1.35+ |
PHP | 5.3+ |
Změny v databázi | Ne |
Licence | GNU General Public License 2.0 nebo novější |
Stáhnout | |
Čtvrtletní stahování | 4 (Ranked 126th) |
Přeložte rozšíření LoopFunctions, používá-li lokalizaci z translatewiki.net | |
Rozšíření LoopFunctions poskytuje funkce, které umožňují pracovat s wikitextem v opakovaných cyklech (smyčkách), kdy postupně nahrazují proměnnou (výchozí $n$
) pořadovým číslem aktuálního cyklu.
Tahle proměnná se může vyskytovat jak v běžném textu, tak v odkazu.
Výsledek zpracování lze použít jako parametry jiného výrazu, například pro výpočet faktoriálu.
Protože se kód smyčky generuje dřív, než dojde k nahrazení proměnné, není možné udělat výpočet již během zpracování v rámci jednoho cyklu.
Funkce
#for
{{#for: n | text }}
Kde n je počet cyklů a text řetězec, se kterým se bude pracovat.
{{#for: n | text | řetězec, který má být nahrazován }}
Pokud bude po interpretaci šablon, parsovacích funkcí a proměnných text obsahovat řetězec $n$
nebo řetězec, který má být nahrazován
, definovaným třetím parametrem, bude nahrazen pořadovým číslem aktuálního cyklu, které se počítají od 1.
Pozor na mezery. Kód vygeneruje řetězec stringstringstring
|
Použití v šablonách
Volání šablony {{foo | n=4 | list1=a | list3=c | list4=d }}
, pokud šablona foo obsahuje: {{#for: {{{n}}} | {{{list$n$}}}<br/>}}
, bude mít za následek wikitext: a<br/>b<br/>c<br/>d<br/>
Použití při výpočtech
Součet čtverců 1^2 až 5^2: {{#expr:{{#for:5|+$n$*$n$}}}}
dává 55
Faktor 6 (6!): {{#expr:1{{#for:6|*$n$}}}}
dává 720
{{#expr:{{for|call=plus square|pv=1|1|2|3|4|5}}}}
dává 55; pro seznam čtverců se zdá, že můžeme použít pouze for
, nikoli #for
.
Omezení
V těle smyčky jsou šablony, funkce analyzátoru a proměnné rozbaleny před nahrazením proměnné indexu jejími hodnotami, tj.:
- Parametr funkce analyzátoru v závislosti na proměnné indexu
-
- Kód
{{#for:3|{{lc:Ab$n$}}}}
dáváab1ab2ab3
. Výsledek je v tomto případě stejný, jako když bylo nejprve provedeno opakování a poté hodnocení každé položky. - Kód
{{#for:3|{{uc:Ab$n$}}}}
dáváAB$N$AB$N$AB$N$
. Výsledek v tomto případě není stejný, protože$n$
se změní na$N$
, a proto se s ním nezachází jako s proměnnou indexu. - Použití #expr na výraz obsahující proměnnou index nefunguje: Rozšíření #expr v např.
{{#expr:2*$n$}}
dává text, takže tento text se bude opakovat:Chyba výrazu: Nerozpoznaný interpunkční znak "$"
- Kód
- Název šablony v závislosti na proměnné indexu
-
- Kód
{{#for:3|{{a$n$}}}}
dává:- pokud šablona s doslovným názvem
Template:a$n$
neexistuje: Template:a1 Template:a2 Template:a3 (tělo smyčky je vyhodnoceno jako Template:a$n$, načež to funkce smyčky zopakuje a nahradí$n$
). - pokud šablona s doslovným názvem
Template:a$n$
existuje: výsledek{{a*$n$}}{{a*$n$}}{{a*$n$}}
, tj. obsah se opakuje beze změny.
- pokud šablona s doslovným názvem
- Kód
- Omezení v kombinaci s Extension:Variables
- V rámci smyčky lze proměnné přiřadit hodnotu v závislosti na proměnné smyčky a hodnotu této proměnné lze načíst.
- Zdá se však, že v rámci smyčky proměnné nelze přiřadit novou hodnotu v závislosti na její vlastní aktuální hodnotě. Místo toho se bere hodnota při vstupu do smyčky.
#foreach
Funkce pouze pro použití šablony.
{{#foreach: mask | text }}
{{#foreach: mask | text | řetězec, který má být nahrazován }}
mask je řetězec ve formátu prefix$n$suffix, kde $n$
lze změnit pomocí parametru nahrazení.
Funkce #foreach, volaná uvnitř šablony, vytvoří text pro $n$ = 1, 2, 3,..., pokud je prefix$n$suffix parametr šablony definovaný ve volání šablony.
Pokud text obsahuje text $n$
nebo to, co je definováno třetím parametrem, bude nahrazeno aktuální hodnotou $n$
.
Zdá se, že celé volání #foreach je ignorováno, pokud tělo smyčky obsahuje volání šablony nebo volání funkce analyzátoru, nebo pokud tělo smyčky neobsahuje {{{$n$}}}.
Příklad
Volání šablony {{foo | foo2_bar=a | foo1_bar=b | a=12 | 6 | foo4_bar=c }}
pomocí šablony foo obsahující: {{#foreach: foo$n$_bar | foo$n$_bar = {{{foo$n$_bar}}}<br/>}}
bude mít za následek rozšířený wikitext foo1_bar = b<br/>foo2_bar = a<br/>
a tedy výstup:
- foo1_bar = b
- foo2_bar = a
Vzhledem k tomu, že foo3_bar
není definován, není uveden ani foo4_bar
. Ani a a 1
, názvy parametrů, které existují, ale neodpovídají vzoru.
Použití bez prefixu či suffixu
Kód {{showpars | abc | de | w=fgh | ijk}}
volaný Template:Showpars obsahující {{#foreach: $n$ | $n$ = {{{$n$}}}<br/>}}
a dává:
- 1 = abc
- 2 = de
- 3 = ijk
Obsah šablony, která odkazuje na stránky dané hodnotami nepojmenovaných parametrů:
{{#foreach:$n$|[[{{{$n$}}}]]<nowiki> </nowiki>}}
Instalace
- Stáhněte soubor/y a vložte je do adresáře pojmenovaného
LoopFunctions
ve vaší složceextensions/
.
Vývojáři a přispěvatelé kódu by si místo toho měli nainstalovat rozšíření from Git pomocí:cd extensions/
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/LoopFunctions - Na konec vašeho souboru LocalSettings.php přidejte následující kód:
wfLoadExtension( 'LoopFunctions' );
- Dokončeno – Přejděte na stránku Special:Version vaší wiki a zkontrolujte, zda bylo rozšíření úspěšně nainstalováno.