Nápověda:Šablony
![]() |
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. | ![]() |
Máte-li standardní texty, které chcete zařadit na několika stránkách, je funkce šablony MediaWiki ideálním nástrojem. Na rozdíl od rozšíření a mediálních souborů zde není žádné centrální úložiště šablon. Šablony mohou být nově napsány nebo pro úsporu již provedené duplicitní práce exportovány z jiné wiki, např. Wikipedie a poté importovány do cílové wiki.
Základní použití
Šablony jsou standardní wiki stránky, jejichž obsah je navržen tak, aby byl transkludován (vložen) do jiných stránek. Šablony se řídí konvencí, že název má předponu "Template:
" a přiřazuje je k tomuto jmennému prostoru. Kromě toho je můžete vytvořit jako kteroukoli jinou wiki stránku.
K transklusi šablony jste použili dvojité otevřené a zavřené složené závorky {{název šablony}}
.
Nejjednodušší použití šablon je následující: Vytvořte stránku s názvem Template:Welcome
s následujícím obsahem:
Ahoj! Vítejte na wiki.
Vytvořili jste svou první šablonu! Nyní vložte níže uvedený kód na novou stránku:
{{Welcome}}
Při zobrazení nové stránky se zobrazí text "Ahoj! Vítejte na wiki." zobrazí se místo {{Welcome}}
. Obsah šablony je přeložen do druhé stránky, tj. je integrován do stránky.
Kód {{Welcome}}
můžete vložit na kterékoli místo jakékoli stránky, na které chcete někoho přivítat. Předpokládejme, že se používá na 100 stránkách. Pokud změníte obsah šablony na:
Ahoj! Vítejte na této skvělé wiki.
znovu na kterékoli ze 100 stránek, kde byla šablona použita, místo původního uvidíte již nový text. Tímto způsobem jste změnili obsah 100 stránek, aniž byste je upravovali, protože na tyto stránky je přenesena šablona.
Toto je základní princip. Existuje několik dalších funkcí transluze, které obohacují tento mechanismus a činí šablony velmi užitečnými.
Způsoby, jak vyvolat šablonu
Šablony lze použít na jiných stránkách těmito způsoby:
{{Name}}
– jak je popsáno výše, tento text (běžně označovaný jako "volání šablony"(template call)) bude dynamicky nahrazen obsahem stránky s názvem Template:Name (proces zvaný "transclusion") pokaždé, když je stránka s voláním šablony načtena (tj. zobrazena čtenářem wiki). Protože volání šablony zůstává ve zdroji stránek, každá následná změna na Template:Name bude vidět na stránce obsahující volání šablony. Stránka bude také uvedena mezi těmi, které "odkazují" na šablonu.{{subst:Name}}
— při použití tohoto typu volání šablony bude nahrazeno statickou kopií obsahu šablony: Název v době, kdy je stránka obsahující volání šablony uložena. To znamená, že za volání šablony bude nahrazena kopie obsahu Template:Name. Mezi stránkou a šablonou není udržováno žádné propojení, takže každou lze dále upravovat, aniž by to ovlivnilo druhou. Ve skutečnosti je malý rozdíl mezi nahrazením obsahu tímto způsobem a jednoduchým zadáním do zdrojového kódu stránky "ručně". Další informace získáte na stránce Nápověda:Nahrazení .{{safesubst:Name}}
— toto bylo zavedeno, aby umožnilo rekurzivní substituci v případech, kdy šablony obsahují volání jiných šablon nebo funkcí analyzátoru. Další informace naleznete na Nápověda:Nahrazení .{{msgnw:Name}}
— zobrazí obsah šablony jako nezpracovanou syntaxi wiki (jako<nowiki>
), když je zobrazena stránka obsahující šablonu. Například{{msgnw:Template:Thankyou}}
zobrazí:
<noinclude> <languages/> </noinclude> '''Díky…''' za {{{reason|{{{1}}}}}}. zdraví {{{signature|{{{2}}}}}} <noinclude> [[Category:Template examples{{#translation:}}|{{PAGENAME}}]] </noinclude>
Ve skutečnosti lze běžnou wiki stránku použít také jako šablonu, jednoduše zadáním jmenného prostoru, ve kterém se nachází, takže:
{{Template:Pagename}}
převádí stránku s názvem Template:Pagename (ekvivalentní k{{Pagename}}
){{Talk:Pagename}}
převádí stránku s názvem Talk:Pagename{{:Pagename}}
převádí stránku s názvem Pagename (tj. v hlavním jmenném prostoru){{subst::Pagename}}
nahrazuje obsah stránky s názvem Pagename
Pokud zadaný jmenný prostor neexistuje, předpokládá se, že úplný název je šablona:
{{Foo:Bar}}
převádí Template:Foo:Bar
Bez ohledu na použitou syntaxi může být název šablony relativní k aktuální stránce
Pokud je například {{/bar}}
voláno na stránce foo, přenese se stránka foo/bar.
Může být také generován dynamicky.
Například {{ {{foo}} }}
volá Template:foo a interpretuje výsledek jako název jiné šablony, kterou chcete volat.
Parametry
Pro obohacení mechanismu transkluze umožňuje MediaWiki předat parametry šabloně, když je vkládána. Parametry umožňují šabloně vytvářet různý obsah nebo mít různé chování.
Předpokládejme, že chcete vložit malou poděkovací poznámku na diskusní stránku dalších uživatelů, například:
Díky…
za vaše úsilí.
zdraví Tonda
Jako první parametr šablony bude uvedeno zač je děkováno (v tomto případě "vaše úsilí") a jako druhý jméno děkujícího (např. "Tonda"). Vaším cílem je, aby kterýkoli uživatel mohl tímto způsobem za něco poděkovat jinému uživateli, kupř. v rámci diskuze.
Šablonu, například s názvem Template:Thankyou , použijete proto aby tato poznámka vypadala všude, kde se použije, stejně. I když bude vypadat každé poděkování podobně, jeho obsah (tj. důvod a podpis) se bude lišit vždy, pokud ji použije k poděkování někdo jiný, někomu jinému, za něco jiného. A to je obsah, který se bude předávat přes parametry. Zapomeňme pro tuto chvíli na ostatní prvky, které ovlivňují podobu rámečku a umístění obrázku. Z hlediska obsahu šablony, je rozhodující následující obsah:
'''Díky...'''
za {{{1}}}.
Zdraví {{{2}}}
Všimněte si použití {{{1}}}
a {{{2}}}
. Tak se do šablony vloží parametry předané při použití šablony. Identifikátory parametrů jsou uzavřeny do trojitých složených závorek: {{{ }}}
. To zajistí, že se nebudou interpretovat jako názvy šablony.
Když se šablona používá na stránce, oddělují se parametry znakem "svislítko" (|
). MediaWiki identifikuje parametry předané šabloně třemi způsoby: podle pozice, čísla nebo jména.
Nepojmenované, poziční parametry
Pokud parametry předané šabloně nepojmenujete, bude rozhodující jejich pořadí:
{{Thankyou|vaše úsilí|Tonda}}
V tomto případě se šabloně {{Thankyou}}
předají dva poziční parametry {{{1}}}=vaše úsilí
a {{{2}}}=Tonda
:
Díky…
za vaše úsilí.
zdraví Tonda
Pořadí, ve kterém jsou parametry uvedeny, je pro jejich zpracování důležité. Podívejme se, jak bude vypadat výsledek zpracování, pokud uvedeme tyto parametry v obráceném pořadí:
{{Thankyou|Tonda|vaše úsilí}}
a tohle je výsledek:
Díky…
za Tonda.
zdraví vaše úsilí
{{{1}}}
atd.) nemusí šablona fungovat správně. Žádné parametry identifikované jménem, jak je uvedeno níže, nebudou pro šablonu přístupné pomocí pořadových čísel.=
. Pokud se objeví v hodnotě pozičního parametru, může být předchozí textová hodnota tohoto parametru chybně interpretována jako identifikátor pojmenovaného parametru (což vysvětlujeme níže). Stává se to poměrně často, pokud chcete jako poziční parametr šablony použít externí link nebo parametrizovaný HTML element (viz T16235). Vyhnete se mu, pokud místo pozičních parametrů použijete parametry pojmenované, resp. očíslované.
Číslované parametry
Předávané parametry lze identifikovat podle čísla už při jejich předání:
{{Thankyou|2=Tonda|1=tvé přátelství}}
Tentokrát jsou šabloně {{Thankyou}}
předané dva očíslované parametry {{{1}}}=tvé přátelství
a {{{2}}}=Tonda
. Přestože byly v šabloně uvedené v obráceném pořadí, jsou zpracované takto:
Díky…
za tvé přátelství.
zdraví Tonda
- Příklad
{{Thankyou|1=přidání "="|2=Tonda}}
zobrazí se:
Díky…
za přidání "=".
zdraví Tonda
Pojmenované parametry
Místo čísel můžete použít jako identifikátory i textové řetězce. V tomto případě by se obsah šablony změnil na:
'''Díky...'''
za {{{reason}}}.
Zdraví {{{signature}}}
V šabloně nyní místo čísla použijeme pro první parametr {{{reason}}}
a pro druhý {{{signature}}}
:
{{Thankyou|signature=Tonda|reason=to že jsi tím, kým jsi}}
V tomto případě šablona {{Thankyou}}
převezme parametry {{{{reason}}}=to že jsi tím, kým jsi
a {{{signature}}}}=Tonda
a vytvoří:
Díky…
za to že jsi tím, kým jsi.
zdraví Tonda
Pojmenované parametry rozlišují velká a malá písmena, takže:
{{Thankyou|signature=Tonda|Reason=to že jsi tím, kým jsi|reason=tohle zobrazím, protože u identifikátorů záleží na psaní velkých a malých písmen}}
zobrazí:
Díky…
za tohle zobrazím, protože u identifikátorů záleží na psaní velkých a malých písmen.
zdraví Tonda
Výhodou použití pojmenovaných parametrů ve vaší šabloně, kromě toho, že lze předat parametry v jiném pořadí, je i to, že je kód šablony snáze pochopitelný, a to i při použití mnoha parametrů.
Mezery a nové řádky jsou automaticky odstraněny ze začátku a konce jmen a hodnot pojmenovaných parametrů, ale jsou zachovány v nepojmenovaných parametrech.
Míchání pojmenovaných a nepojmenovaných parametrů
Pokud to šablona podporuje, lze v jednom volání použít oba druhy parametrů.
Například {{Thankyou|supporting both parameter types|signature=Me}}
má za následek:
Díky…
za supporting both parameter types.
zdraví Me
Buďte při tom opatrní, protože to může vést k nepřetržitým výsledkům, protože počty nepojmenovaných parametrů jsou založeny pouze na nepojmenovaných parametrech, nikoli na pojmenovaných parametrech.
Například {{Thankyou|Me|reason=supporting both parameter types}}
má za následek:
Díky…
za supporting both parameter types.
zdraví {{{2}}}
Šablona je kódována tak, aby upřednostňovala pojmenovaný parametr z důvodu před nepojmenovaným parametrem, což má za následek ztrátu "Já" a žádný podpis.
Výsledkem je zobrazení výchozí hodnoty {{{2}}}, jak je vysvětleno níže.
Výchozí hodnoty
Pokud převedete šablonu, která očekává parametry, ale neposkytnete jejich argumenty, tímto způsobem:
{{Thankyou}}
v příkladu s číslovanými parametry, uvedeném výše, získáte následující:
Díky…
za {{{1}}}.
zdraví {{{2}}}
Vzhledem k tomu, že nebyly předány žádné argumenty, představuje šablona samotné parametry namísto jejich příslušných hodnot. V těchto případech může být užitečné definovat výchozí hodnoty pro parametry, tj. hodnoty, které budou použity, pokud nebude předána žádná hodnota. Například pokud se obsah šablony změní na:
'''Děkuji...'''
za {{{reason|všechno}}}.
kdo, {{{signature|Já}}}
pak {{reason|všechno}}
definuje, že pokud není poskytnut žádný argument pro parametr {{{reason}}}
, pak bude použita hodnota všechno
. Podobně {{{signature|Já}}}
, výchozí parametr {{{signature}}}
má hodnotu Já
. Výsledkem opětovného převedení šablony bez předání argumentu je následující:
Díky…
za všechno.
zdraví Já
{{foo|bar=}}
nebo {{foo|bar=|baz=qux}}
šablona foo
považuje parametr bar
za ""
. To se liší od úplného vynechání parametru, který jej ponechá nedefinovaný a spustí mechanismus výchozích hodnot popsaný výše.{{#if:{{{1|}}}|{{{1|}}}|undefined}}
vrátí hodnotu undefined, pokud je parametr buď nedefinovaný nebo prázdný, zatímco {{{1|undefined}}}
tak učiní pouze v případě, že parametr není definován.K určení alternativních názvů parametrů se často používají výchozí hodnoty.
Pokud máte například {{{a|{{{b|}}} }}}
, šablona nejprve vyhledá parametr s názvem "a".
Pokud není nastaven, použije parametr s názvem "b".
Pokud není nastaveno ani "a" ani "b", nevypíše se nic.
Předávání parametrů do jiných šablon
Pokud je syntaxe parametru raw generována výše uvedeným voláním šablony a poté předána jiné šabloně, není interpretována jako parametr. To znamená, že {{Thankyou2 }}, který pouze volá {{Thankyou }} bez parametrů, nefunguje: {{thankyou2|everything|me}} → Díky… za {{{1}}}. zdraví {{{2}}}
Místo toho musíte explicitně předat parametr jiné šabloně, tj. pokud {{Thankyou3 }} obsahuje
{{thankyou|{{{1}}}|{{{2}}}}}
pak funguje správně: {{thankyou3|everything|me}} → Díky… za everything. zdraví me
Tento příklad nezachovává prázdnotu vs. nedefinovatelnost v hodnotách parametrů – pokud byste to chtěli udělat, potřebovali byste složitější syntaxi.
Prázdné vs. nedefinované parametry
{{t2demo|| a }}
(viz {{T2demo }}) s dvojitou čárou nastaví první parametr na prázdný řetězec místo toho, aby jej ponechal nedefinovaný.
Vytváří výstup start--middle- a -end
, podobně jako {{t2demo|1=|2= a }}
vede k start--middle- a -end
.
Na druhou stranu, explicitní nastavení parametru "2" na "a" má za následek, že první nepojmenovaný parametr zůstane undefined:
{{t2demo|2= a }} znamená start-{{{1}}}-middle- a -end
Pokud druhý parametr nemá být oříznut, musí být bez názvu.
Proto můžete prvnímu parametru přiřadit prázdný řetězec, ale nemůžete jej nechat nedefinovaný.
Vytvoření ekvivalentu prázdnoty a nedefinovanosti
Dobré praktiky kódování šablony vedou k předání prázdného řetězce parametru, který funguje stejně jako nepřiřazování žádné hodnoty. Díky tomu jsou věci jednodušší a konzistentnější.
Například použití p=
může ukázat, že šablona má parametr "p", který zatím nemá hodnotu.
Chcete-li vytvořit ekvivalent prázdného řetězce a nedefinované hodnoty, použijte následující postupy:
- Použijte výhradně
{{{p|}}}
místo{{{p}}}
neboq
, kde "q" není prázdná hodnota. - Použijte podmíněné kontroly, jako je
{{#if:{{{p|}}}|..{{{p}}}..|..}}
, abyste zajistili, že{{{p}}}
bude použit pouze tehdy, když má hodnotu.
Pokud z nějakého důvodu chcete s nedefinovanými parametry zacházet jinak než s prázdnými parametry nebo s jakoukoli jinou možnou hodnotou, můžete porovnat stejný parametr dvakrát s různými výchozími hodnotami, tj. {{#ifeq:{{{foo|bar}}}|{{{foo|baz}}}|parameter is defined|parameter is undefined}}
.
Použití znamének rovná se v nepojmenovaných parametrech
Nepojmenované parametry mohou obsahovat rovnítko, ale to musí být provedeno nepřímo. Zde je několik metod využívajících template:T1demo:
- Výchozí hodnota pro nedefinovaný parametr
Přiřaďte výchozí hodnotu nedefinovanému parametru:
{{T1demo|{{{1| a=b }}}}}
To se zobrazí jako: start a=b end
.
- Pomocí funkce analyzátoru
{{=}}
Použijte funkci analyzátoru, která bezpečně obsahuje rovnítko:
{{T1demo| a{{=}}b }}
To se zobrazí jako: start a=b end
.
- HTML entity
Nahraďte rovnítko entitou HTML pro zobrazení:
{{T1demo| a=b }}
To se zobrazí jako: start a=b end
.
To se vykreslí správně, aniž by to ovlivnilo ostatní parametry.
Práce s opačnými složenými a hranatými závorkami
Opačné složené závorky ({{
, }}
) nebo hranaté závorky ([[
, ]]
) musí být uvnitř značek nowiki nebo musí používat entity HTML:
- Vykreslení složených závorek má dvě možnosti:
- Použijte
<nowiki>{{</nowiki>
nebo{
pro{
- Použijte
<nowiki>}}</nowiki>
nebo}
pro}
.
- Použijte
- Použijte
[
pro[
a]
pro]
.
Níže uvádíme několik příkladů:
- Opačné složené závorky
{{T1demo| <nowiki>{{</nowiki>content<nowiki>}}</nowiki> }}
To správně vykreslí závorky bez porušení šablony.
- Opačné hranaté závorky
{{T1demo| text [link] more text }}
Toto správně vykreslí závorky bez porušení šablony.
To se zobrazí jako:
start text [link] more text end
Neodpovídající páry, které nejsou umístěny ve značkách nowiki, buď brání rozšíření šablony, nebo jsou brány jako uzavírací složené závorky pro volání šablony.
Níže uvádíme několik příkladů:
{{T1demo|abc]]def[[ghi}}
To se správně nerozšíří kvůli neodpovídajícím závorkám.
Správné použití:
{{T1demo|abc<nowiki>]]</nowiki>def<nowiki>[[</nowiki>ghi}}
To se zobrazí jako:
startabc]]def[[ghiend
Závorky vygenerované šablonou
Alternativní technikou pro předávání argumentů s neshodnými závorkami je jejich zabalení do jiné šablony. V takové situaci (která na této wiki existuje s {{(( }} a {{)) }})) budou neshodné závorky vykresleny doslovně a nebudou dekódovány jako další volání šablony. Například:
{{t1demo|{{((}}t1demo{{))}}}}
výsledky v: start{{t1demo}}end
Když nahrazuje šablonu, zahrnutí šablony se analyzuje jednou, když dojde k subst (se stejnými výhradami vysvětlenými výše) a poté podruhé při vykreslování výsledného wikitextu. Například:
{{subst:((}}t1demo|foo}}
se při uložení rozbalí na:
{{t1demo|foo}}
který se pak vykreslí jako:
startfooend
Pokud samotný wikitext vygenerovaný prostřednictvím prvního subst obsahuje syntaxi "subst:", nebude zpracován při stejném uložení, ale může být při příštím uložení. Tuto techniku lze použít k implementaci rekurzivních substitucí, jejichž vyhodnocení vyžaduje více uložení.
Použití svislítka v hodnotách parametrů
Hodnota parametru nemůže obsahovat svislý znak (|), protože by byl interpretován jako konec tohoto parametru a začátek dalšího parametru.
To lze obejít pomocí funkce parser {{!}}
nebo HTML entity &124;.
Tyto dva způsoby, jak toho dosáhnout, mají mírně odlišné chování, což může být relevantní v některých okrajových případech, jako když šablona vytváří syntaxi wikitable.
Příklad:
{{T1demo|abc|def}}
zobrazí se:
startabcend
"def" se nezobrazuje, protože je považováno za součást jiného nepojmenovaného parametru, který šablona nepoužívá.
{{T1demo|abc{{!}}def}}
zobrazí se:
startabc|defend
"def" se zobrazuje správně.
{{T1demo|abc|def}}
zobrazí se:
startabc|defend
"def" se znovu správně zobrazí.
Formátování volání šablon pomocí dalších parametrů
Vzhledem k tomu, že šablony ignorují parametry, které jsou předány, ale nezpracovávají je konkrétně, lze je použít jako způsob přidání dalších mezer nebo nepoužitého obsahu do volání šablony.
Například:
{{template name|foo|bar|baz|mumble|quux}}
je ekvivalentní, za předpokladu, že šablona nerozpozná SPACEN jako název parametru:
{{template name|SPACE1=
|foo|SPACE2=
|bar|SPACE3=Random stuff
|baz|SPACE4=
|mumble|SPACE5=
quux
}}
Je také možné použít stejný název pro každý mezerník (často prázdný řetězec), ale tím se naplní Category:Pages using duplicate arguments in template calls, což mnoho wikin raději ponechává prázdné, aby zachytily případy uživatelských chyb.
Toho lze využít k tomu, aby se šablona vykreslila podobným způsobem jako její výstup, jako je zobrazení každého řádku w:Template:Chess position samostatně, aby wikitext také vypadal jako šachovnice.
Využití parametrů sledování
Pro šablonu může být rozumné přidat odkaz nebo kategorii na stránku, pokud je použit určitý parametr nebo kombinace parametrů, aby bylo možné snadno určit, které stránky daný parametr používají, a tedy jaké by byly dopady změny tohoto parametru v šabloně.
Proces hodnocení
Obecně řečeno, parametry šablony jsou nahrazeny do šablony po tokenizaci (zpracování symbolů), ale tak, jak jsou. Nejsou hodnoceny, dokud nejsou použity.
To má několik důsledků.
- Za prvé, pokud máte
Template:Start
obsahující{{mytemplate
aTemplate:End
obsahující|foo=bar}}
a vložíte{{start}}{{end}}
na stránku, mytemplate nebude transkludováno, protože tokeny jako "|" nelze přidat pomocí šablony a zachovat jejich speciální význam v šablonách. K ovládání názvu parametru nebo šablony můžete stále používat šablony, ale nemůžete rozdělit volání šablony mezi více šablon. - Odstranění mrtvého kódu: Pokud provedete volání šablony jako
{{foo|{{DISPLAYTITLE:Bar}} }}
aTemplate:Foo
neobsahuje {{{1}}}, pak seDISPLAYTITLE
nepoužije, protože se vyhodnotí pouze v případě potřeby a neexistuje žádný parametr, do kterého by se dal nahradit, takže se to nikdy nehodnotí. To obvykle přichází do hry při použití Rozšíření:ParserFunctions a lze si toho všimnout zejména při použití v kombinaci s kouzelným slovemint:
, které se liší podle jazyka uživatele. To není dokonalé a v některých případech, i když se nepoužije výsledek rozbalení šablony (protože je například součástí podmínky příkazu if), proces jeho vyhodnocení může mít vedlejší účinky. Například všechny vytvořené odkazy nebo jiné použité šablony budou stále přidány do Special:WhatLinksHere, i když nejsou zobrazeny.
Parametry šablony jsou pass by value, což znamená, že šablona nemůže měnit své argumenty. S parametry se zachází jako s asociativním polem a názvy parametrů se vyhodnocují před hodnotami parametrů. Pokud je stejný název parametru zadán více než jednou (buď jako pojmenovaný nebo nepojmenovaný), použije se pouze poslední instance a stránka se přidá k Category:Pages using duplicate arguments in template calls.
Volání šablony začínající magickým slovem subst:
nebo safesubst:
jsou vyhodnocena v samostatném prvním průchodu, který probíhá pouze v době uložení, spolu s ~~~~ a odkazy pomocí pipe triku.
Pokud je nelze vyhodnotit během prvního průchodu, volání subst:
jsou ignorována a safesubst:
jsou považována za normální šablonu.
Mnoho, ale ne všechny funkce analyzátoru, značky analyzátoru a transkludované speciální stránky nejsou přímo zahrnuty jako šablony, ale místo toho jsou nahrazeny "značkou stripu". To znamená, že nemůžete pracovat s výsledky pomocí funkcí analyzátoru, jako je padleft: nebo podobných funkcí z rozšíření, protože místo výsledku funkce analyzátoru vidí značku stripu.
Rekurze v šablonách
Zahrnutí šablony samo do sebe nespustí MediaWiki do nekonečné rekurze (určitá procedura nebo funkce je znovu volána dříve, než je dokončeno její předchozí volání).
MediaWiki zastaví rekurzi tučným názvem šablony.
Pokud je například obsah Template:Aaaa a {{Aaaa}} z
, zobrazí se "a a Template loop detected: Template:Aaaa z z".
Tato ochrana vylučuje potenciálně užitečný idiom šablony, kde šablona sama normalizuje své vlastní volací argumenty.
V tomto zakázaném příkladu lze template:d
nazývat {{d|20200311}}
nebo {{d|y=2020|m=3|d=11}}
.
Pokud je volána prvním způsobem, vrátí se do sebe se strukturou druhého argumentu (získaného pomocí funkcí analyzátoru řetězců), která pak následuje jednotnou cestu zpracování.
{{#if:{{{1|}}}|{{d|y={{#sub:{{{1}}}|0|4}}|m={{#sub:{{{1}}}|4|2}}|d={{#sub:{{{1}}}|6|2}}}}|<!-- processing path with arguments y,m,d regardless of original call pattern -->}}
Pokud je template:d
upraven tak, aby rekurzoval na template:d/2
a template:d/2
je identická ruční kopie template:d
, tento idiom funguje dobře, protože ochrana proti samo-rekurzi funguje dynamicky a ne staticky.
Schůdným způsobem, jak software MediaWiki uvolnit pravidlo samo-rekurze, by bylo vyžadovat, aby každé rekurzivní volání mělo odlišný počet argumentů od všech předchozích aktivních volání, maximálně jednou opakující se s neklesajícím počtem argumentů. To by poskytlo silnou záruku proti nekonečné seberekurzi a zároveň umožnilo flexibilním způsobem užitečné idiomy, jako je ten zde popsaný.
Pokud je procesní cesta málo složitá, jednoduchým řešením využívajícím pouze jednu šablonu je zpracovat každou volající konvenci na samostatné větvi if/else, čímž se v každém případě duplikuje logika procesní cesty. Pokud je cesta zpracování složitější, každý případ struktury volání lze delegovat na implementační šablonu s jednotnou strukturou volání, která poskytuje konečné chování šablony.
Tabulky v parametrech
Vzhledem k tomu, že znak svislé čáry (|
) a znak rovnosti (=
) mají ve volání šablon a wikitabulkách různý význam, k použití značky tabulky v hodnotě parametru šablony je obecně nutné tyto znaky "escapovat" (tj. chránit je před interpretace jako značkování šablony) pomocí speciálních sekvencí:
- vestavěné kouzelné slovo
{{!}}
poskytuje "uniklou" verzi|
od MediaWiki 1.24 - vestavěné kouzelné slůvko
{{=}}
poskytuje "escapovanou" verzi=
od MediaWiki 1.39
Před zavedením těchto kouzelných slov používalo mnoho wikin k dosažení stejných věcí šablony. Na takové wiki mají kouzelná slova přednost před stejnojmennými šablonami.
Příklad tabulky
A | B | C |
---|---|---|
A1 | B1 | C1 |
A2 | B2 | C1 |
Kód tabulky:
{| class=wikitable
!A!!B!!C
|-
|A1||B1||C1
|-
|A2||B2||C1
|}
Kód escapované tabulky:
{{{!}} class{{=}}wikitable
!A!!B!!C
{{!}}-
{{!}}A1{{!}}{{!}}B1{{!}}{{!}}C1
{{!}}-
{{!}}A2{{!}}{{!}}B2{{!}}{{!}}C2
{{!}}}
Všimněte si, že první levá složená závorka ({
) je interpretována jako doslovný znak levé složené závorky, protože za ní bezprostředně následuje magické slovo {{!}}
.
Podobně je poslední pravá složená závorka (}
) interpretována jako doslovná pravá závorka, protože před ní bezprostředně předchází stejné kouzelné slovo.
V některých případech však tyto znaky složené závorky způsobují problémy, takže některé wikiny poskytují šablony pro escapování těchto znaků také:
- volání šablony
{{(}}
může poskytnout "escapovanou" verzi{
- volání šablony
{{)}}
může poskytnout "escapovanou" verzi}
Některé wikiny jdou ještě dále a poskytují další vhodné šablony, jako je {{(!}} ({|
), {{!)}} (|}
), {{!!}} (||
).
Na takové wiki lze kód trochu zjednodušit do této podoby:
{{(!}} class{{=}}wikitable
!A!!B!!C
{{!}}-
{{!}}A1{{!!}}B1{{!!}}C1
{{!}}-
{{!}}A2{{!!}}B2{{!!}}C2
{{!)}}
Zahrnutí kontrolní šablony
Ve výchozím nastavení je obsah šablony zobrazen jako celek. A to jak při přímém prohlížení, tak při zahrnutí na jinou stránku. Stránka šablony se při přímém zobrazení zobrazí přesně tak, jak by se šablona vykreslila bez jakýchkoli parametrů. Pokud šablona vyžaduje parametry, aby správně fungovala, bude to mít za následek nezpracovanou syntaxi wikitextu nebo chyby v důsledku toho, že chybějí. Například:
- Pokud parametr nemá žádnou výchozí hodnotu, zobrazí se jako doslovný text {{{1}}}, což znamená, že šablona potřebuje parametr.
- Pokud má parametr prázdnou výchozí hodnotu (je zapsán jako {{{1|}}}), nezobrazuje nic, čímž se dosáhne zamýšleného účinku, ale postrádá jasnost pro vlastní dokumentaci. Použití neprázdné výchozí hodnoty, jako je
{{{1|obrázek}}}
, by mohlo objasnit roli parametru, zejména u šablon obsahujících obrázky. - Pokud je funkci analyzátoru
#expr
předán parametr bez výchozí hodnoty, zobrazí se chybová zpráva: "Chyba výrazu: nerozpoznaný interpunkční znak '{'." - Pokud šablona vytváří tabulku, je užitečné, aby stránka šablony zobrazovala spíše strukturu tabulky než wikitext použitý k jejímu vytvoření. Za tímto účelem není syntaxe tabulky uzavřena ve značkách a každý prvek tabulky obsahuje v případě potřeby části
<noinclude>...</noinclude>
a<includeonly>...</includeonly>
.
Můžete však ovládat, které části šablony budou vidět a zahrnuty pomocí značek <noinclude>
, <includeonly>
a <onlyinclude>
.
Všechno mezi <noinclude>
a </noinclude>
bude vidět pouze tehdy, když se stránka šablony prohlíží přímo, ale ne, když je zahrnuta do jiné stránky. To je užitečné, pokud chcete do šablony zahrnout text nebo kód, který nechcete šířit na žádné stránky, které jej obsahují, jako například:
- Odkazy při kategorizaci samotné šablony.
- Mezijazyčné odkazy na podobné šablony v jiných jazycích.
- Vysvětlující text k použití šablony. Na některých wikinách je běžným vzorem použití šablony jako {{Documentation }} k převedení dokumentace z podstránky šablony. Například Template:Void je zdokumentováno na Template:Void/doc.
Podobně bude cokoli mezi <includeonly>
a </includeonly>
zpracováno a zobrazeno pouze při zahrnutí stránky, ale ne při přímém prohlížení stránky šablony. To je užitečné v situacích, jako například:
- Kategorizace stránek obsahujících šablonu. Poznámka: Při změně kategorií použitých šablonou tímto způsobem nemusí být kategorizace stránek, které tuto šablonu obsahují, aktualizována okamžitě, ale až za nějaký čas: Zpracovává ji fronta úloh . Chcete-li vynutit změnu kategorizace konkrétní stránky, otevřete ji pro úpravy a uložte ji beze změn.
- Zajištění, že kód šablony nebude spuštěn při prohlížení samotné stránky šablony. Obvykle je to proto, že očekává parametry a provedení bez parametrů má nežádoucí výsledek.
Všechno mimo <noinclude>
a <includeonly>
je zpracováno a zobrazeno normálně. To znamená, když se stránka šablony prohlíží přímo nebo když je šablona zahrnuta na jiné stránce.
Důraz je kladen na to, co je uvnitř těchto dvou značek.
Všechno mimo <onlyinclude>
tagy je při převodu vyřazeno.
Dokonce i sekce označené pouze includeonly (včetně) jsou při převodu zahozeny, pokud nejsou označeny jako onlyinclude (zahrnout pouze).
Důraz je kladen pouze na to, co je uvnitř této značky.
Pokud například stránka jako Nápověda:Šablony/pouze včetně ukázky obsahuje wikitext:
abc<onlyinclude>def</onlyinclude>ghi<includeonly>jkl</includeonly>
Výsledek přepočtu je def.
Je také možné vnoření těchto značek.
Tři značky pro částečný přechod umožňují všechny možné kombinace toho, co je zpracováno a vykresleno.
Roli plní i komentáře.
Značky zahrnutí jsou respektovány při použití {{subst:templatename}}
, ale nejsou respektovány při použití {{msgnw:templatename}}
, protože zobrazuje nezpracovaný wikitext bez jakéhokoli zpracování.
Transkluze sekce
Chcete-li převést různé části šablony na různé stránky, můžete obsah zabalit do značek onlyinclude a pomocí příkazu if na parametrech vybrat, kterou část.
Uvažujte o "Template:Example" s tímto textem na wiki:
== Section 1 ==
{{#ifeq:{{{1|1}}}|1|
Content of section one.
}}
{{#ifeq:{{{1|2}}}|2|
== Section 2 ==
Content of section two.
}}
Tím se vykreslí obě sekce na samotné ukázkové stránce a umožní ostatním stránkám převést první sekci s {{example|1}}
a druhou sekci s {{example|2}}
.
Dalším přístupem je místo toho použít doslovnou syntaxi parametru:
{{{section1|
== Section 1 ==
Content of section one.
}}}
{{{section2|
== Section 2 ==
Content of section two.
}}}
Transkludujte první sekci {{example|section2=}}
a druhou sekci {{example|section1=}}
.
Pokud není použit žádný parametr, zobrazí se obě části.
Třetím přístupem je použití Labeled Section Transclusion .
Organizování šablon
Aby byly šablony efektivní, musí je uživatelé jednoduše najít a zjistit, jak je správně používat.
Uživatelé je mohou najít:
- Kliknutím na
Speciální stránky
>Všechny stránky
- V seznamu
Jmenný prostor:
zvolte Template a klikněte naPřejít
.
Chcete-li poskytnout informace o způsobu použití, připojte na stránku šablony takovýto příklad:
<noinclude> == Použití == Uživatelé vítejte: {{Thankyou|reason=tvůj důvod|signature=tvůj podpis}} </noinclude>
Redaktor potom podobnou stránku vytvoří tak, že příklad jednoduše zkopíruje.
Při úpravách stránky je v editačním formuláři k dispozici seznam všech použitých šablon ve sbalitelné sekci s názvem "Šablony použité na této stránce:" (také pojmenovaný "Šablony použité v tomto náhledu:" nebo "Šablony použité v této části stránky:" v závislosti na kontextu). Tento seznam poskytuje pohodlný odkaz na stránku šablony a také informace o jejím stavu ochrany. Přesměrované šablony jsou zobrazeny kurzívou, přičemž cíl přesměrování je přidán jako samostatná položka seznamu.
Propojení na šablonu
Stránku šablony lze propojit s jakoukoli jinou stránkou wiki. Například odkaz Template:Navbar je generován pomocí wikicode [[Template:Navbar]]
.
Na mnoha wikinách Template:Tl lze použít k vytvoření odkazu na šablonu formátovanou způsobem, který ukazuje wikicode "double curly-braces" nezbytný k převedení šablony bez skutečného provedení převodu. Například kód {{tl|Navbar}}
může být použit k vytvoření odkazu {{Navbar }}.
Tento způsob se běžně používá v dokumentaci šablon, na stránkách nápovědy a na diskusních stránkách při odkazování na šablony.
Stejného efektu lze dosáhnout použitím {{[[Template:Navbar|Navbar]]}}
, ale použití {{Tl }}
vyžaduje o dost méně psaní.
Na jakékoli dané wiki šablona Tl, pokud existuje, může nebo nemusí vykreslit text v prvku "kód" nebo jako typ monospace.
Pokud ne (jako na této wiki), může tak učinit jiná podobně pojmenovaná šablona.
Viz například část "Viz také" naší dokumentace Template:Tl.
Pojmenování šablony
V názvu šablony se rozlišují velká a malá písmena s výjimkou prvního znaku.
Pro alternativní použití velkých písmen proveďte přesměrování.
Pokud se například šablona jmenuje "AdminAbbr", můžete vytvořit přesměrování s názvem "Adminabbr".
Tímto způsobem lze šablonu volat buď s {{AdminAbbr}}
nebo {{adminabbr}}
.
Pokud editor upřednostňuje kombinaci velkých a malých písmen kvůli přehlednosti, může použít funkce jako lc nebo uc.
Například místo {{CURRENTINTERNETTIME}}
mohou použít {{ {{uc:CurrentInternetTime}} }}
Protože jsou názvy šablon interpretovány stejným způsobem jako názvy jiných stránek, jsou podtržítka nahrazena mezerami a jakýkoli text za znakem čísla (co by byl kotva ve standardním odkazu) je ignorován.
Podtržítko _
může být alternativou k prázdnému místu.
Možné použití šablon
Šablony lze použít pro jakoukoli situaci, kdy chcete, aby dvě nebo více stránek obsahovalo identický nebo podobný obsah, který je upravován společně, nikoli nezávisle. Lze je použít k:
- Poskytnutí strukturovaných prvků na mnoha stránkách, jako jsou infoboxy, šablony údržby, navigační boxy atd.
- Provádění výpočtů používaných jako programovací nástroj na různých stránkách, například w:Template:Sum.
- Vytváření složených stránek, které zobrazují obsah několika existujících stránek společně, například w:WP:Village pump (all), která zahrnuje obsah z každé části vesnické pumpy. Obsah těchto stránek lze zobrazit jednotlivě nebo společně, ale historie revizí, seznam sledovaných stránek atd. zachytí pouze změny přeložených stránek a nezpracovaný wikitext samotné složené stránky, nikoli implicitní změny složené stránky.
- Sdílení obsahu mezi několika souvisejícími stránkami. Například seznam na Nápověda:Předvolby#Funkce beta je duplikován na Funkce beta#Aktuální funkce beta. Zatímco na MediaWiki.org, která je místo toho vytvořena pomocí Extension:LabeledSectionTransclusion , mohla být provedena pomocí šablony.
- Ukládání obsahu, na který se odkazuje vícekrát na stejné stránce, takže jej stačí zapsat a vypočítat pouze jednou. Například w:Template:Cite Monumentenregister/URL volá w:Template:Cite Monumentenregister dvakrát na dvou různých místech a použití jiné šablony znamená, že vzor adresy URL musí být do základní šablony zapsán pouze jednou.
- Použití šablony jako programovacího prvku pro generování smyčky: Pokud Template:A volá Template:B 10krát s různými parametry, pak to hrubě simuluje smyčku for. Pokud Template:B volá Template:C 10krát, pak máte vnořenou smyčku 100 volání Template:C. Mějte však na paměti, že při používání šablon jako pokročilých programovacích konstrukcí je snadné narazit na limity šablon a použití Scribunto je obecně jasnější a snáze se s ním řídit.
Kopírování z jedné wiki do druhé
Pokud to povoluje konfigurace wiki , je možné převádět šablony z jiných wikin. Toto nastavení konfigurace je na wikinách Wikimedie zakázáno. V opačném případě musíte šablonu a její závislosti ručně zkopírovat ze zdrojové wiki do cílové wiki, abyste ji mohli použít.
Šablony často vyžadují CSS nebo jiné šablony, takže uživatelé mají často potíže s kopírováním šablon z jedné wiki do druhé. Níže uvedené kroky by měly fungovat pro většinu šablon.
MediaWiki code
Pokud máte nová importní práva (konkrétně importupload):
- Přejděte na Special:Export na původní wiki a stáhněte soubor .xml s úplnou historií všech potřebných šablon, takto:
- Do textového pole zadejte název šablony, např. "Template:Welcome". Zvláštní pozornost věnujte malým a velkým písmenům a zvláštním znakům - pokud není název šablony přesně správný, může dojít k exportu, ale soubor XML nebude mít očekávaná data.
- Zaškrtněte políčko "Zahrnout šablony".
- Zaškrtněte políčko "Zahrnout jen současnou verzi, ne plnou historii".
- Klikněte na "Exportovat".
- Na nové wiki přejděte na Special:Import a nahrajte soubor .xml.
Pokud nemáte nová importní práva na novou wiki:
- Přejděte na šablonu, kterou chcete zkopírovat z původní wiki. Přejděte na stránku úprav a zkopírujte celý wikitext
- Na nové wiki přejděte na stránku se stejným názvem jako šablona, kterou jste zkopírovali. Klikněte na vytvořit/upravit a vložte zkopírovaný wikitext. V souhrnu úprav každé šablony uveďte odkaz na původní stránku pro přiřazení.
- Zpět na původní wiki v okně úprav pod polem úprav se podívejte na seznam "Šablony použité na této stránce". Pro každou uvedenou šablonu postupujte podle těchto pokynů. Udělejte to také pro jakoukoli šablonu používanou kteroukoli z těchto šablon a tak dále.
Tím se zkopíruje celý nezbytný kód a bude stačit pro některé šablony. Všimněte si, že se exportují pouze prvky stránky analyzované při vykreslování stránky, v důsledku toho se v rámci tohoto procesu neexportují podstránky dokumentace. Pokud to nefunguje, zkontrolujte také červené odkazy uvedené v části "Pages transcluded onto the current version of this page:" (stránky přenesené na aktuální verzi této stránky) pod editačním polem. Pokud nějaké existují, opakujte výše uvedené kroky i pro ně a také zkopírujte kód do modulů.
Po úspěšném importu šablony a všech souvisejících šablon z druhé wiki šablonu upravte tak, aby vyhovovala vaší wiki. Chcete-li například změnit logo, odeberte nadbytečné kategorie nebo červené odkazy.
Rozšíření
Přípona často používaná v šablonách je ParserFunctions. Navštivte stránku Rozšíření:ParserFunctions a zkontrolujte, zda se ve zkopírovaných šablonách nepoužívají některé ze zde uvedených funkcí. Pokud ano, musíte nainstalovat rozšíření ParserFunctions . K jeho instalaci budete potřebovat systémový administrátorský přístup k serveru vaší instalace MediaWiki.
Další závislost, kterou lze použít v šablonách, zejména na Wikipedii, je Lua (programovací jazyk). Dobré je mít {{#invoke: }}
v kódu šablony.
V případě, že se používá, musíte nainstalovat rozšíření Scribunto . I zde je vyžadován přístup správce systému.
Na této stránce naleznete další pokyny k instalaci a používání rozšíření.
CSS a kód JavaScript
Kromě kódu MediaWiki mnoho šablon využívá CSS a některé spoléhají na plné fungování JavaScriptu. Pokud se zkopírované šablony nebudou chovat podle očekávání, může zde být příčina. Chcete-li zkopírovat požadované CSS a JavaScript na svou wiki, obvykle budete potřebovat administrátorská oprávnění, protože budete upravovat systémové zprávy ve jmenném prostoru "MediaWiki:".
- V textu šablony hledejte použití tříd CSS (text jako
class="foobar"
). Pokud se tyto třídy objevují vMediaWiki:Common.css
neboMediaWiki:Vector.css
na původní wiki, zkopírujte tyto třídy doMediaWiki:Common.css
na nové wiki a zkontrolujte, zda je šablona nyní v pořádku. - Pokud zkopírovaná šablona stále nefunguje podle očekávání, zkontrolujte, zda je na původní wiki kód v
MediaWiki:Common.js
neboMediaWiki:Vector.js
. Pokud ano, můžete to zkusit zkopírovat doMediaWiki:Common.js
na nové wiki. Normálně je dobré zkopírovat kód pouze z důvěryhodných zdrojů a procházet kód, abyste identifikovali a vybrali příslušné části. Můžete najít komentáře, které mohou sloužit jako vodítka k identifikaci funkčnosti každé části.
Přesměrování
Pokud stránka používá přesměrování jako šablonu, přesměrování se vyřeší před zpracováním šablony a místo toho se použije cíl. Toto nebude fungovat, pokud cíl neexistuje (nefunkční přesměrování) nebo je sám přesměrováním (dvojité přesměrování).
Stránka, která jako šablonu obsahuje jinou stránku, může vypadat jako přesměrování, ale existuje mezi nimi několik rozdílů:
- V záhlaví výsledku se zobrazuje název stránky, ze které pochází.
- Nezobrazuje se žádná zpráva "Redirected from" (přesměrováno z).
- Tlačítka jako upravit, sledovat, mluvit, historie, "co sem odkazuje" a "naposledy upraveno" ukazují na odkazující stránku. Chcete-li přejít na cílovou stránku, použijte odkaz pro úpravu sekce a přejděte odtud.
- Pokud nejsou použity značky includeonly a/nebo noinclude, odkazující stránka sdílí stejné kategorie jako cílová stránka.
- "Dvojité přesměrování" funguje, když jedno nebo obě jsou tímto typem pseudopřesměrování.
Funkce parseru
MediaWiki také podporuje funkce parseru, které fungují podobně jako šablony, ale mají mírně odlišnou syntaxi:
- Funkce analyzátoru používají ":" místo počáteční "|".
- Stránka úprav nezobrazuje funkce analyzátoru použité na této stránce.
- Pro funkce analyzátoru neexistuje žádná funkce "Co sem odkazuje" k identifikaci stránek, kde jsou použity.
- Šablony funkcí analyzátoru obecně nepřijímají pojmenované parametry, takže rovnítka obecně nemají žádný zvláštní význam. Například:
{{ #if: not blank | x=abc }}
givesx=abc
Související odkazy
Obecné použití šablony
- Manual:Expr parser function syntax
- Help:Substitution
- w:Help:Template
- Manual:Advanced templates – popisuje ještě pokročilejší techniky, jako jsou dynamická volání šablon a názvy proměnných parametrů
- Help:Multiple-instance templates - o použití více instancí stejné šablony na stránce.
- Manual:Newlines and spaces#Automatic newline
Speciální konstrukce používané v šablonách
- Nápověda:Kouzelná slova – fantastické věci, které najdete v některých šablonách
- Nápověda:Rozšíření:ParserFunctions – další ozdobné ovládací funkce, jako je #if a #switch
- Nápověda:Funkce analyzátoru v šablonách – návod k používání funkcí syntaktického analyzátoru v šablonách
- Nápověda:TemplateData
- Nápověda:Rozšíření:ParserFunctions
- Rozšíření:Scribunto
Další relevantní informace
- Nápověda:ExpandTemplates
- Nápověda:Externí vyhledávání – příklad zvláštního použití šablony
- Manual:Importing Wikipedia infoboxes tutorial
- Extension:PageTemplates
- Manual:Creating pages with preloaded text – použití šablon jako počátečního textu stránky
- Nápověda:Transkluze – vkládání stránek z jiných jmenných prostorů než
Template:
- Manual:Template limits
- Nápověda:Jaké zde najdete odkazy
- Special:Mostlinkedtemplates - zobrazuje šablony s největším počtem použití
- Special:Unusedtemplates - zobrazuje šablony bez použití (ačkoli mohou být nahrazeny)
- Příručka:$wgEnableScaryTranscluding - pomocí šablon z jiných wikin
- w:WP:Anatomy of a template
- w:Wikipedia:Transclusion costs and benefits
- Manual:Parser.php
- Nápověda:Rozšíření:TemplateSandbox - pro zobrazení náhledu změn šablony, jak se vykreslují jinde
Externí odkazy
- Úložiště šablon Miraheze - šablony MediaWiki určené ke všeobecnému použití.