Rozšíření:LoopFunctions

From mediawiki.org
This page is a translated version of the page Extension:LoopFunctions and the translation is 100% complete.
Základní informace k tomuto rozšíření MediaWiki
LoopFunctions
Stav rozšíření: stabilní
Zavádění 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ů
Napsal(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 pozdější
Zdrojový kód
Čtvrtletní stahování 5 (Ranked 142nd)
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.

Standardně je počet iterací omezen na 100 cyklů v průběhu jedné relace.

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.

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

Porovnejte s použitím m:Template:for a m:Template:plus square: {{#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 "$"
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.
Omezení v kombinaci s Rozšíření: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žce extensions/.
    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' );
    
  • Yes Dokončeno – Přejděte na stránku Special:Version vaší wiki a zkontrolujte, zda bylo rozšíření úspěšně nainstalováno.

Související stránky