Nápověda:Rozšíření:Funkce parseru
Rozšíření ParserFunctions poskytuje jedenáct dalších syntaktických funkcí pro doplnění "magických slov ", které jsou již na MediaWiki přítomny. (Může být nakonfigurován tak, aby poskytoval další funkce syntaktického analyzátoru pro zpracování řetězců; tyto řetězcové funkce jsou dokumentovány někde jinde .) Všechny funkce analyzátoru poskytované tímto rozšířením mají podobu:
{{#functionname: argument 1 | argument 2 | argument 3 ... }}
#expr
Typ | Operátoři |
---|---|
Seskupení (závorky) | ( )
|
Čísla | 1234.5 e (2.718) pi (3.142)
|
binární operátor e unární + ,-
| |
Unární | not ceil trunc floor abs exp ln sin cos tan acos asin atan
|
Binární | ^
|
* / div mod
| |
+ -
| |
Kolo | round
|
Logika | = != <> > < >= <=
|
and
| |
or
|
Tato funkce vyhodnocuje matematický výraz a vrací vypočítanou hodnotu.
Tato funkce je k dispozici také v Scribunto prostřednictvím funkce mw.ext.ParserFunctions.expr
.
{{#expr: výraz }}
Dostupné operátory jsou uvedeny vpravo, v pořadí podle priority. Viz Nápověda:Výpočet pro více informací o funkci každého operátora. Přesnost a formát vráceného výsledku se bude lišit v závislosti na operačním systému serveru, na kterém je spuštěna wiki, a na formátu čísla jazyka webu.
Při vyhodnocování pomocí boolean algebry se nula vyhodnocuje na false
a jakákoli nenulová hodnota, kladná nebo záporná, se vyhodnocuje na true
:
{{#expr: 1 and -1 }}
→ 1{{#expr: 1 and 0 }}
→ 0{{#expr: 1 or -1 }}
→ 1{{#expr: -1 or 0 }}
→ 1{{#expr: 0 or 0 }}
→ 0
Prázdný vstupní výraz vrací prázdný řetězec. Neplatné výrazy vracejí jednu z několika chybových zpráv, které lze zachytit pomocí funkce #iferror
:
{{#expr: }}
→{{#expr: 1+ }}
→ Expression error: Missing operand for +.{{#expr: 1 = }}
→ Expression error: Missing operand for =.{{#expr: 1 foo 2 }}
→ Expression error: Unrecognized word "foo".
Pořadí sčítání a odčítání operandů před nebo za číslem je smysluplné a lze s ním zacházet jako s kladnou nebo zápornou hodnotou namísto s operandem s chybným vstupem:
{{#expr: +1 }}
→ 1{{#expr: -1 }}
→ -1{{#expr: + 1 }}
→ 1{{#expr: - 1 }}
→ -1
Pokud používáte výstup magických slov, musíte je nejprve naformátovat, abyste odstranili čárky a přeložili číslice. Například {{NUMBEROFUSERS}} má za následek 17 466 271, kde chceme 17466271, které lze získat pomocí {{formatnum :{{NUMBEROFUSERS}}|R}}
. To je obzvláště důležité v některých jazycích, kde jsou přeloženy číslice. Například v bengálštině {{NUMBEROFUSERS}} produkuje ৩০,০৬১.
{{#expr:{{NUMBEROFUSERS}}+100}}
→ Expression error: Unrecognized punctuation character " ".{{#expr:{{formatnum:{{NUMBEROFUSERS}}|R}}+100}}
→ 17466371
Zaokrouhlování
Rounds z čísla nalevo na násobek 1/10 zvýšené na mocninu, s exponentem rovným zkrácené hodnotě čísla uvedeného napravo.
Chcete-li zaokrouhlit nahoru nebo dolů, použijte unary ceil
nebo floor
resp.
Modelový případ | Výsledek | Metoda zaokrouhlování |
---|---|---|
{{#expr: 1/3 round 5 }} |
0.33333 | Konečná číslice je <5, takže nedochází ke zjevnému zaokrouhlování |
{{#expr: 1/6 round 5 }} |
0.16667 | Konečná číslice je ≥5, takže je zaokrouhlena nahoru |
{{#expr: 8.99999/9 round 5 }} |
1 | Výsledek se opět zaokrouhlí nahoru na poslední číslici, což má za následek další zaokrouhlování |
{{#expr: 1234.5678 round -2 }} |
1200 | Zaokrouhleno na nejbližší 100, protože záporné hodnoty se zaokrouhlí doleva od desetinné čárky |
{{#expr: 1234.5678 round 2 }} |
1234.57 | Zaokrouhleno na nejbližší setinu, protože kladné hodnoty se zaokrouhlí vpravo od desetinné čárky |
{{#expr: 1234.5678 round 2.3 }} |
1234.57 | Desetinná čísla v zaokrouhlovacím indexu nezmění výsledek zaokrouhlených |
{{#expr: trunc 1234.5678 }} |
1234 | Desetinná část je zkrácena (odříznutá) |
Zaokrouhlování na nejbližší celé číslo | ||
{{#expr: 1/3 round 0 }} |
0 | Až na nejbližší celé číslo, které je nula |
{{#expr: 1/2 round 0 }} |
1 | Až na nejbližší celé číslo, které je jedna |
{{#expr: 3/4 round 0 }} |
1 | Až na nejbližší celé číslo, které je jedna |
{{#expr: -1/3 round 0 }} |
-0 | Až na nejbližší celé číslo, které je nula |
{{#expr: -1/2 round 0 }} |
-1 | Dolů na nejbližší celé číslo, které je záporné |
{{#expr: -3/4 round 0 }} |
-1 | Dolů na nejbližší celé číslo, které je záporné |
Zaokrouhlování nahoru nebo dolů ceil nebo floor | ||
{{#expr: ceil(1/3) }} |
1 | Až do dalšího většího celého čísla, které je jedna |
{{#expr: floor(1/3) }} |
0 | Až na další menší číslo, které je nula |
{{#expr: ceil(-1/3) }} |
-0 | Až do dalšího většího čísla, které je nula |
{{#expr: floor(-1/3) }} |
-1 | Až na další menší celé číslo, které je záporné |
{{#expr: ceil 1/3 }} |
0.33333333333333 | Není zaokrouhlené, protože 1 je již celé číslo |
Řetězce
Výrazy fungují pouze s číslovými hodnotami, nemohou porovnávat řetězce nebo znaky. Místo toho lze použít #ifeq.
{{#expr: "a" = "a" }}
→ Expression error: Unrecognized punctuation character """.{{#expr: a = a }}
→ Expression error: Unrecognized word "a".{{#ifeq: a | a | 1 | 0 }}
→ 1
#if
Tato funkce vyhodnocuje testovací řetězec a určuje, zda je nebo není prázdný. Zkušební řetězec obsahující pouze mezeru je považován za prázdný.
{{#if: testovací řetězec | hodnota, pokud testovací řetězec není prázdný | hodnota, pokud je testovací řetězec prázdný (nebo pouze prázdné místo) }}
{{#if: první parametr | druhý parametr | třetí parametr }}
Tato funkce nejprve otestuje, zda první parametr není prázdný. Pokud není první parametr prázdný, funkce zobrazí druhý argument. Pokud je první parametr prázdný nebo obsahuje pouze prázdná místa (mezery, řádky atd.), zobrazí se třetí argument.
{{#if: | yes | no}}
→ no{{#if: string | yes | no}}
→ yes{{#if: | yes | no}}
→ no{{#if:
→ no
| yes | no}}
Testovací řetězec je vždy interpretován jako čistý text, takže matematické výrazy se nevyhodnocují:
{{#if: 1==2 | yes | no }}
→ yes{{#if: 0 | yes | no }}
→ yes
Poslední parametr (false) může být vynechán:
{{#if: foo | yes }}
→ yes{{#if: | yes }}
→{{#if: foo | | no}}
→
Funkce může být vnořena. Chcete-li to provést, vnořte vnitřní funkci #if v její plné podobě namísto parametru uzavírací funkce #if. Je možné až sedm úrovní vnoření. Může záviset na wiki nebo na omezení paměti.
{{#if: testovací řetězec | hodnota, pokud zkušební řetězec není prázdný | {{#if: testovací řetězec | hodnota, pokud zkušební řetězec není prázdný | hodnota, pokud je testovací řetězec prázdný (nebo pouze prázdné místo) }} }}
Parametr můžete také použít jako testovací řetězec v příkazu #if. Musíte se ujistit, že za název proměnné přidáte |
(symbol kanálu, svislítko, svislá čára).
(Pokud parametr nemá hodnotu, vyhodnotí se jako řetězec "{{{1}}}
" na prázdný řetězec.)
{{#if:{{{1|}}}|Zadali jste text v proměnné 1|Neexistuje žádný text v proměnné 1 }}
Viz Help:Parser functions in templates , kde jsou další příklady této funkce analyzátoru.
#ifeq
Tato syntaktická funkce porovnává dva vstupní řetězce. Určuje, zda jsou totožné a vrací jeden ze dvou řetězců na základě výsledku.
Pokud je požadováno další srovnání a výstupní řetězce, zvažte použití přepínače #switch
.
{{#ifeq: string 1 | string 2 | value if identical | value if different }}
Pokud mají oba řetězce platné číselné hodnoty, jsou řetězce porovnány numericky:
{{#ifeq: 01 | 1 | equal | not equal}}
→ equal{{#ifeq: 0 | -0 | equal | not equal}}
→ equal{{#ifeq: 1e3 | 1000 | equal | not equal}}
→ equal{{#ifeq: {{#expr:10^3}} | 1000 | equal | not equal}}
→ equal
Jinak je porovnání provedeno jako text; toto srovnání rozlišuje velká a malá písmena:
{{#ifeq: foo | bar | equal | not equal}}
→ not equal{{#ifeq: foo | Foo | equal | not equal}}
→ not equal{{#ifeq: "01" | "1" | equal | not equal}}
→ not equal (porovnání s podobným příkladem výše, bez uvozovek){{#ifeq: 10^3 | 1000 | equal | not equal}}
→ not equal (ve srovnání s podobným příkladem výše, přičemž#expr
vrací první platné číslo)
Jako praktický příklad zvažte existující šablonu Template:Timer
. Pomocí parseru vyberte mezi dvěma standardními časy, krátkými a dlouhými.
Tento parametr bere jako první vstup k porovnání s řetězcem "short" – neexistuje žádná konvence pro objednávku, ale je jednodušší přečíst, pokud je parametr první.
Kód šablony je definován jako:
{{#ifeq: {{{1|}}} | short | 20 | 40 }}
následující výsledek:
{{timer|short}}
→ 20{{timer|20}}
→ 40{{timer}}
→ 40
#iferror
Tato funkce vezme vstupní řetězec a vrátí jeden ze dvou výsledků; funkce se vyhodnotí na true
, pokud vstupní řetězec obsahuje objekt HTML s chybou class="error"
, generovaný jinými funkcemi analyzátoru, jako jsou #expr
, #time
a #rel2abs
, chyby šablony, jako jsou smyčky a rekurze a další chyby analyzátoru „failsoft“.
{{#iferror: test string | value if error | value if correct }}
Jeden nebo oba zpětné řetězce lze vynechat. Pokud je řetězec correct
(správný) vynechán, je vrácen testovací řetězec test string
, pokud není chybný. Pokud je také vynechán řetězec error
, vrací se při chybě prázdný řetězec:
{{#iferror: {{#expr: 1 + 2 }} | error | correct }}
→ correct{{#iferror: {{#expr: 1 + X }} | error | correct }}
→ error{{#iferror: {{#expr: 1 + 2 }} | error }}
→ 3{{#iferror: {{#expr: 1 + X }} | error }}
→ error{{#iferror: {{#expr: 1 + 2 }} }}
→ 3{{#iferror: {{#expr: 1 + X }} }}
→ {{#iferror: {{#expr: . }} | error | correct }}
→ correct{{#iferror: <strong class="error">a</strong> | error | correct }}
→ error
#ifexpr
Tato funkce vyhodnocuje matematický výraz a vrací jeden ze dvou řetězců v závislosti na booleovské hodnotě výsledku:
{{#ifexpr: expression | value if true | value if false }}
Vstup expression
(výraz) je vyhodnocen přesně jako u #expr
výše, přičemž jsou k dispozici stejní operátoři. Výstup je pak vyhodnocen jako booleovský výraz.
Prázdný vstupní výraz je vyhodnocen jako false
:
{{#ifexpr: | yes | no}}
→ no
Jak bylo uvedeno výše, nula se vyhodnocuje jako false
a jakákoli nenulová hodnota se vyhodnocuje jako true
. Takže tato funkce je ekvivalentní jedné s použitím pouze #ifeq
a #expr
:
{{#ifeq: {{#expr: expression }} | 0 | value if false | value if true }}
s výjimkou prázdného nebo nesprávného vstupního výrazu (chybová zpráva je považována za prázdný řetězec; není rovno nule, takže dostaneme hodnotu value if true
).
{{#ifexpr: = | yes | no }}
→ Expression error: Unexpected = operator.
porovnání
{{#ifeq: {{#expr: = }} | 0 | no | yes }}
→ yes
Je možné vynechat jednu nebo obě zpětné hodnoty. Žádný výstup není uveden, když je příslušná větev ponechána prázdná:
{{#ifexpr: 1 > 0 | yes }}
→ yes{{#ifexpr: 1 < 0 | yes }}
→{{#ifexpr: 0 = 0 | yes }}
→ yes{{#ifexpr: 1 > 0 | | no}}
→{{#ifexpr: 1 < 0 | | no}}
→ no{{#ifexpr: 1 > 0 }}
→
#ifexist
Tato funkce vezme vstupní řetězec, interpretuje jej jako název stránky a vrací jednu ze dvou hodnot v závislosti na tom, zda stránka existuje na místní wiki.
{{#ifexist: page title | value if exists | value if doesn't exist }}
Funkce se vyhodnotí jako true
, pokud stránka existuje, ať už obsahuje obsah, je viditelně prázdná (obsahuje metadata, jako jsou odkazy kategorií nebo magická slova , ale není viditelný obsah), je prázdný nebo je přesměrovaný . Pouze stránky, které jsou přesměrovány, se vyhodnotí jako false
, včetně toho, zda stránka dříve existovala, ale byla odstraněna.
{{#ifexist: Help:Extension:ParserFunctions/cs | exists | doesn't exist }}
→ exists{{#ifexist: XXHelp:Extension:ParserFunctions/csXX | exists | doesn't exist }}
→ doesn't exist
Funkce se vyhodnotí jako true
pro systémové zprávy , které byly přizpůsobeny, a pro speciální stránky , které jsou definovány softwarem.
{{#ifexist: Special:Watchlist | exists | doesn't exist }}
→ exists{{#ifexist: Special:CheckUser | exists | doesn't exist }}
→ exists (protože na této wiki je nainstalováno rozšíření Checkuser ){{#ifexist: MediaWiki:Copyright | exists | doesn't exist }}
→ exists (protože hlášení Copyright bylo upraveno)
Pokud stránka zkontroluje cíl pomocí #ifexist:
, pokud existuje, pak se tato stránka objeví v seznamu Special:WhatLinksHere pro cílovou stránku. Pokud tedy byl kód {{#ifexist:Foo }}
zahrnut na této stránce v přímém přenosu (Help:Extension:ParserFunctions/cs), Special:WhatLinksHere/Foo uvede Help:Extension:ParserFunctions/cs.
Na wiki používajících sdílené úložiště médií lze #ifexist:
použít ke kontrole, zda byl soubor nahrán do úložiště, ale nikoli do samotné wiki:
{{#ifexist: File:Example.png | exists | doesn't exist }}
→ doesn't exist{{#ifexist: Image:Example.png | exists | doesn't exist }}
→ doesn't exist{{#ifexist: Media:Example.png | exists | doesn't exist }}
→ exists
Pokud byla pro soubor vytvořena stránka místního popisu, výsledkem je exists pro všechny výše uvedené.
#ifexist:
nefunguje s odkazy na interwiki.
pokud existují limity
#ifexist:
je považován za "drahou parserovou funkci". Na libovolnou stránku lze zahrnout pouze omezený počet funkcí (včetně funkcí uvnitř přenesených šablon). Pokud je tento limit překročen, všechny další funkce #ifexist:
automaticky vrátí false, ať už cílová stránka existuje nebo ne, a stránka je roztříděna do kategorie Category:Pages with too many expensive parser function calls. Název sledovací kategorie se může lišit v závislosti na jazyce obsahu vaší wiki.
Pro některé případy použití je možné emulovat efekt ifexist s css pomocí selektorů a.new
(pro výběr odkazů na neexistující stránky) nebo a:not(.new)
(pro výběr odkazů na existující stránky). Navíc, protože počet drahých syntaktických funkcí, které lze použít na jedné stránce, je řízen $wgExpensiveParserFunctionLimit
, lze také v případě potřeby zvýšit limit v LocalSettings.php.
pokud existují a hledané stránky
Stránka, která neexistuje a je testována na použití #ifexist, skončí na Hledaných stránkách.
#rel2abs
Tato funkce převádí relativní cestu k souboru na absolutní dráhu souboru.
{{#rel2abs: path }}
{{#rel2abs: path | base path }}
V rámci vstupu path
je platná následující syntaxe:
.
→ aktuální úroveň..
→ jít o jednu úroveň výše/foo
→ přejděte o jednu úroveň dolů do podadresáře /foo
Pokud není zadán base path
, bude místo toho použit celý název stránky:
{{#rel2abs: /quok | Help:Foo/bar/baz }}
→ Help:Foo/bar/baz/quok{{#rel2abs: ./quok | Help:Foo/bar/baz }}
→ Help:Foo/bar/baz/quok{{#rel2abs: ../quok | Help:Foo/bar/baz }}
→ Help:Foo/bar/quok{{#rel2abs: ../. | Help:Foo/bar/baz }}
→ Help:Foo/bar
Neplatná syntaxe, například /.
nebo /./
, je ignorována.
Protože není povoleno více než dvě po sobě jdoucí úplné zastávky, lze takové sekvence použít k oddělení následných příkazů:
{{#rel2abs: ../quok/. | Help:Foo/bar/baz }}
→ Help:Foo/bar/quok{{#rel2abs: ../../quok | Help:Foo/bar/baz }}
→ Help:Foo/quok{{#rel2abs: ../../../quok | Help:Foo/bar/baz }}
→ quok{{#rel2abs: ../../../../quok | Help:Foo/bar/baz }}
→ Error: Invalid depth in path: "Help:Foo/bar/baz/../../../../quok" (tried to access a node above the root node).
#switch
See also : w:Help:Switch parser function
Tato funkce porovnává jednu vstupní hodnotu s několika testovacími případy a v případě shody vrací přidružený řetězec.
{{#switch: comparison string | case = result | case = result | ... | case = result | default result }}
Příklady:
{{#switch: baz | foo = Foo | baz = Baz | Bar }}
→ Baz{{#switch: foo | foo = Foo | baz = Baz | Bar }}
→ Foo{{#switch: zzz | foo = Foo | baz = Baz | Bar }}
→ Bar
#switch s tagy částečného převodu může ovlivnit konfigurační soubor, který umožňuje editoru neobeznámenému s kódováním šablony prohlížet a upravovat konfigurovatelné prvky.
Výchozí
default result
(výchozí výsledek) je vrácen, pokud žádný řetězec case
neodpovídá comparison string
(srovnávacímu řetězci):
{{#switch: test | foo = Foo | baz = Baz | Bar }}
→ Bar
V této syntaxi musí být výchozím výsledkem poslední parametr a nesmí obsahovat nezpracované znaménko rovná se (znaménko rovná se bez {{}}
).
Pokud ano, bude se s ním zacházet jako s případovým porovnáním a pokud se neshodují žádné případy, nebude se zobrazovat žádný text.
Důvodem je, že výchozí hodnota nebyla definována (je prázdná).
Pokud se však případ shoduje, bude vrácen přidružený řetězec.
{{#switch: test | Bar | foo = Foo | baz = Baz }}
→{{#switch: test | foo = Foo | baz = Baz | B=ar }}
→{{#switch: test | test = Foo | baz = Baz | B=ar }}
→ Foo
Alternativně může být výchozí výsledek explicitně deklarován řetězcem case
z "#default
".
{{#switch: comparison string | case = result | case = result | ... | case = result | #default = default result }}
Výchozí výsledky deklarované tímto způsobem mohou být umístěny kdekoli v rámci funkce:
{{#switch: test | foo = Foo | #default = Bar | baz = Baz }}
→ Bar
Pokud je parametr default
vynechán a nedojde k žádné shodě, nevrací se žádný výsledek result
:
{{#switch: test | foo = Foo | baz = Baz }}
→
Výsledky seskupení
Je možné nechat hodnoty 'propadnout', když několik řetězců case
vrací stejný řetězec result
. To minimalizuje duplicitu.
{{#switch: comparison string | case1 = result1 | case2 | case3 | case4 = result234 | case5 = result5 | case6 | case7 = result67 | #default = default result }}
Zde se všechny případy 2, 3 a 4 vrátí result234
; případy 6 a 7 vrátí result67
.
"#default =
" v posledním parametru může být ve výše uvedeném případě vynechán.
Použití s parametry
Funkce může být použita s parametry jako zkušební řetězec.
V tomto případě není nutné umístit svislítko za název parametru, protože je velmi nepravděpodobné, že se rozhodnete nastavit případ jako řetězec "{{{parameter name}}}
".
(Toto je hodnota, kterou bude parametr přednastaven, pokud svislítko chybí a parametr neexistuje nebo nemá hodnotu.
Viz Help:Parser functions in templates .)
{{#switch: {{{1}}} | foo = Foo | baz = Baz | Bar }}
Ve výše uvedeném případě, pokud se {{{1}}}
rovná foo
, funkce vrátí Foo
.
Pokud se rovná baz
, funkce vrátí Baz
.
Pokud je parametr prázdný nebo neexistuje, vrátí funkce Bar
.
Stejně jako ve výše uvedené části lze případy kombinovat a získat jediný výsledek.
{{#switch: {{{1}}} | foo | zoo | roo = Foo | baz = Baz | Bar }}
Pokud se {{{1}}}
rovná foo
, zoo
nebo roo
, funkce vrátí Foo
.
Pokud se rovná baz
, funkce vrátí Baz
.
Pokud je parametr prázdný nebo neexistuje, vrátí funkce Bar
.
Kromě toho lze výchozí výsledek vynechat, pokud si nepřejete nic vrátit. Pokud se hodnota parametru testu neshoduje s žádným z případů.
{{#switch: {{{1}}} | foo = Foo | bar = Bar }}
V tomto případě funkce vrací prázdný řetězec, pokud neexistuje {{{1}}}
a je rovno foo
nebo bar
, v tomto případě vrací Foo
, respektive Bar
.
To má stejný účinek jako prohlášení výchozího výsledku za prázdný.
{{#switch: {{{1}}} | foo | zoo | roo = Foo | baz = Baz | }}
Pokud se z nějakého důvodu rozhodnete nastavit případ jako "{{{parameter name}}}
", funkce vrátí výsledek tohoto případu, pokud parametr neexistuje nebo nemá hodnotu.
Parametr by musel existovat a mít jinou hodnotu než řetězec "{{{parameter name}}}
", aby vrátil výchozí výsledek funkce.
- (pokud
{{{1}}}
neexistuje nebo je prázdný):{{#switch: {{{1}}} | {{{1}}} = Foo | baz = Baz | Bar }}
→ Foo
- (když
{{{1}}}
má hodnotu "test
"):{{#switch: {{{1}}} | {{{1}}} = Foo | baz = Baz | Bar }}
→ Bar
- (když
{{{1}}}
má hodnotu{{{1}}}
):{{#switch: {{{1}}} | {{{1}}} = Foo | baz = Baz | Bar }}
→ Foo
V tomto hypotetickém případě budete muset do parametru přidat svislítko ({{{1|}}}
).
Srovnávací chování
Stejně jako u #ifeq
je porovnání provedeno číselně, pokud porovnávaný řetězec i řetězec případu jsou číselné nebo jako řetězec citlivý na velikost písmen jinak:
{{#switch: 0 + 1 | 1 = one | 2 = two | three}}
→ three{{#switch: {{#expr: 0 + 1}} | 1 = one | 2 = two | three}}
→ one
{{#switch: a | a = A | b = B | C}}
→ A{{#switch: A | a = A | b = B | C}}
→ C
Řetězec case
může být prázdný:
{{#switch: | = Nothing | foo = Foo | Something }}
→ Nothing
Jakmile je nalezena shoda, následující cases
(případy) jsou ignorovány:
{{#switch: b | f = Foo | b = Bar | b = Baz | }}
→ Bar
Prosté znaky rovná se
Řetězce "Case" nemohou obsahovat prosté znaménka rovná se. Chcete-li tento problém vyřešit, vytvořte šablonu {{=}} obsahující jediné znaménko rovná se: =
nebo nahraďte znak rovná se html kódem =
.
Příklad:
{{#switch: 1=2
| 1=2 = raw
| 1<nowiki>=</nowiki>2 = nowiki
| 1{{=}}2 = template
| default
}}
→ template
{{#switch: 1=2
| 1=2 = html
| default
}}
→ html
Nahrazování #ifeq
#switch
lze použít ke snížení hloubky rozšíření.
Například:
{{#switch:{{{1}}} |condition1=branch1 |condition2=branch2 |condition3=branch3 |branch4}}
je ekvivalentní
{{#ifeq:{{{1}}}|condition1 |branch1 |{{#ifeq:{{{1}}}|condition2 |branch2 |{{#ifeq:{{{1}}}|condition3 |branch3 |branch4}}}}}}
tj. hluboké založení, lineární:
{{#ifeq:{{{1}}}|condition1
|<!--then-->branch1
|<!--else-->{{#ifeq:{{{1}}}|condition2
|<!--then-->branch2
|<!--else-->{{#ifeq:{{{1}}}|condition3
|<!--then-->branch3
|<!--else-->branch4}}}}}}
Na druhou stranu by výměna spínače mohla být komplikovaná / nepraktická pro IF vnořené do obou větví (zobrazeny s alternativami odsazení, odsazené na obou stranách), čímž by se vytvořil plný symetrický strom:
{{#ifeq:{{{1}}}|condition1
|<!--then-->branch1t{{
#ifeq:{{{1}}}|condition2
|<!--then-->branch1t2t{{#ifeq:{{{1}}}|condition4|<!--then-->branch1t2t4t|<!--else-->branch1t2t4e}}
|<!--else-->branch1t2e{{#ifeq:{{{1}}}|condition5|<!--then-->branch1t2e5t|<!--else-->branch1t2e5e}}
}}
|<!--else-->branch1e{{#ifeq:{{{1}}}|condition3
|<!--then-->branch1e3t{{#ifeq:{{{1}}}|condition6|branch1e3t6t|branch1e3t6e}}
|<!--else-->branch1e3e{{
#ifeq:{{{1}}}|condition7
|branch1e3e7t
|branch1e3e7t
}}
}}
}}
#time
Kód | Popis | Aktuální výstup (Purge this page's cache to update) |
---|---|---|
Rok | ||
Y
|
4místný rok. | 2021 |
y
|
Dvoumístný rok. | 21 |
L
|
1 pokud je to přestupný rok, 0 když ne. | 0 |
o [note 1]
|
ISO-8601 rok určeného týdne.[note 2] | 2021[note 3] |
Měsíc | ||
n
|
Měsíční index bez nuly. | 4 |
m
|
Měsíční index s doplněním nulou. | 04 |
M
|
Zkratka názvu měsíce v jazyce webu. | 4. |
F
|
Celý měsíc v jazyce webu. | duben |
xg
|
Vyplňte celý měsíc ve formuláři v genitivu pro jazyky stránek, které rozlišují mezi formáty genitive a nominative. Tato možnost je užitečná pro mnoho slovanských jazyků, jako je polština, ruština, běloruština, čeština, slovenština, slovinština, ukrajinština atd. | Pro polštinu:{{#time:F Y|June 2010|pl}} → czerwiec 2010(nominative (první pád)) {{#time:d xg Y|20 June 2010|pl}} → 20 czerwca 2010(genitiv) |
Den měsíce nebo roku | ||
j
|
Den v měsíci, bez doplnění nulou. | 15 |
d
|
Den v měsíci doplněný nulami | 15 |
z
|
Den roku (leden 1 = 0).![]() |
104 |
Týden a den v týdnu | ||
W
|
Číslo týdne ISO 8601, doplněný s nulovou hodnotou. | 15 |
N
|
ISO 8601 den v týdnu (pondělí = 1, neděle = 7). | 4 |
w
|
Číslo dne v týdnu (neděle = 0, sobota = 6). | 4 |
D
|
Zkratka pro den v týdnu. Zřídka internacionalizován. | čt |
l
|
Celý název dne v týdnu. Zřídka internacionalizován. | čtvrtek |
Hodina | ||
a
|
"am" ráno (00:00:00 → 11:59:59), "pm" jinak (12:00:00 → 23:59:59). | am |
A
|
Velká verze a výše.
|
AM |
g
|
Hodina ve 12hodinovém formátu, bez doplnění nulou. | 7 |
h
|
Hodina ve 12hodinovém formátu s doplněním nulou. | 07 |
G
|
Hodina ve 24hodinovém formátu, bez doplnění nulou. | 7 |
H
|
Hodina ve 24hodinovém formátu, s doplněním nulou. | 07 |
Minuty a sekundy | ||
i
|
Minuty za hodinu s doplněnou nulou. | 26 |
s
|
Sekundy za minutou s doplněnou nulou. | 29 |
U
|
Unix čas. Sekundy od 1. ledna 1970 00:00:00 GMT. | 1618471589 |
Časové pásmo (od 1.22wmf2) | ||
e
|
Identifikátor časového pásma. | UTC |
I
|
Zda je nebo není datum v letním čase. | 0 |
O
|
Rozdíl oproti greenwichskému času (GMT) | +0000 |
P
|
Rozdíl oproti Greenwichskému času (GMT) s dvojtečkou | +00:00 |
T
|
Zkratka časového pásma. | UTC |
Z
|
Posun časového pásma v sekundách. | 0 |
Různé | ||
t
|
Počet dní v aktuálním měsíci. | 30 |
c
|
Datum ve formátu ISO 8601, ekvivalent Y-m-d"T"H:i:s+00:00 .
|
2021-04-15T07:26:29+00:00 |
r
|
RFC 5322 formátované datum, ekvivalentní D, j M Y H:i:s +0000 , s názvem dne v týdnu a názvem měsíce není internacionalizováno.
|
Thu, 15 Apr 2021 07:26:29 +0000 |
Jiné než Gregoriánské kalendáře | ||
islámský | ||
xmj
|
Den v měsíci. | 3 |
xmF
|
Celé jméno měsíce. | ramadán |
xmn
|
Index měsíce. | 9 |
xmY
|
Celý rok. | 1442 |
Íránský (Jalaly) | ||
xit
|
Počet dní v aktuálním měsíci. | 31 |
xiz
|
Den v roce. | 25 |
xij
|
Den v měsíci. | 26 |
xiF
|
Celé jméno měsíce. | Farvardín |
xin
|
Index měsíce. | 1 |
xiY
|
Celý rok. | 1400 |
xiy
|
Dvoumístný rok. | 00 |
hebrejština | ||
xjj
|
Den v měsíci. | 3 |
xjF
|
Celé jméno měsíce. | ijar |
xjt
|
Počet dní v měsíci. | 29 |
xjx
|
Genitivní forma názvu měsíce. | ijaru |
xjn
|
Číslo měsíce. | 8 |
xjY
|
Celý rok. | 5781 |
Thajské solární | ||
xkY
|
Celý rok v thajském slunečním kalendáři. ![]() |
2564 |
Minguo / Juche rok | ||
xoY
|
Celý rok. | 110 |
Japonské nengo | ||
xtY
|
Celý rok. | 令和3 |
Příznaky | ||
xn
|
Naformátování dalšího číselného kódu jako nezpracovaného čísla ASCII. | V hindském jazyce {{#time:H, xnH}} produkuje ०६, 06.
|
xN
|
Jako xn , ale jako přepínaný příznak, který vydrží až do konce řetězce nebo do dalšího vzhledu xN v řetězci.
| |
xr
|
Naformátujte další číslo jako římskou číslici. Funguje pouze pro čísla do 10 000 (až 3 000 v předešlých verzích MediaWiki 1.20). |
{{#time:xrY}} → MMXXI
|
xh
|
Naformátujte další číslo jako hebrejskou číslici. | {{#time:xhY}} → ב'כ"א
|
Tato syntaktická funkce bere datum a nebo čas (v gregoriánském kalendáři) a formátuje je podle dané syntaxe. Lze určit objekt datum / čas. Výchozí hodnota je hodnota kouzelného slova {{CURRENTTIMESTAMP}}
, tj. čas, kdy byla stránka naposledy vykreslena do HTML.
{{#time: format string }}
{{#time: format string | date/time object }}
{{#time: format string | date/time object | language code }}
{{#time: format string | date/time object | language code | local }}
Seznam přijatých formátovacích kódů je uveden v tabulce vpravo. Jakýkoli znak ve formátovacím řetězci, který není rozpoznán, je předán nezměněný. To platí také pro mezery (systém je pro interpretaci kódů nepotřebuje). Existují také dva způsoby, jak uniknout znakům uvnitř formátovacího řetězce:
- Zpětné lomítko následované znakem formátování je interpretováno jako jediný literálový znak
- Znaky uzavřené ve dvojitých uvozovkách se považují za doslovné znaky a uvozovky se odstraní.
Kromě toho je digraph xx
interpretován jako jediné doslovné "x".
{{#time: Y-m-d }}
→ 2021-04-15{{#time: [[Y]] m d }}
→ 2021 04 15{{#time: [[Y (year)]] }}
→ 2021 (21UTCamThu, 15 Apr 2021 07:26:29 +0000){{#time: [[Y "(year)"]] }}
→ 2021 (year){{#time: i's" }}
→ 26'29"
Objekt date/time object
může být v jakémkoli formátu akceptovaném funkcí strtotime() v PHP. Jsou přijímány jak absolutní (např. 20 December 2000
), tak relativní (např. +20 hours
) časy.
{{#time: r|now}}
→ Thu, 15 Apr 2021 07:26:30 +0000{{#time: r|+2 hours}}
→ Thu, 15 Apr 2021 09:26:30 +0000{{#time: r|now + 2 hours}}
→ Thu, 15 Apr 2021 09:26:30 +0000{{#time: r|20 December 2000}}
→ Wed, 20 Dec 2000 00:00:00 +0000{{#time: r|December 20, 2000}}
→ Wed, 20 Dec 2000 00:00:00 +0000{{#time: r|2000-12-20}}
→ Wed, 20 Dec 2000 00:00:00 +0000{{#time: r|2000 December 20}}
→ Error: Invalid time.
language code
(kód jazyka) v ISO 639-3 (?) Umožňuje zobrazení řetězce ve vybraném jazyce
{{#time:d F Y|1988-02-28|nl}}
→ 28 februari 1988{{#time:l|now|uk}}
→ четвер{{#time:d xg Y|20 June 2010|pl}}
→ 20 czerwca 2010
Parametr local
určuje, zda objekt datum / čas odkazuje na místní časové pásmo nebo UTC.
Toto je booleovský parametr: jeho hodnota je určena přetypováním hodnoty argumentu (viz oficiální dokumentace PHP pro podrobnosti o tom, jak se řetězec přetypuje na booleovské hodnoty).
$wgLocaltimezone
nastavena na UTC
, není žádný rozdíl ve výstupu, když je local
nastaven na true
nebo false
.Podrobnosti viz následující příklady:
{{#time: Y F d H:i:s|now|it|0}}
→ 2021 aprile 15 07:26:30{{#time: Y F d H:i:s|now|it|1}}
→ 2021 aprile 15 07:26:30{{#time: Y F d H:i:s|+2 hours||0}}
→ 2021 duben 15 09:26:30{{#time: Y F d H:i:s|+2 hours||1}}
→ 2021 duben 15 09:26:30
{{#time:c|2019-05-16T17:05:43+02:00|it}}
→ 2019-05-16T15:05:43+00:00{{#time:c|2019-05-16T17:05:43+02:00|it|0}}
→ 2019-05-16T15:05:43+00:00{{#time:c|2019-05-16T17:05:43+02:00|it|true}}
→ 2019-05-16T15:05:43+00:00
Pokud jste vypočítali časovou značku Unixu, můžete ji použít při výpočtech data tak, že předběžně čekáte na symbol @
.
{{#time: U | now }}
→ 1618471590{{#time: r | @1618471589 }}
→ Thu, 15 Apr 2021 07:26:29 +0000
Lze zadat úplná nebo částečná absolutní data; funkce "vyplní" části data, které nejsou specifikovány pomocí "aktuálních" hodnot:
{{#time: Y | January 1 }}
→ 2021
Čtyřciferné číslo je vždy interpretováno jako rok, nikdy ne jako hodiny a minuty: [1]
{{#time: Y m d H:i:s | 1959 }}
→ 1959 04 15 00:00:00
Šestimístné číslo je interpretováno jako hodiny, minuty a sekundy, pokud je to možné, ale jinak jako chyba (nikoli například rok a měsíc):
{{#time: Y m d H:i:s | 195909 }}
→ 2021 04 15 19:59:09 Vstup je považován za čas, spíše než za rok + měsíc.{{#time: Y m d H:i:s | 196009 }}
→ Error: Invalid time. Ačkoli 19:60:09 není platný čas, 196009 není interpretován jako září 1960.
Funkce převádějící matematcké znaky na data:
{{#time: d F Y | January 0 2008 }}
→ 31 prosinec 2007{{#time: d F | January 32 }}
→ Error: Invalid time.{{#time: d F | February 29 2008 }}
→ 29 únor{{#time: d F | February 29 2007 }}
→ 01 březen{{#time:Y-F|now -1 months}}
→ 2021-březen
Celková délka formátovacích řetězců #time
je omezena na 6000 znaků [2].
Problém s časovými pásmy
Tato funkce syntaktického analyzátoru #time (konkrétně v PHP DateTime ) obsahuje chybu, která neumožňuje předávání nečísel jako kompenzace relativního časového pásma. Tento problém se netýká při použití hodinového časového pásma, jako je EDT. Například:
{{#time:g:i A | -4 hours }}
→ 3:26 AM
Indie je však s časovým posunem +5,5 hodiny od UTC a proto použití jejího časového pásma obvykle neumožňuje správný výpočet relativního časového pásma. Co se stane:
{{#time:g:i A | +5.5 hours }}
→ 7:26 AM
Chcete-li tento problém vyřešit, jednoduše převeďte čas na minuty nebo sekundy, například:
{{#time:g:i A | +330 minutes }}
→ 12:56 PM{{#time:g:i A | +19800 seconds }}
→ 12:56 PM
(Tim Starling, vývojář této funkce, poskytl přesnou syntaxi tohoto řešení.)
#timel
Tato funkce je identická s {{#time: ... }}
, když parametr local
je nastaven na true
, takže vždy používá místní čas wiki (jak je nastaveno v $wgLocaltimezone ).
Syntaxe funkce je:
{{#timel: format string }}
{{#timel: format string | date/time object }}
{{#timel: format string | date/time object | language code }}
$wgLocaltimezone
nastavena na UTC
, není žádný rozdíl ve výstupu, když je local
nastaveno na true
nebo false
Viz například následující příklady:
{{#time:c|now|it}}
→ 2021-04-15T07:26:30+00:00{{#time:c|now|it|0}}
→ 2021-04-15T07:26:30+00:00{{#time:c|now|it|1}}
→ 2021-04-15T07:26:30+00:00{{#timel:c|now|it}}
→ 2021-04-15T07:26:30+00:00

#titleparts
Tato funkce rozdělí nadpis stránky na segmenty na základě lomítek a poté vrátí některé z těchto segmentů jako výstup.
{{#titleparts: jméno stránky | počet segmentů pro vrácení | první segment pro vrácení }}
Pokud není zadán parametr počet segmentů k návratu, je výchozí hodnota "0", která vrací všechny segmenty z prvního segmentu k návratu (včetně). Pokud není zadán parametr první segment k návratu nebo je "0", bude výchozí hodnota "1":
{{#titleparts: Talk:Foo/bar/baz/quok }}
→ Talk:Foo/bar/baz/quok{{#titleparts: Talk:Foo/bar/baz/quok | 1 }}
→ Talk:Foo See also {{ROOTPAGENAME }}.{{#titleparts: Talk:Foo/bar/baz/quok | 2 }}
→ Talk:Foo/bar{{#titleparts: Talk:Foo/bar/baz/quok | 2 | 2 }}
→ bar/baz{{#titleparts: Talk:Foo/bar/baz/quok | | 2 }}
→ bar/baz/quok{{#titleparts: Talk:Foo/bar/baz/quok | | 5 }}
→
Záporné hodnoty jsou akceptovány pro obě hodnoty. Záporné hodnoty pro počet segmentů k návratu parametru efektivně 'proužky' segmenty od konce řetězce. Záporné hodnoty pro první segment, který se vrátí, se překládají na "začínají počítáním tohoto segmentu zprava":
{{#titleparts: Talk:Foo/bar/baz/quok | -1 }}
→ Talk:Foo/bar/baz Odřízne jeden segment od konce řetězce. Viz též {{BASEPAGENAME}}.{{#titleparts: Talk:Foo/bar/baz/quok | -4 }}
→ Odřízne všechny 4 segmenty od konce řetězce{{#titleparts: Talk:Foo/bar/baz/quok | -5 }}
→ Odřízne 5 segmentů od konce řetězce (více než existuje){{#titleparts: Talk:Foo/bar/baz/quok | | -1 }}
→ quok Vrací poslední segment. Viz též {{SUBPAGENAME}}.{{#titleparts: Talk:Foo/bar/baz/quok | -1 | 2 }}
→ bar/baz Odřízne jeden segment od konce řetězce a poté vrátí druhý segment a dále{{#titleparts: Talk:Foo/bar/baz/quok | -1 | -2 }}
→ baz Začne kopírovat u druhého posledního prvku; odřízne jeden segment od konce řetězce
Před zpracováním je parametr pagename (jméno stránky) dekódován HTML: pokud obsahuje některé standardní entity HTML znaků, budou převedeny na prosté znaky (interně kódované pomocí UTF-8, tj. Stejné kódování jako na zdrojové stránce MediaWiki pomocí této funkce analyzátoru).
- Například jakýkoli výskyt
"
,"
nebo"
v pagename bude nahrazen"
. - Nevykonává se žádná jiná konverze z HTML na prostý text, takže značky HTML zůstanou v tomto počátečním kroku neporušené, i když jsou neplatné v názvech stránek.
{{PAGENAME }}
a podobné) vracejí řetězce, které jsou zbytečně kódovány HTML, i když jejich vlastní vstupní parametr nebyl kódován HTML:
Funkci syntaktického analyzátoru titulků lze poté použít jako zástupné řešení k převodu těchto vrácených řetězců tak, aby je bylo možné správně zpracovat pomocí některých dalších syntaktických funkcí, které také vezmou název stránky v parametru (například {{PAGESINCAT: }}
, ale stále s HTML nefungují správně) -kódované vstupní řetězce.
Pokud je například aktuální stránka Kategorie:Côte-d'Or, pak:
{{#ifeq: {{FULLPAGENAME}} | Category:Côte-d'Or | 1 | 0 }}
a{{#ifeq: {{FULLPAGENAME}} | Category:Côte-d'Or | 1 | 0 }}
vracejí1
(skutečný); (funkce #ifeq parser provádí HTML dekódování vstupních parametrů).{{#switch: {{FULLPAGENAME}} | Category:Côte-d'Or = 1 | #default = 0 }}
a{{#switch: {{FULLPAGENAME}} | Category:Côte-d'Or = 1 | #default = 0 }}
vracejí1
; (funkce #switch parser provede HTML dekódování vstupních parametrů).{{#ifexist: {{FULLPAGENAME}} | 1 | 0 }}
,{{#ifexist: Category:Côte-d'Or | 1 | 0 }}
nebo dokonce{{#ifexist: Category:Côte-d'Or | 1 | 0 }}
, vrátí všechny1
, pokud daná stránka kategorie existuje (funkce #ifexist parser provede HTML dekódování jejích vstupních parametrů);{{PAGESINCAT: Côte-d'Or }}
vrátí nenulové číslo, pokud tato kategorie obsahuje stránky nebo podkategorie, ale:{{PAGESINCAT: {{CURRENTPAGENAME}} }}
, může stále bezpodmínečně vrátit 0, stejně jako:{{PAGESINCAT: {{PAGENAME|Category:Côte-d'Or}} }}
{{PAGESINCAT: {{PAGENAME|Category:Côte-d'Or}} }}
Důvodem tohoto neočekávaného chování je, že u současných verzí MediaWiki existují dvě upozornění:
{{FULLPAGENAME}}
nebo dokonce{{FULLPAGENAME|Côte-d'Or}}
může vrátit řetězec skutečně zakódovaný HTMLCategory:Côte-d'Or
(skutečný) a ne očekávanýCategory:Côte-d'Or
a to:{{PAGESINCAT: Côte-d'Or }}
bezpodmínečně vrací 0 (magické klíčové slovo PAGESINCAT neprovádí žádné dekódování vstupního parametru HTML).
Jednoduché řešení používající titulní grafy (které budou i nadále fungovat, pokud budou tyto dvě upozornění opraveny v novější verzi MediaWiki):
{{PAGESINCAT: {{#titleparts: {{CURRENTPAGENAME}} }} }}
{{PAGESINCAT: {{#titleparts: {{PAGENAME|Category:Côte-d'Or}} }} }}
{{PAGESINCAT: {{#titleparts: {{PAGENAME|Category:Côte-d'Or}} }} }}
, že všechny vrátí skutečný počet stránek ve stejné kategorii.
Poté je, pokud je to možné, dekódovaný název stránky kanonizovaný do standardního názvu stránky podporovaného MediaWiki:
- Všechna podtržítka jsou automaticky nahrazena mezerami:
{{#titleparts: Talk:Foo/bah_boo|1|2}}
→ bah boo Ne bah_boo, navzdory podtržítku v originálu.
- Řetězec je rozdělen maximálně 25krát; další lomítka jsou ignorována a 25. prvek bude obsahovat zbytek řetězce. Řetězec je také omezen na 255 znaků, protože je považován za název stránky:
{{#titleparts: a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/aa/bb/cc/dd/ee | 1 | 25 }}
→ y/z/aa/bb/cc/dd/ee- Pokud jste z jakéhokoli důvodu potřebovali posunout tuto funkci na její limit, i když je velmi nepravděpodobné, je možné obejít 25 dělený limit volání vnořených funkcí:
{{#titleparts: {{#titleparts: a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/aa/bb/cc/dd/ee| 1 | 25 }} | 1 | 2}}
→ z
- Nakonec se první dílčí řetězec kapitalizuje podle nastavení velkých písmen v místní wiki (pokud se tento dílčí řetězec také začíná názvem místního jmenného prostoru, je tento název jmenného prostoru také normalizován).
{{#titleparts: talk:a/b/c }}
→ Talk:A/b/c
Řetězcové funkce
Všechny tyto funkce (len
, pos
, rpos
, sub
, replace
, explode
) jsou integrované z rozšíření StringFunctions, ale jsou k dispozici, pouze pokud správce nastaví $wgPFEnableStringFunctions = true;
na LocalSettings.php
.
Všechny tyto funkce fungují v čase O(n), což je činí bezpečnými proti útokům DoS.
- Některé parametry těchto funkcí jsou omezeny globálním nastavením, aby se zabránilo zneužití. Viz část Limity dále.
- Pro funkce, které rozlišují velká a malá písmena, můžete v některých případech použít magické slovo
{{lc:string}}
jako řešení. - Chcete-li zjistit, zda server MediaWiki tyto funkce povoluje, zkontrolujte seznam podporovaných funkcí rozšířeného analyzátoru v Special:Version.
- Délka řetězce je omezena proměnnou
$wgPFStringLengthLimit
, výchozí je 1000.
#len
#len
byla sloučena z rozšíření StringFunctions od verze 1.2.0.Funkce #len vrací délku daného řetězce. Syntaxe je:
{{#len:string}}
Návratová hodnota je vždy počet znaků ve zdrojovém řetězci (po rozšíření vyvolání šablony, ale před převodem na HTML). Pokud není zadán žádný řetězec, je návratová hodnota nula.
- Tato funkce je bezpečná u vícebajtových znaků UTF-8. Příklad:
{{#len:Žmržlina}}
→8
- Úvodní a koncové mezery nebo nové řádky se nezapočítávají, ale meziprostory a nové řádky se berou v úvahu. Příklady:
{{#len:Icecream }}
→8
{{#len: a b }}
→5
- 3 mezery mezi 2 znaky
- Znaky uváděné odkazem nejsou převedeny, ale počítány podle jejich zdrojové formy.
{{#len: }}
→6
- odkazy na pojmenované znaky{{#len: }}
→5
- odkazy na číselné znaky, neignorované, přestože zde označují mezeru.
- Značky, jako je
<nowiki>
a jiná rozšíření značek, budou mít vždy nulovou délku, protože jejich obsah je před analyzátorem skrytý. Příklad:{{#len:<nowiki>This is a </nowiki>test}}
→4
#pos
#pos
byla sloučena z rozšíření StringFunctions od verze 1.2.0.Funkce #pos vrací pozici daného vyhledávaného dotazu v řetězci. Syntaxe je:
{{#pos:string|hledaný výraz|offset}}
Parametr offset, pokud je zadán, říká počáteční pozici, kde by se tato funkce měla začít hledat.
Pokud je hledaný výraz nalezen, je návratovou hodnotou celé číslo první pozice v řetězci.
Pokud není hledaný výraz nalezen, vrátí funkce prázdný řetězec.
- Tato funkce rozlišuje velká a malá písmena.
- Maximální povolená délka vyhledávacího dotazu je omezena globálním nastavením $wgStringFunctionsLimitSearch.
- Tato funkce je bezpečná u vícebajtových znaků UTF-8. Příklad:
{{#pos:Žmržlina|žlina}}
vrací 3. - Stejně jako u #len,
<nowiki>
a dalších rozšíření značek se pro účely určení délky považuje za délku 1. Příklad:{{#pos:<nowiki>This is a </nowiki>test|test}}
vrací 1.
#rpos
#rpos
byla sloučena z rozšíření StringFunctions od verze 1.2.0.Funkce #rpos vrací poslední pozici daného vyhledávaného dotazu v řetězci. Syntaxe je:
{{#rpos:string|hledaný výraz}}
Pokud je nalezen hledaný výraz, je návratová hodnota celé číslo jeho nulové pozice v řetězci.
Pokud není hledaný výraz nalezen, vrátí funkce -1.
- Tato funkce rozlišuje velká a malá písmena.
- Maximální povolená délka vyhledávacího dotazu je omezena globálním nastavením $wgStringFunctionsLimitSearch.
- Tato funkce je bezpečná u vícebajtových znaků UTF-8. Příklad:
{{#rpos:Žmržlina|lina}}
vrací 4. - Stejně jako u #len,
<nowiki>
a dalších rozšíření značek se pro účely určení délky považuje za délku 1. Příklad:{{#rpos:<nowiki>This is a </nowiki>test|test}}
vrací 1.
#sub
#sub
byla sloučena z rozšíření StringFunctions od verze 1.2.0.Funkce #sub vrací podřetězec z daného řetězce. Syntaxe je:
{{#sub:string|start|length}}
Parametr start, pokud je kladný (nebo nula), určuje index prvního znaku, který má být vrácen, založený na nule.
Příklad:
{{#sub:Icecream|3}}
vrací cream
.
{{#sub:Icecream|0|3}}
vrací Ice
.
Pokud je parametr start záporný, určuje, kolik znaků od konce by mělo být vráceno.
Příklad:
{{#sub:Icecream|-3}}
vrací eam
.
Parametr length, pokud je přítomen a kladný, určuje maximální délku vráceného řetězce.
Příklad:
{{#sub:Icecream|3|3}}
vrací cre
.
Pokud je parametr length záporný, určuje, kolik znaků bude vynecháno od konce řetězce.
Příklad:
{{#sub:Icecream|3|-3}}
vrací cr
.
Pokud je parametr start záporný, určuje, kolik znaků od konce by mělo být vráceno. Parametr length, pokud je přítomen a kladný, určuje maximální délku vráceného řetězce od počátečního bodu.
Příklad:
{{#sub:Icecream|-3|2}}
vrací ea
.
- Pokud je parametr length nulový, nepoužívá se pro zkrácení vůbec.
- Příklad:
{{#sub:Icecream|3|0}}
vracícream
.{{#sub:Icecream|0|3}}
vracíIce
.
- Příklad:
- Pokud start označuje pozici za zkrácením od konce negativním parametrem length, bude vrácen prázdný řetězec.
- Příklad:
{{#sub:Icecream|3|-6}}
vrací prázdný řetězec.
- Příklad:
- Tato funkce je bezpečná u vícebajtových znaků UTF-8. Příklad:
{{#sub:Žmržlina|3}}
vracížlina
. - Stejně jako u #len,
<nowiki>
a dalších rozšíření značek se pro účely určení délky považuje za délku 1. Příklad:{{#sub:<nowiki>This is a </nowiki>test|1}}
vracítest
.
#replace
#replace
byla sloučena z rozšíření StringFunctions od verze 1.2.0.Funkce #replace vrátí daný řetězec se všemi výskyty hledaného výrazu nahrazeného nahrazujícím výrazem.
{{#replace:string|search term|replacement term}}
Pokud je search term nespecifikovaný nebo prázdný, bude prohledán jediný prostor.
Pokud je replacement term nespecifikovaný nebo prázdný, budou všechny výskyty search term z řetězce odstraněny.
- Tato funkce rozlišuje velká a malá písmena.
- Maximální povolená délka search term je omezena globálním nastavením $wgStringFunctionsLimitSearch.
- Maximální povolená délka replacement term je omezena globálním nastavením $wgStringFunctionsLimitReplace.
- I když je replacement term mezera, použije se prázdný řetězec. Toto je vedlejší efekt parser MediaWiki. Chcete-li použít mezeru jako replacement term, vložte ji do značek nowiki.
- Příklad:
{{#replace:My_little_home_page|_|<nowiki> </nowiki>}}
vracíMy little home page
. - Pokud to nefunguje, zkuste
{{#replace:My_little_home_page|_|<nowiki/> <nowiki/>}}
se dvěma samouzavíracími značkami. - Všimněte si, že toto je jediné přijatelné použití nowiki v náhradním způsobu, protože jinak by nowiki mohl být použit k obejití $wgStringFunctionsLimitReplace, vložením libovolně velkého počtu znaků do výstupu. Z tohoto důvodu jsou všechny výskyty
<nowiki>
nebo jakékoli jiné značky rozšířené v náhradním termínu nahrazeny mezerami.
- Příklad:
- Tato funkce je bezpečná u vícebajtových znaků UTF-8. Příklad:
{{#replace:Žmržlina|ž|z}}
vracíŽmrzlina
. - Pokud je třeba nahradit více položek v jednom textovém řetězci, můžete zvážit i Extension:ReplaceSet . Přidá funkci syntaktického analyzátoru pro posloupnost nahrazení.
- Nahrazení velkých a malých písmen
V současné době syntaxe neposkytuje přepínač pro přepínání nastavení rozlišování velkých a malých písmen. Jako řešení však můžete použít magická slova k formátování. (např. {{lc:your_string_here }}) Pokud například chcete z řetězce odstranit slovo „Category:“ bez ohledu na jeho případ, můžete zadat:
{{#replace:{{lc:{{{1}}}}}|category:|}}
Nevýhodou je však to, že výstup se stane malými písmeny. Pokud chcete zachovat obal i po výměně, musíte k dosažení stejné věci použít více úrovní vnoření (tj. Více náhradních volání).
#explode
#explode
byla sloučena z rozšíření StringFunctions od verze 1.2.0.Funkce #explode rozdělí daný řetězec na kousky a poté vrátí jeden z kusů. Syntaxe je:
{{#explode:string|delimiter|position|limit}}
Parametr delimiter určuje řetězec, který se použije k rozdělení string na kousky. Tento řetězec delimiter pak není součástí žádného kusu a když jsou dva řetězce delimiter vedle sebe, vytvoří mezi nimi prázdný kus. Pokud není tento parametr zadán, použije se jedna mezera. Parametr limit je k dispozici pouze v ParserFunctions, nikoli v samostatné verzi StringFunctions. Umožňuje omezit počet vrácených částí. Přičemž veškerý zbývající text bude zahrnut v závěrečné části.
Parametr position určuje, který kus má být vrácen. Kusy se počítají od 0. Pokud není tento parametr zadán, použije se první kus (kus s číslem 0). Když je záporná hodnota použita jako position, kusy se počítají od konce. V tomto případě číslo dílu -1 znamená poslední kus. Příklady:
{{#explode:And if you tolerate this| |2}}
se vracíyou
{{#explode:String/Functions/Code|/|-1}}
se vracíCode
{{#explode:Split%By%Percentage%Signs|%|2}}
se vracíPercentage
{{#explode:And if you tolerate this| |2|3}}
se vracíyou tolerate this
Vrácená hodnota je "pozice" - té části. Pokud je méně kusů, než určuje pozice, je vrácen prázdný řetězec.
- Tato funkce rozlišuje velká a malá písmena.
- Maximální povolená délka oddělovače je omezena globálním nastavením $wgStringFunctionsLimitSearch.
- Tato funkce je bezpečná u vícebajtových znaků UTF-8. Příklad:
{{#explode:Žmržlina|ž|1}}
vrátílina
.
#urldecode
#urldecode
převádí únikové znaky z řetězce ' URL kódováno' zpět na čitelný text. Syntaxe je:
{{#urldecode:hodnota}}
Poznámky:
- Tato funkce funguje přímým odhalením funkce PHP urldecode().
- Odkaz na znakový kód lze najít na www.w3schools.com.
- Opak,
urlencode
, byl integrován do MediaWiki od verze 1.18; příklady viz Nápověda:Magická slova . - urldecode byl sloučen ze Stringfunctions v roce 2010 přidělením 1b75afd18d3695bdb6ffbfccd0e4aec064785363
Limity
Tento modul definuje tři globální nastavení:
Používají se k omezení některých parametrů některých funkcí, aby se zajistilo, že funkce budou fungovat v O(n) časové složitosti, a jsou proto bezpečné proti útokům DoS.
$wgStringFunctionsLimitSearch
Toto nastavení používají #pos, #rpos, #replace a #explode. Všechny tyto funkce hledají podřetězec ve větším řetězci, zatímco fungují, což může běžet v O(n*m), a proto činí software zranitelnějším vůči útokům DoS. Nastavením této hodnoty na určité malé číslo se časová složitost sníží na O(n).
Toto nastavení omezuje maximální povolenou délku hledaného řetězce.
Výchozí hodnota je 30 vícebajtových znaků.
$wgStringFunctionsLimitReplace
Toto nastavení používá #replace. Tato funkce nahrazuje všechny výskyty jednoho řetězce jiným řetězcem, který lze použít k rychlému generování velkého množství dat, a proto činí software zranitelnějším vůči útokům DoS. Toto nastavení omezuje maximální povolenou délku nahrazujícího řetězce.
Výchozí hodnota je 30 vícebajtových znaků.
Obecné body
Náhrady
Funkce syntaktického analyzátoru mohou být substituované předponou hash znaku subst:
:
{{subst:#ifexist: Help:Extension:ParserFunctions/cs | [[Help:Extension:ParserFunctions/cs]] | Help:Extension:ParserFunctions/cs }}
→ kód[[Help:Extension:ParserFunctions/cs]]
bude vložen do wikitextu od stránky Help:Extension:ParserFunctions/cs existuje.
Substituce nefunguje v rámci <ref>
…</ref>
, pro tento účel můžete použít {{subst:#tag:ref|
…}}
.
Přesměrování
Zejména {{#time:
…|now-
…}} (čas) by mohl být užitečný v přesměrování na stránky včetně dat, ale to nefunguje.
Únikové znaky svislítka v tabulkách
Funkce syntaktického analyzátoru budou spravovat wikitable syntaxe a znaky kanálu (|
) a všechny surové znaky kanálu budou považovat za oddělovače parametrů. Aby se tomu zabránilo, většina wiki použila šablonu Template:!, jejíž obsah byl pouze znakem raw pipe (|
), protože MW 1.24 toto kludge nahradilo {{!}}
magic word . Tím se „skryje“ svislítko (roura, trubka, svislá čára) z analyzátoru MediaWiki, což zajistí, že se neuvažuje, dokud nebudou rozbaleny všechny šablony a proměnné na stránce. Poté bude interpretován jako řádek tabulky nebo oddělovač sloupců. Alternativně lze použít syrovou tabulku HTML, i když je to méně intuitivní a náchylnější k chybám.
Můžete také uniknout znaku svislítka pro zobrazení jako prostý, neinterpretovaný znak pomocí entity HTML: |
.
Popis | Napíšete | Zobrazí se |
---|---|---|
Únik znaku svislítka jako oddělovač řádků / sloupců tabulky | {{!}} |
| |
Únik svislítka jako prostý znak | | |
| |
Odstraňování mezer
Mezery, včetně nových řádků, karet a mezer, jsou od začátku a konce všech parametrů těchto funkcí analyzátoru odstraněny. Pokud to není žádoucí, lze porovnat řetězce po jejich vložení do uvozovek.
{{#ifeq: foo | foo | equal | not equal }}
→ equal{{#ifeq: "foo " | " foo" | equal | not equal }}
→ not equal
Chcete-li zabránit oříznutí předcházejících a následujících částí, podívejte se na m:Template:If. Někteří lidé to dosahují pomocí <nowiki > </nowiki> místo mezer.
foo{{#if:|| bar }}foo
→ foobarfoofoo{{#if:||<nowiki /> bar <nowiki />}}foo
→ foo bar foo
Tuto metodu však lze použít k vykreslení pouze jednoho znaku mezery, protože syntaktický analyzátor stlačuje více znaků mezery v jednom řádku do jednoho.
<span style="white-space: pre;">foo{{#if:||<nowiki/> bar <nowiki/>}}foo</span>
→ foo bar foo
V tomto příkladu se styl white-space: pre
používá k vynucení bílého prostoru, který má být prohlížečem zachován, ale ani s ním nejsou mezery zobrazeny. K tomu dochází, protože mezery jsou před odesláním do prohlížeče odstraněny softwarem.
Toto chování je možné vyřešit nahrazením mezer za  
(breakable space(křehký prostor)) nebo
(non-breakable space(nerozbitný prostor)), protože nejsou změněny softwarem:
<span style="white-space: pre;">foo{{#if:||   bar   }}foo</span>
→ foo bar foofoo{{#if:|| bar }}foo
→ foo bar foo
Viz též
- Help:Parser functions in templates
- m:Help:Calculation
- m:Help:Newlines and spaces
- m:Help:Comparison between ParserFunctions syntax and TeX syntax
- Nápověda: Kouzelná slova
- Parser function hooks , an (incomplete) list of parser functions added by core and extensions.
- Module:String zastarávající Extension:StringFunctions
- Extension:PhpTags
- Parser functions for Wikibase (the extensions that enables Wikidata): d:Special:MyLanguage/Wikidata:How to use data on Wikimedia projects
Reference
- ↑ Před r86805 v roce 2011 tomu tak nebylo.
- ↑ ParserFunctions.php na phabricator.wikimedia.org