Nápověda:Šablony

This page is a translated version of the page Help:Templates and the translation is 100% complete.
PD 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. PD

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í


Podle pozice se zpracovávají pouze nepojmenované parametry. Pokud použijete při pojmenování číslo pozice (např. {{{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.
Pozor také na znak "rovnítka" =. 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


To se hodí, obzvláště pokud by mohl některý z parametrů obsahovat znak "=".
Příklad
{{Thankyou|1=přidání "="|2=Tonda}}

zobrazí se:


Díky… za přidání "=". zdraví Tonda

  Varování: Pokud ale použijete k identifikaci některého parametru číslo, tak byste měli uvést identifikátor i u těch ostatních.

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 . Výsledkem opětovného převedení šablony bez předání argumentu je následující:


Díky… za všechno. zdraví Já


Hodnotou parametru může být prázdný řetězec. Například v {{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.
Pokud potřebujete s prázdným řetězcem zacházet stejně jako s chybějícím parametrem, můžete použít podmíněný operátor prostřednictvím rozšíření jako ParserFunctions. Například {{#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}}} nebo q, 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&#61;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 &#123; pro {
    • Použijte <nowiki>}}</nowiki> nebo &#125; pro }.
  • Použijte &#91; pro [ a &#93; 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&#124;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í

Toto je pokročilé téma, které můžete přeskočit, pokud jej nepotřebujete.

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ů.

  1. Za prvé, pokud máte Template:Start obsahující {{mytemplate a Template: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.
  2. Odstranění mrtvého kódu: Pokud provedete volání šablony jako {{foo|{{DISPLAYTITLE:Bar}} }} a Template:Foo neobsahuje {{{1}}}, pak se DISPLAYTITLE 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 slovem int:, 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:

  1. Kliknutím na Speciální stránky > Všechny stránky
  2. V seznamu Jmenný prostor: zvolte Template a klikněte na Př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):

  1. 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".
  2. Na nové wiki přejděte na Special:Import a nahrajte soubor .xml.

Pokud nemáte nová importní práva na novou wiki:

  1. 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
  2. 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í.
  3. 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:".

  1. V textu šablony hledejte použití tříd CSS (text jako class="foobar"). Pokud se tyto třídy objevují v MediaWiki:Common.css nebo MediaWiki:Vector.css na původní wiki, zkopírujte tyto třídy do MediaWiki:Common.css na nové wiki a zkontrolujte, zda je šablona nyní v pořádku.
  2. 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 nebo MediaWiki:Vector.js. Pokud ano, můžete to zkusit zkopírovat do MediaWiki: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í.
Vkládání funguje na stránkách, které podporují přesměrování a nefunguje na stránkách bez něj.

Funkce parseru

Hlavní stránka: Help:Parser functions

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 }} gives x=abc

Související odkazy

Obecné použití šablony

Speciální konstrukce používané v šablonách

Další relevantní informace

Externí odkazy