Nápověda:Rozšíření:ParserFunctions
ParserFunctions poskytuje jedenáct dalších funkcí parseru k doplnění "kouzelných slovíček ", která jsou již v MediaWiki přítomná. (Může být nakonfigurováno tak, aby poskytovalo další funkce syntaktického analyzátoru pro zpracování řetězců. Tyto řetězcové funkce jsou zdokumentovány někde jinde .) Všechny funkce analyzátoru poskytované tímto rozšířením mají podobu:
{{#functionname: argument 1 | argument 2 | argument 3 ... }}
Poznámka: Úpravou této stránky souhlasíte s uvolněním vašeho příspěvku pod licencí CC0. Více informací získáte na stránce nápovědy veřejné domény. |
#expr
Typ | Operátory |
---|---|
Seskupení (závorky) | ( )
|
Čísla | 1234.5 e (2.718) pi (3.142)
|
binární operátor e unární (jednočlenný) + ,-
| |
Unární | not ceil trunc floor abs exp ln sin cos tan acos asin atan sqrt
|
Binární | ^
|
* / div mod fmod
| |
+ -
| |
Smyčka | round
|
Logická | = != <> > < >= <=
|
and
| |
or
|
Tato funkce vyhodnocuje matematický výraz a vrací vypočítanou hodnotu.
Tato funkce je k dispozici také na stránce Scribunto prostřednictvím funkce mw.ext.ParserFunctions.expr
.
{{#expr: výraz }}
Basic example
{{#expr: 1 + 1 }}
→ 2
Jaké operátory lze použít, vidíte v tabulce napravo, kde jsou setříděny podle toho, jakou mají priority. Jak fungují se dočtete na Manual:Expr parser function syntax . Přesnost a formát výsledku, který každý z nich vrací, se liší v závislosti na operačním systému serveru, na kterém se wiki provozuje a na formát čísel má vliv také nastavení jazyka portálu.
Při vyhodnocování pomocí booleovské algebry se nula vyhodnocuje jako false
a jakákoli nenulová hodnota, kladná nebo záporná, se vyhodnocuje jako 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 pomocí magických slov, musíte je nejprve naformátovat, abyste odstranili čárky a přeložili číslice.
Například {{NUMBEROFUSERS}} vede k 18 022 341, kde chceme 18022341, které lze získat pomocí {{formatnum :{{NUMBEROFUSERS}}|R}}
.
To je obzvláště důležité v některých jazycích, kde jsou překládány číslice.
Například v bengálštině {{NUMBEROFUSERS}} produkuje ৩০,০৬১.
{{#expr:{{NUMBEROFUSERS}}+100}}
→ Expression error: Unrecognized punctuation character " ".{{#expr:{{formatnum:{{NUMBEROFUSERS}}|R}}+100}}
→ 18022441
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 jednotné ceil
nebo floor
resp.
Modelový případ | Výsledek | Metoda zaokrouhlování |
---|---|---|
{{#expr: 1/3 round 5 }} |
0.33333 | Poslední číslice je <5, takže nedochází ke zjevnému zaokrouhlování (0.333333… → 0.33333) |
{{#expr: 1/6 round 5 }} |
0.16667 | Poslední číslice je ≥5, takže je zaokrouhlena nahoru (0.166666… → 0.16667) |
{{#expr: 8.99999/9 round 5 }} |
1 | Výsledek se na poslední číslici opět zaokrouhlí nahoru, což má za následek další zaokrouhlování (0.999998… → 1.00000 → 1) |
{{#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říznuta) |
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í zaokrouhleno, protože 1 je již celé číslo |
Rounding large numbers | ||
{{#expr: 1e-92 round 400 }} |
1.0E-92 | Rounding to a very large number leads to infinity. Hence, the original value without the infinity is given as the answer. |
{{#expr: 1e108 round 200 }} |
1.0E+108 | Same as above. |
Řetězce
Výrazy fungují pouze s číselnými hodnotami. Nemohou porovnávat řetězce nebo znaky. K tomu 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 testovaný řetězec a určuje, zda je nebo není prázdný. Testovaný řetězec obsahující pouze mezeru je považován za prázdný.
{{#if: testovaný řetězec | hodnota, pokud testovaný řetězec není prázdný | hodnota, pokud je testovaný řetězec prázdný (nebo pouze mezera)}}
{{#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: | yes | no}}
→ no
Testovaný řetězec je vždy interpretován jako čistý text, takže matematické výrazy se nevyhodnocují (viz #ifexpr):
{{#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 to záviset na wiki nebo na omezení paměti.
{{#if:testovaný řetězec
|hodnota, pokud testovaný řetězec není prázdný
|{{#if:testovaný řetězec
|hodnota, pokud testovaný řetězec není prázdný
|hodnota, pokud je testovaný řetězec prázdný (nebo pouze mezera)
}}
}}
Parametr můžete také použít jako testovaný řetězec v příkazu #if
. Musíte se ovšem ujistit, že za název proměnné přidáte |
(symbol pipe, svislítko, svislá čára).
(Pokud parametr nemá hodnotu, vyhodnotí se řetězec "{{{1}}}
" jako prázdný.)
{{#if:{{{1|}}}|Zadali jste text v proměnné 1|Neexistuje žádný text v proměnné 1}}
Více na stránce Nápověda:Funkce analyzátoru v šablonách , 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 na základě výsledku vrací jeden ze dvou řetězců.
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ává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ým a dlouhým.
Parametr bere jako první vstup pro porovnání s "krátkým" řetězcem – neexistuje žádná konvence pro pořadí, ale je jednodušší jej přečíst, pokud je parametr na prvním místě.
Kód šablony je definován jako:
{{#ifeq: {{{1|}}} | short | 20 | 40 }}
následující možný 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 šablon, 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
Některé chyby mohou způsobit přidání kategorie sledování, použití {{#iferror:}}
nepotlačí přidání kategorie.
#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átory. 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 vyhodnotí jako false
a jakákoli nenulová hodnota se vyhodnotí jako true
, takže tato funkce je ekvivalentní funkci používající 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
(hodnota je pravdivá)).
{{#ifexpr: = | yes | no }}
→ Expression error: Unexpected = operator.
porovnání
{{#ifeq: {{#expr: = }} | 0 | no | yes }}
→ yes
Je možné vynechat jednu nebo obě vrácené hodnoty. Žádný výstup není uveden, pokud 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 }}
→
Podporovány jsou booleovské operátory rovnosti nebo nerovnosti.
{{#ifexpr: 0 = 0 or 1 = 0 | yes}}
→ yes{{#ifexpr: 0 = 0 and 1 = 0 | | no}}
→ no{{#ifexpr: 2 > 0 or 1 < 0 | yes}}
→ yes{{#ifexpr: 2 > 0 and 1 > 0 | yes | no}}
→ yes
#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 na místní wiki existuje.
{{#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 jakoby prázdná (obsahuje metadata, jako jsou odkazy na kategorie nebo kouzelná slova , ale obsah je neviditelný), je prázdná nebo je přesměrovaná . Pouze stránky, které jsou znovu propojeny, se vyhodnotí jako false
, včetně případů, kdy stránka dříve existovala, ale byla smazá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 }}
→ doesn't exist (protože autorské právo nebylo přizpůsobeno)
Pokud stránka kontroluje cíl pomocí #ifexist:
, pak se tato stránka objeví v seznamu Special:WhatLinksHere pro cílovou stránku. Takže pokud byl kód {{#ifexist:Foo }}
zahrnut aktuálně na této stránce (Help:Extension:ParserFunctions/cs), Special:WhatLinksHere/Foo zobrazí Help:Extension:ParserFunctions/cs.
Na wikinách 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 v odkazech na interwiki.
omezení pro ifexist
#ifexist:
je považován za "cennou 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 zavedena do kategorie Category:Pages with too many expensive parser function calls.
Název sledované 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 (schopnost napodobovat jeden systém jiným) 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 cenný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.
ifexist a chybějící stránky
Stránka, která neexistuje a je testována na použití #ifexist, skončí na seznamu hledaných stránek. Více najdete na stránce úkol T14019 a v dokumentaci k šabloně w:Template:Linkless exists najdete jak to lze obejít.
#rel2abs
Tato funkce převede relativní cestu k souboru na absolutní cestu k souboru.
{{#rel2abs: path }}
{{#rel2abs: path | base path }}
V rámci vstupu path
je platná následující syntaxe:
.
→ aktuální úroveň..
→ přejde o jednu úroveň výše/foo
→ přejde 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 nejsou povoleny více než dvě po sobě jdoucí tečky, lze k oddělení po sobě jdoucích příkazů použít tyto sekvence:
{{#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 }}
→ Chyba: Neplatná hloubka v cestě: "Help:Foo/bar/baz/../../../../quok" (pokus o přístup do uzlu vyššího než kořen)
Pro podobnou skupinu funkcí viz také Nápověda:Kouzelná slovíčka#URL data. Mezi vestavěné funkce analyzátoru patří: 'localurl:', 'fullurl:', 'anchorencode:' atd.
#switch
Související stránka: w:Help:Switch parser function
Tato funkce porovnává jednu vstupní hodnotu s několika testovacími případy a v případě nalezení 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 se značkami částečného převodu může ovlivnit konfigurační soubor, který umožňuje editoru, který není obeznámen s kódováním šablon, 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 to považováno za srovnání velkých a malých písmen a pokud se žádné případy neshodují, nezobrazí se žá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
. Tím minimalizujeme 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.
Podívejte se na stránku Nápověda:Funkce analyzátoru v šablonách .)
{{#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 vracet, pokud hodnota testovacího parametru neodpovídá žádnému 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: 02 | +1 = one | +2 = two | three}}
→ two{{#switch: 100 | 1e1 = ten | 1e2 = hundred | other}}
→ hundred
{{#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 nezpracované rovnítko. Chcete-li to obejít, použijte kouzelné slovo {{=}} nebo nahraďte rovnítko kódem HTML =
.
Příklad:
Napíšete | Zobrazí se |
---|---|
{{#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 přepínače mohla být komplikovaná, případně 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 (Pro aktualizaci vyčistěte mezipaměť této stránky) |
---|---|---|
Rok | ||
Y
|
4místný rok. | 2024 |
y
|
Dvoumístný rok. | 24 |
L
|
1 pokud je to přestupný rok, 0 když ne. | 1 |
o [note 1]
|
ISO-8601 rok určeného týdne.[note 2] | 2024[note 3] |
Měsíc | ||
n
|
Číslo měsíce bez doplnění nulou. | 11 |
m
|
Měsíční index s doplněním nulou. | 11 |
M
|
Zkratka názvu měsíce v jazyce webu. | 11. |
F
|
Celý název měsíce v jazyce webu. | listopad |
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. | 23 |
d
|
Den v měsíci doplněný nulami | 23 |
z
|
Den roku (leden 1 = 0). Poznámka: Chcete-li získat den ISO roku, přidejte 1. |
327 |
Týden a den v týdnu | ||
W
|
Číslo týdne ISO 8601, doplněné nulou. | 47 |
N
|
ISO 8601 den v týdnu (pondělí = 1, neděle = 7). | 6 |
w
|
Číslo dne v týdnu (neděle = 0, sobota = 6). | 6 |
D
|
Zkratka pro den v týdnu. Zřídka internacionalizován. | so |
l
|
Celý název dne v týdnu. Zřídka internacionalizován. | sobota |
Hodina | ||
a
|
"am" ráno (00:00:00 → 11:59:59), "pm" odpoledne (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 hodinou s doplněnou nulou. | 15 |
s
|
Sekundy za minutou s doplněnou nulou. | 07 |
U
|
Unix čas. Sekundy od 1. ledna 1970 00:00:00 GMT. | 1732346107 |
Č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 .
|
2024-11-23T07:15:07+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.
|
Sat, 23 Nov 2024 07:15:07 +0000 |
Jiné kalendáře než Gregoriánský | ||
islámský | ||
xmj
|
Den v měsíci. | 21 |
xmF
|
Celé jméno měsíce. | džumádá l-úlá |
xmn
|
Index měsíce. | 5 |
xmY
|
Celý rok. | 1446 |
Íránský (Jalaly) | ||
xit
|
Počet dní v aktuálním měsíci. | 30 |
xiz
|
Den v roce. | 248 |
xij
|
Den v měsíci. | 3 |
xiF
|
Celé jméno měsíce. | Ázár |
xin
|
Index měsíce. | 9 |
xiY
|
Celý rok. | 1403 |
xiy
|
Dvoumístný rok. | 03 |
hebrejština | ||
xjj
|
Den v měsíci. | 22 |
xjF
|
Celé jméno měsíce. | chešvan |
xjt
|
Počet dní v měsíci. | 30 |
xjx
|
Genitivní forma názvu měsíce. | chešvanu |
xjn
|
Číslo měsíce. | 2 |
xjY
|
Celý rok. | 5785 |
Thajské solární | ||
xkY
|
Celý rok v thajském slunečním kalendáři. Poznámka: Pro roky před rokem 1941 nejsou data v rozmezí Jan-Mar vypočítána správně. |
2567 |
Minguo/Juche rok | ||
xoY
|
Celý rok. | 113 |
Japonské nengo | ||
xtY
|
Celý rok. | 令和6 |
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 zobrazení 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}} → MMXXIV
|
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 ho 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). Pokud ve formátovacím řetězci není rozpoznán žádný znak a objekt data/času je bez chyby, je formátovací řetězec vrácen jako výstup. 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 spřežka xx
interpretována jako jediné doslovné "x".
Vzhledem k tomu, že se seznam formátovacích kódů neustále vyvíjí (s podporou nových kalendářů nebo nových datových polí vypočítaných a formátovaných jinak), měli byste vyhýbat všem doslovným znakům (nejen písmenům ASCII, která se aktuálně používají formátovacími kódy), které je třeba předat nezměněné.
Bohužel v současné době není ASCII jednoduchá uvozovka stále uznávána jako jednoduchá alternativa pro označení doslovného textu k aktuálně podporovaným dvojitým uvozovkám ASCII (například dvojité uvozovky jsou povinné pro jiná použití, jako je vymezení hodnot řetězců v JSON, C , C++...) a zpětná lomítka (která musí být escapována také v řetězcových konstantách používaných mnoha jazyky, včetně JSON, C, C++, PHP, JavaScript, Lua). Stále tedy nemůžete vložit žádné doslovné dvojité uvozovky, aniž byste je neuvedli zpětným lomítkem (nebo můžete místo toho použít jiné složené, hranaté nebo čtvercové uvozovky).
{{#time: Y-m-d }}
→ 2024-11-23{{#time: [[Y]] m d }}
→ 2024 11 23{{#time: [[Y (year)]] }}
→ 2024 (24UTCamSat, 23 Nov 2024 07:15:07 +0000){{#time: [[Y "(year)"]] }}
→ 2024 (year){{#time: i's" }}
→ 15'07"
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
) a kombinované časy (např. 30 July +1 year
) časy.
{{#time: r|now}}
→ Sat, 23 Nov 2024 07:15:08 +0000{{#time: r|+2 hours}}
→ Sat, 23 Nov 2024 09:15:08 +0000{{#time: r|now + 2 hours}}
→ Sat, 23 Nov 2024 09:15:08 +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}}
→ Chyba: neplatný čas
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 (pro podrobnosti o tom, jak se řetězec přetypuje na booleovské hodnoty viz oficiální dokumentace PHP).
$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}}
→ 2024 novembre 23 07:15:08{{#time: Y F d H:i:s|now|it|1}}
→ 2024 novembre 23 07:15:08{{#time: Y F d H:i:s|+2 hours||0}}
→ 2024 listopad 23 09:15:08{{#time: Y F d H:i:s|+2 hours||1}}
→ 2024 listopad 23 09:15:08
{{#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 }}
→ 1732346108{{#time: r | @1732346107 }}
→ Sat, 23 Nov 2024 07:15:07 +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 }}
→ 2024
Čtyřciferné číslo se vždy interpretuje jako rok, nikdy ne jako hodiny a minuty: [1]
{{#time: Y m d H:i:s | 1959 }}
→ 1959 11 23 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 }}
→ 2024 11 23 19:59:09 Vstup je považován za čas, pravděpodobněji než za rok + měsíc.{{#time: Y m d H:i:s | 196009 }}
→ Chyba: neplatný čas Ačkoli 19:60:09 není platný čas, 196009 není interpretován jako září 1960.
Funkce převádějící matematické znaky na data:
{{#time: d F Y | January 0 2008 }}
→ 31 prosinec 2007{{#time: d F | January 32 }}
→ Chyba: neplatný čas{{#time: d F | February 29 2008 }}
→ 29 únor{{#time: d F | February 29 2007 }}
→ 01 březen{{#time:Y-F|now -1 months}}
→ 2024-říjen
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:15 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:15 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:45 PM{{#time:g:i A | +19800 seconds }}
→ 12:45 PM
(Tim Starling, vývojář této funkce, poskytl přesnou syntaxi tohoto řešení.)
#time format like in signatures
Sometimes it is useful to construct a timestamp, which looks like the automatic timestamp generated by signatures in discussions on talk pages. On an English-language wiki, it can be created with:
{{#timel:H:i, j xg Y (e)|+330 minutes}}
→ 12:45, 23 listopadu 2024 (UTC)
#timel
Tato funkce je syntaktická zkratka, která funguje stejně jako {{#time: ... }}
s parametrem local
nastaveným na true
, takže vždy používá preferované časové pásmo uživatele nebo nakonfigurované časové pásmo 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
Podívejte se například na následující příklady:
{{#time:c|now|it}}
→ 2024-11-23T07:15:08+00:00{{#time:c|now|it|0}}
→ 2024-11-23T07:15:08+00:00{{#time:c|now|it|1}}
→ 2024-11-23T07:15:08+00:00{{#timel:c|now|it}}
→ 2024-11-23T07:15:08+00:00
#timef
This function formats a date using a standard format for the selected language, as defined in $dateFormats
(see úkol T223772).
{{#timef: date/time object }}
{{#timef: date/time object | format type }}
{{#timef: date/time object | format type | language code }}
The format of the date/time object is the same as for #time. If it is empty, the time when the page was rendered is used.
The format type may be one of:
time
- Only the time is shown.
date
- Only the date is shown.
both
- Both the time and date are shown.
pretty
- Only the date is shown, using an abbreviated format which does not include the year. Not all languages support this; if it is not supported, the "date" format is used.
If the format type is not specified, both the time and date will be show, as if both
were specified.
If the language code is not specified, the page's content language is used.
Using #timef
instead of #time
allows templates to more easily support multiple languages, since different languages have different ways to format dates.
In English, the order of the day and month is controlled by $wgAmericanDates
.
Examples:
{{#timef:now|both|en}}
→ 07:15, 23 November 2024{{#timef:now|both|ja}}
→ 2024年11月23日 (土) 07:15{{#timef:now|pretty|en}}
→ 23 November{{#timef:now|pretty|pl}}
→ 23 listopada{{#timef:|time}}
→ 07:15
#timefl
This function is the same as #timef except that it uses the local timezone of the wiki as configured in $wgLocaltimezone .
{{#timefl: date/time object }}
{{#timefl: date/time object | format type }}
{{#timefl: date/time object | format type | language code }}
#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 Více na stránce {{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 | 3 }}
→ baz/quok{{#titleparts: Talk:Foo/bar/baz/quok | 3 | 2 }}
→ bar/baz/quok{{#titleparts: Talk:Foo/bar/baz/quok | | 2 }}
→ bar/baz/quok{{#titleparts: Talk:Foo/bar/baz/quok | | 5 }}
→
Pro obě hodnoty jsou akceptovány záporné hodnoty. Záporné hodnoty pro parametr počet segmentů, které se mají vrátit ve skutečnosti 'odstraňují' segmenty z konce řetězce. Záporné hodnoty pro první segment, který se vrátí se překládá jako "začít s tímto segmentem počítáním 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 v názvech stránek neplatné.
{{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 analyzátoru 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 analyzátoru 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 analyzátoru 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
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 tato dvě upozornění opravena 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
{{#titleparts: one/two/three/four|1|1 }}
→ One{{#titleparts: one/two/three/four|1|2 }}
→ two
Pokud je potřeba malá písmena, použijte k ovládání výstupu funkci lc:
{{lc: {{#titleparts: one/two/three/four|1|1 }} }}
→ one
Chcete-li získat 'správnou' první kapitalizaci podřetězců (velká nebo malá písmena), můžete na začátek řetězce předepsat lomítko. Pro vrácení prvního segmentu použijte 2
místo 1
:
{{#titleparts: /one/two/three/four|1|2 }}
→ one{{#titleparts: /One/two/three/four|1|2 }}
→ One
Řetězcové funkce
Rozšíření ParserFunctions volitelně definuje různé funkce řetězce ($1), pokud je $wgPFEnableStringFunctions
nastaveno na true
.
#len
#pos
#rpos
#sub
#count
#replace
#explode
#urldecode
Příklady viz zde.
Zde je krátký přehled funkcí Module:String:
- #len (délka vlákna):
{{#invoke:String|len|target_string}}
- #sub (podřetězec):
{{#invoke:String|sub|target_string|start_index|end_index}}
- #match:
{{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}}
- #pos (pozice cíle):
{{#invoke:String|pos|target_string|index_value}}
- #find:
{{#invoke:String|find|source_string|target_string|start_index|plain_flag}}
- #replace:
{{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}}
- #rep (opakovat):
{{#invoke:String|rep|source|count}}
- #escapePattern:
{{#invoke:String|escapePattern|pattern_string}}
- #count:
{{#invoke:String|count|source_str|pattern_string|plain_flag}}
- #join:
{{#invoke:String|join|separator|string1|string2|...}}
Obecné problémy
Náhrady
Funkce syntaktického analyzátoru mohou být nahrazeny 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, protože stránka Help:Extension:ParserFunctions/cs existuje.
Náhrada nefunguje v rámci <ref>
…</ref>
. Pro tento účel můžete použít {{subst:#tag:ref|
…}}
.
Přesměrování
Zejména {{#time:
…|now-
…}} by se mohl hodit v přesměrování na stránky obsahující data, ale to nefunguje.
Únikové znaky svislítka v tabulkách
Funkce analyzátoru změní syntaxi wikitable a znaky svislé čáry (|
), přičemž všechny nezpracované znaky svislé čáry budou považovat za oddělovače parametrů.
Aby se tomu předešlo, většina wikin používala šablonu Template:! s obsahem pouze nezpracovaného znaku svislítka (|
), protože MW 1.24 jej nahradila skupinou znaků {{!}}
word .
Tím se "skryje" svislítko (roura, trubka, svislá čára) před analyzátorem MediaWiki, což zajistí, že se nepoužije, dokud nebudou rozbaleny všechny šablony a proměnné na stránce.
Poté bude interpretováno jako řádek tabulky nebo oddělovač sloupců.
Alternativně lze použít základní tabulku HTML. I když je to méně intuitivní a více náchylnější k chybám.
Znaku svislé čáry se můžete také, pro zobrazení základního, neinterpretovaného znaku, vyhnout pomocí entity HTML: |
.
Popis | Napíšete | Zobrazí se |
---|---|---|
Znak svislítka jako oddělovač řádků nebo sloupců tabulky | {{!}} |
| |
Svislítko jako prostý znak | | |
| |
Odstraňování mezer
Mezery, včetně nových řádků, tabulátorů a mezer, jsou odstraněny ze začátku a konce všech parametrů těchto funkcí analyzátoru. Pokud to není žádoucí, lze řetězce porovnávat po uvedení 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í zápisu <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 potlačuje více znaků mezery v jednom řádku do jednoho znaku.
<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í mezery, která má být prohlížečem zachována. Ale ani s ním nejsou mezery zobrazeny. K tomu dochází proto, 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 znaky  
(breakable space(rozbitný prostor)) nebo znaky
(non-breakable space(nerozbitný prostor)), protože nejsou měněny softwarem:
<span style="white-space: pre;">foo{{#if:||   bar   }}foo</span>
→ foo bar foofoo{{#if:|| bar }}foo
→ foo bar foo
Pozor, ne všechny parametry jsou si rovny. V ParserFunctions jsou prázdné znaky na začátku a konci vždy odstraněny. V šablonách jsou prázdné znaky na začátku a konci odstraněny pro pojmenované parametry a pojmenované nepojmenované parametry, ale ne z nepojmenovaných parametrů:
foo{{1x|content= bar}}foo
→ foobarfoofoo{{1x|1= bar}}foo
→ foobarfoofoo{{1x| bar }}foo
→ foo bar foo
Other parser functions
Case conversion functions
- Lowercase:
"{{lc: AbC}}"
→ "abc" [1] - Uppercase:
"{{uc: AbC}}"
→ "ABC" [2] - Lowercase first character:
"{{lcfirst: AbC}}"
→ "abC" [3] - Uppercase first character:
"{{ucfirst: abc}}"
→ "Abc" [4]
Encoding functions
- URL encoding:
"{{urlencode: AbC
dEf ghi}}"
renders as
"AbC%0AdEf+ghi"
So inner new lines convert into %0A, and inner spaces convert into +.
Anchor encoding
{{anchorencode: AbC dEf ghi}}
renders as
AbC_dEf_ghi
Padding functions
Formatting functions
"{{formatnum: 1234567890}}"
gives "1 234 567 890" [7]
Související odkazy
- Nápověda:Funkce analyzátoru v šablonách
- Parser extension tags
- Parser function hooks - (neúplný) seznam funkcí analyzátoru přidaných jádrem a rozšířeními.
- Manual:Newlines and spaces
- Manual:Converting between ParserFunctions syntax and TeX syntax
- Nápověda:Kouzelná slova
- Module:String zastarávající Extension:StringFunctions
- Rozšíření:PhpTags
- Funkce analyzátoru pro Wikibase (rozšíření, která umožňují Wikidata): How to use data on Wikimedia projects#Parser function
Poznámky pod čarou
- ↑ Před rokem 2011 tomu tak nebylo, jak dokládá r86805.
- ↑ ParserFunctions.php na phabricator.wikimedia.org