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. Templates can be newly written or, to save duplicating work already done, exported from another wiki e.g. Wikipedia, and then imported into the target wiki.
Basic usage
Š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.
To transclude a template, you used double open & close curly brackets {{template name}}
.
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.
Ways to invoke a template
Š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ě". See Nápověda:Nahrazení for more information.{{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. For example,{{msgnw:Template:Thankyou}}
displays:
<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
Regardless of what syntax is used, the name of the template can be relative to the current page
For example, if {{/bar}}
is called on page foo, it will transclude the page foo/bar.
It can also be generated dynamically.
For example, {{ {{foo}} }}
calls Template:foo and interprets the result as the name of another template to call.
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 úkol 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ů.
Spaces and newlines are automatically stripped from the start and end of named parameter names and values, but are preserved in unnamed parameters.
Mixing named and unnamed parameters
If the template supports it, both kinds of parameters can be used in one call.
For example, {{Thankyou|supporting both parameter types|signature=Me}}
results in:
Díky…
za supporting both parameter types.
zdraví Me
Be careful when doing this, because it can result in conterintuitive results as unnamed parameter counts are based only on the unnamed parameters, not the named parameters. For example, {{Thankyou|Me|reason=supporting both parameter types}}
results in:
Díky…
za supporting both parameter types.
zdraví {{{2}}}
The template is coded to prefer the named parameter for the reason over the unnamed parameter, resulting in the "Me" being lost and no signature being given. This results in a default value of {{{2}}} being shown, as explained below.
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}}
returns undefined if the parameter is either undefined or empty, while {{{1|undefined}}}
does so only if the parameter is undefined.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.
Passing parameters to other templates
If raw parameter syntax is generated by the above template call, and then passed through to another template, it is not interpreted as a parameter. This means that {{Thankyou2 }}, which just calls {{Thankyou }} with no parameters, does not work: {{thankyou2|everything|me}} -> Díky… za {{{1}}}. zdraví {{{2}}} .
You instead need to explicitly pass the parameter to the other template, i.e if {{Thankyou3 }} contains
{{thankyou|{{{1}}}|{{{2}}}}}}
then {{thankyou3|everything|me}} -> Díky… za everything. zdraví me } works properly.
This example does not preserve emptiness vs. undefinedness in parameter values - you would need more complicated syntax if you wanted to do that.
Empty vs undefined parameters
The {{t2demo|| a }}
(refer to {{T2demo }} ), with a double pipe, sets the first parameter to an empty string instead of leaving it undefined.
It produces the output start--middle- a -end
, similar to how {{t2demo|1=|2= a }}
results in start--middle- a -end
.
On the other hand, explicitly setting the parameter "2" to "a," results in the first unnamed parameter being left undefined:
{{t2demo|2= a }} results in start-{{{1}}}-middle- a -end
If the second parameter should not be trimmed, it must be unnamed.
Therefore, you can assign an empty string to the first parameter, but you cannot leave it undefined.
Making emptiness and undefinedness equivalent
Good template coding practices result in passing an empty string to a parameter working the same as not assigning any value. This makes things easier and more consistent.
For example, using p=
can show that a template has a parameter "p" that doesn't have a value yet.
To make an empty string and an undefined value equivalent, use the following approaches:
- Use
{{{p|}}}
exclusively instead of{{{p}}}
orq
where "q" is a non-empty value. - Use conditional checks like
{{#if:{{{p|}}}|..{{{p}}}..|..}}
, to ensure{{{p}}}
is only used when it has a value.
If for some reason you want to treat undefined parameters differently from empty parameters or any other possible value you can compare the same parameter twice with different defaults, i.e {{#ifeq:{{{foo|bar}}}|{{{foo|baz}}}|parameter is defined|parameter is undefined}}
.
Using equals signs in unnamed parameters
Unnamed parameters can include equals signs, but this must be done indirectly. Here are some methods using template:T1demo:
- Default Value for Undefined Parameter
Assign a default value to an undefined parameter:
{{T1demo|{{{1| a=b }}}}}
This renders as: start a=b end
.
- Using the
{{=}}
parser function
Use a parser function that safely includes an equals sign:
{{T1demo| a{{=}}b }}
This renders as: start a=b end
.
- HTML Entities
Replace the equals sign with an HTML entity for display:
{{T1demo| a=b }}
This renders as: start a=b end
.
This renders correctly without affecting the other parameters.
Handling unmatched curly and square brackets
Unmatched curly brackets ({{
, }}
) or square brackets ([[
, ]]
) must be inside nowiki tags or use HTML entities:
- Rendering curly brackets have two options:
- Use
<nowiki>{{</nowiki>
or{
for{
- Use
<nowiki>}}</nowiki>
or}
for}
.
- Use
- Use
[
for[
and]
for]
.
Below are some examples:
- Unmatched curly brackets
{{T1demo| <nowiki>{{</nowiki>content<nowiki>}}</nowiki> }}
This correctly renders the braces without breaking the template.
- Unmatched square brackets
{{T1demo| text [link] more text }}
This correctly renders the braces without breaking the template.
This renders as:
start text [link] more text end
Unmatched pairs not placed in nowiki tags either prevent template expansion or are taken as closing braces for the template call.
Below are some examples:
{{T1demo|abc]]def[[ghi}}
This will not expand correctly because of unmatched brackets.
The correct use:
{{T1demo|abc<nowiki>]]</nowiki>def<nowiki>[[</nowiki>ghi}}
This renders as:
startabc]]def[[ghiend
Template-generated brackets
An alternate technique for passing arguments with unmatched brackets is to wrap them in another template. In that situation, (which exists with {{(( }} and {{)) }}) on this wiki), the unmatched brackets will be rendered literally, and not decoded as another template call. For example:
{{t1demo|{{((}}t1demo{{))}}}}
results in: start{{t1demo}}end
When substituting a template, template inclusions are parsed once when the subst happens (with the same caveats explained above) and then a second time when rendering the resulting wikitext. For example:
{{subst:((}}t1demo|foo}}
will expand on save to:
{{((}}t1demo|foo}}
which will then render as:
startfooend
If the wikitext generated via the first subst itself includes "subst:" syntax it will not be processed on the same save, but may be on the next save. This technique may be used to implement recursive substitutions that take multiple saves to evaluate.
Using pipes in parameter values
A parameter value cannot contain a pipe character (|), because it would be interpreted as the end of that parameter and the start of the next parameter.
This can be worked around by using the parser function {{!}}
, or the HTML entity &124;.
The two methods of doing this have slightly different behavior, which can be relevant in some corner cases like when a template is producing wikitable syntax.
Example:
{{T1demo|abc|def}}
produces:
startabcend
The "def" doesn't display because it is treated as part of another unnamed parameter, which the template does not use.
{{T1demo|abc{{!}}def}}
produces:
startabc|defend
The "def" displays properly.
{{T1demo|abc|def}}
produces:
startabc|defend
The "def" displays properly again.
Formatting template calls using extra parameters
Since templates ignore parameters they are passed but do not handle specifically, they can be used as a way of a adding extra whitespace or unused content to the template call.
For example:
{{template name|foo|bar|baz|mumble|quux}}
is equivalent to, assuming the template doesn't recognize SPACEN as a parameter name:
{{template name|SPACE1=
|foo|SPACE2=
|bar|SPACE3=Random stuff
|baz|SPACE4=
|mumble|SPACE5=
quux
}}
It is also possible to use the same name for each spacer (often the empty string), but this will populate Category:Pages using duplicate arguments in template calls, which many wikis prefer to keep empty to catch instances of user error.
This can be used to make the template render in a way similar to its output, like showing each row of w:Template:Chess position on its own like to make the wikitext also look like a chessboard.
Tracking parameter usage
It may be wise for a template to add a link or category to a page if a certain parameter or combination of parameters is used, to make if possible to easily determine what pages are using a given parameter, and thus what the impacts of changing that parameter in the template would be.
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. This isn't perfect, and in some cases even if the result of expanding a template is not used (because it is part of an if statement condition, for example), the process of evaluating it can still have side effects. For example, any links produced or other templates used will still be added to Special:WhatLinksHere even if they are not displayed.
Template parameters are pass by value, which means a template cannot modify its arguments. Parameters are treated as associative array, and parameter names are evaluated before parameter values. If the same parameter name is given more than once (either as named or unnamed), only the last instace is used, and the page is added to 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. The template's page when viewed directly appears exactly as the template would render without any parameters. If the template requires parameters to function properly, this will result in raw wikitext syntax or errors as a result of them being missing.
For example:
- If a parameter has no default value, it shows as the literal text {{{1}}}, indicating the template needs a parameter.
- If a parameter has an empty default value (it is written as {{{1|}}}), it displays nothing, which achieves the intended effect but lacks clarity for self-documentation. Using a non-empty default value like
{{{1|$1}}}
could clarify a parameter's role, especially for templates involving images. - If a parameter without a default is passed to the
#expr
parser function, it results in an error message: "Expression error: unrecognized punctuation character '{'." - If a template creates a table, it's helpful for the template page to show the table's structure rather than the wikitext used to make it.To do this, the table syntax isn't enclosed in tags, and each table element includes both
<noinclude>...</noinclude>
and<includeonly>...</includeonly>
parts where needed.
However, you can control which parts of a template will be seen and included by the use of the <noinclude>
, <includeonly>
and <onlyinclude>
tags.
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. It's a common pattern on some wikis to use a template like {{Documentation }} to transclude the documentation from a subpage of the template. For example, Template:Void is documented at 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.
For example, if a page like Help:Templates/onlyinclude demo has the wikitext:
abc<onlyinclude>def</onlyinclude>ghi<includeonly>jkl</includeonly>
The result of transcluding it is 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.
Inclusion tags are respected when using {{subst:templatename}}
, but they are not respected when using {{msgnw:templatename}}
as that displays the raw wikitext without any processing.
Section transclusion
To transclude different sections of a template on different pages, you can wrap the content in onlyinclude tags and use an if statement on parameters to select which section.
Consider "Template:Example" with this wikitext:
== Section 1 ==
{{#ifeq:{{{1|1}}}|1|
Content of section one.
}}
{{#ifeq:{{{1|2}}}|2|
== Section 2 ==
Content of section two.
}}
This will render both sections on the example page itself, and allow other pages to transclude the first section with {{example|1}}
and the second section with {{example|2}}
.
Another approach is to use literal parameter syntax instead:
{{{section1|
== Section 1 ==
Content of section one.
}}}
{{{section2|
== Section 2 ==
Content of section two.
}}}
Transclude the first section with {{example|section2=}}
and the second section with {{example|section1=}}
. If neither parameter is used, then both sections will display.
A third approach is to use 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 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.
Template naming
The name of a template is case-sensitive excluding the first character.
You make redirects for alternate capitalizations.
For example, if a template is named "AdminAbbr", you can create a redirect named "Adminabbr".
This way, the template can be called with either {{AdminAbbr}}
or {{adminabbr}}
.
If an editor prefers a mix of upper and lower case for clarity, they can use functions like lc or uc.
For instance, instead of {{CURRENTINTERNETTIME}}
, they could use {{ {{uc:CurrentInternetTime}} }}
Because template names are interpreted in the same way to the names of other pages, underscores are replaced with spaces, and any text after a number sign (what would be a anchor in a standard link) is ignored.
An underscore _
can be alternative to a blank space.
Possible uses of templates
Templates can be used for any situation in which one wants two or more pages to contain identical or similar content that is edited together rather than independently. They can be used to:
- Provide structured elements on many pages, like infoboxes, maintenance templates, navigational boxes, etc.
- Perform calculations used as a programming tool on various pages, like w:Template:Sum.
- Build composite pages that display the content of multiple existing pages together, like w:WP:Village pump (all) which includes content from each section of the village pump. The content of these pages can either be shown individually, or together, but the revision history, watchlist, etc. will only pick up changes to the transcluded pages and the raw wikitext of the composite page itself, not implicit changes to the composite page.
- Share some content between a few related pages. For example, the list at Help:Preferences#Beta features is duplicated at Beta Features#Current Beta Features. While on MediaWiki.org that is built using Extension:LabeledSectionTransclusion instead, it could have been done using a template.
- Store content referenced multiple times on the same page, so it only has to be written and calculated once. For example w:Template:Cite Monumentenregister/URL is called twice by w:Template:Cite Monumentenregister in two different places, and using another template means the URL pattern only has to be written once in the base template.
- Use templates as a programming element to generate a loop: if Template:A calls Template:B 10 times with different parameters, then that crudely simulates a for loop. If Template:B calls Template:C 10 times, then you have a nested loop of 100 calls of Template:C. But keep in mind that it is easy to run into the template limits when using templates as advanced programming constructs, and using Scribunto is generally clearer and easier to follow.
Kopírování z jedné wiki do druhé
It is possible, if allowed by the wiki configuration to transclude templates from other wikis. This configuration setting is disabled on Wikimedia wikis. Otherwise, you need to manually copy the template and its dependencies from the source wiki to the destination wiki to use it.
Š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ásledující 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:".
- Vyhledejte v textu šablony použití tříd CSS (text jako
class="foobar"
). Pokud se tyto třídy objeví v "MediaWiki:Common.css" nebo "MediaWiki:Monobook.css" na původní wiki, zkopírujte tyto třídy do "MediaWiki:Common.css" na nové wiki a zkontrolujte, zda je šablona v pořádku. - Jestliže zkopírovaná šablona stále nefunguje podle očekávání, zkontrolujte, zda se na původní wiki nachází kód "MediaWiki:Common.js" nebo "MediaWiki:Monobook.js". Pokud ano, můžete jej zkusit zkopírovat na "MediaWiki:Common.js" na nové wiki. Obvykle je vhodné kopírovat kód pouze z důvěryhodných zdrojů a nejprve procházet kód, identifikovat a vybrat části, které jsou relevantní. Můžete najít komentáře, které mohou sloužit jako vodítka pro identifikaci funkčnosti každé části.
Redirection
If a page uses a redirect as a template, the redirect is resolved before processing the template and the target is used instead. This won't work if the target doesn't exist (a broken redirect), or is itself a redirect (a double redirect).
A page that just includes another page as a template might look like a redirect, but there are several differences between them:
- The header of the result displays the title of the page it came from.
- No "Redirected from" message is shown.
- Buttons like edit, watch, talk, history, "what links here," and "last modified" point to the referring page. To access the target page, use a section edit link and navigate from there.
- Unless includeonly and/or noinclude tags are used, the referring page shares the same categories as the target page.
- "Double redirects" work when one or both are this type of pseudo-redirect.
Parser functions
MediaWiki also supports parser functions, which function similarly to templates but follow slightly different syntax:
- Parser functions utilize a ":" instead of the initial "|".
- An edit page does not display parser functions used on that page.
- There is no "What links here" feature for parser functions to identify the pages where they are utilized.
- Parser functions templates do not generally accept named parameters, so equal signs generally have no special significance. For example:
{{ #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 – * Příručka:Pokročilé šablony – popisuje ještě pokročilejší techniky, jako jsou dynamická volání šablon a názvy proměnných parametrů
- Help:Multiple-instance templates - on the use of multiple instances of the same template on a page.
- 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 - shows the templates with the most uses
- Special:Unusedtemplates - shows templates with no uses (although they may be substituted)
- Manual:$wgEnableScaryTranscluding (using templates from other wikis)
- w:WP:Anatomy of a template
- w:Wikipedia:Transclusion costs and benefits
- Manual:Parser.php
- Nápověda:Rozšíření:TemplateSandbox for previewing your changes to a template as it renders elsewhere
Externí odkazy
- Úložiště šablon Miraheze - šablony MediaWiki určené ke všeobecnému použití.