Nápověda:Nahrazení
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. Některé starší revize k této stránce byly importovány pod licencí CC BY-SA. Pouze nové příspěvky jsou Publik Domain (PD) (veřejná doména). |
Nahrazení je automatická konverze wikitextu stránky při uložení stránky v případě, že wikitext odkazuje na jednu nebo více šablon, proměnné nebo funkce analyzátoru.
V případě náhrady šablony je volání šablony nahrazeno obsahem šablony s náhradou parametrů. Šablona je tedy použita jako makro a stránka je makro rozbalená, když je stránka uložena, nikoli, jak se obvykle stává, když je stránka zhlédnuto.
V případě substituce proměnné nebo funkce parseru je odkaz na ni nahrazen výslednou hodnotou.
Nahrazení se provádí vložením kouzelného slova subst:
nebo safesubst:
za dvojitou otevírací závorku bez mezer jako v příkladech: {{subst:FULLPAGENAME}}
a {{safesubst:FULLPAGENAME}}
.
Kód safesubst:
je užitečný při víceúrovňové substituci, viz níže.
Výsledek (ve formě rozdílu s uloženým wikitextem) lze před uložením (nebo bez něj) vidět stisknutím "Show changes" (zobrazit změny). Pokud však text pokrývá více než jeden odstavec, není tato rozdílová stránka příliš vhodná pro kopírování výsledku (např. pro postupné nahrazování bez uložení každého kroku), kvůli znaménkům plus na okraji.
Aplikace
Nahrazení šablony:
- Vytvořte poskytovanoustránku nezávislou na šabloně:
- Vykreslená stránka se při úpravě šablony nezmění.
- Stránku lze zkopírovat na jinou wiki MediaWiki bez kopírování šablony.
- Usnadněte vykreslování stránky, a tím i zrychlete pro server.
- Analyzujte a demonstrujte fungování šablon. V některých případech však substituce funguje jinak.
- Usnadněte pochopení korespondence mezi wikitextem a vykreslenou stránkou (může to platit, může to platit i naopak).
Nahrazení časově závislé proměnné:
- Vytvořte vykreslenou stránku nezávisle na čase.
Nahrazení proměnné závislé na stránce:
- Udělejte vykreslenou stránku nezávislou na přejmenování stránky a zkopírování wikitextu na jinou stránku (opak platí, pokud je proměnná PAGENAME použita v nezahrnované části stránky k zahrnutí samotné stránky).
Některá rozšíření MediaWiki mají omezení, že pokud jsou použita v šabloně s parametry, fungují pouze v případě, že je šablona nahrazena.
Přehled
Pro diskusi o náhradě je "běžná šablona" stránka, na kterou se odkazuje buď ve vzoru {{subst:pagename }} (pro stránky v šabloně jmenný prostor) nebo {{subst:fullpagename }} (pro stránky v jiných jmenných prostorech). "Předdefinovaná šablona" je proměnná nebo funkce analyzátoru, která je podobně nahrazena.
Substituce (nahrazení) je samostatný proces, který se provádí před rozšířením jakýchkoli nesubstituovaných šablon, proměnných, funkcí analyzátoru nebo parametrů.
Volání substituce může mít vložené další substituční volání. Podobně substituční šablona může obsahovat další substituční volání. Nejprve se provedou substituce ve výrazu pro název šablony nebo funkce analyzátoru, v definicích parametrů substituované šablony nebo funkce analyzátoru a v těle substituované šablony.
Vzhledem k tomu, že rozšíření je provedeno později, každý výraz použitý v substituci, který náhodou obsahuje dvojice dvojitých složených závorek, bude mít složené závorky jako prostý text.
Během substituce tedy může existovat název parametru se složenými závorkami ve volání substituce (např. {{subst:foo|a{{bc}}d=...}}
), který odpovídá parametru se stejným názvem v těle šablony (např. {{{a{{bc}}d}}}
).
Pokud se někdo pokusí použít substituci na neexistující šablonu atd., neexistuje žádná substituce, předpona "subst:" je ve wikitextu zachována.
Po procesu nahrazení, rozšíření šablon atd. a další zpracování výsledného wikitextu funguje jako obvykle. Protože substituce je u konce, nelze vrátit zpět nesoulad názvů parametrů, ke kterému došlo během substituce (viz také část "Částečná substituce" níže).
Náhrada je možná pouze tehdy, pokud bylo plně vyhodnoceno následující:
- název šablony, proměnné nebo funkce analyzátoru
- v případě šablony: názvy parametrů ve volání šablony a v šabloně samotné
- v případě #if, #ifexpr, #ifexist a #iferror parametr za dvojtečkou
- v případě #ifeq parametr za dvojtečkou a další
- v případě #switch parametr za dvojtečkou a výrazy nalevo od znamének rovná se
Protože, jak bylo řečeno, substituce se provádí před jinou expanzí, výše uvedené požadované vyhodnocení neproběhlo, pokud výrazy zahrnují nesubstituovanou expanzi.
Také v případě jiných funkcí analyzátoru, než je uvedeno, ne zcela vyhodnocený parametr za dvojtečkou způsobí, že funkce analyzátoru bude aplikována na wikitext se složenými závorkami a nikoli na rozšířený wikitext, což ovlivní výsledek.
Příklady:
- {{subst:Help:L{{tc}}k}} pomocí Template:tc, neprovádí substituci, protože Help:L{{tc}}k není existující stránka, ačkoli Help:L{{tc}}k je vykreslen jako Help:Link. Výsledný wikitext je tedy stejný jako původní wikitext a vykreslen jako {{subst:Help:Link}}.
- {{#if:{{void|abc}}|yes|no}} (pomocí Template:void) je vykreslen jako "no", takže {{subst:#if:{{subst:void|abc}}|yes|no}} podobně dává wikitextu "no". Na druhou stranu, {{subst:#if:{{void|abc}}|yes|no}} dává wikitextu "yes", protože Template:void je vyřešen až po nahrazení.
V zásadě je wikitext vyplývající z úplné substituce ihned poté vykreslen stejně jako wikitext s běžným zahrnutím.
Všimněte si však, že při nahrazení funkce analyzátoru není nedefinovaný parametr výchozí hodnotou použitý v hodnotě parametru nahrazen default (v anglické Wikipedii), a není například povoleno v číselném výrazu vyhodnoceném při nahrazení #expr:
- {{#expr:2*{{{p|3}}}}} dává 6, zatímco {{subst:#expr:2*{{{p|3}}}}} dává: Expression error: unrecognised punctuation character "{"
Při nahrazení šablony, která toto obsahuje, je {{{p|3}}} buď nahrazeno hodnotou {{{p}}} nebo 3, takže nedochází k žádné komplikaci.
{{ {{t6}} }} s použitím Template:t6 obsahující "t2demo|a<noinclude>[[Category:Demo templates]]</noinclude>
" se vykreslí jako {{ t2demo|a }}.
{{subst:{{subst:t6}} }} dává wikitextu {{subst:t2demo|a }} vykreslený stejně jako wikitext a při další úpravě/ukládání se změní na start-a -middle-{{{2}}}-end.
{{ {{subst:t6}} }} udává wikitext {{ t2demo|a }}, vykreslený jako start-a -middle-{{{2}}}-end.
Je tomu tak proto, že jak bez substituce, tak v případě úplné substituce, znaky svislé čáry ve volání šablon, s výjimkou těch, které jsou uvnitř volání vnitřní šablony, parametry šablony, odkazy a značky obrázků, určují oddělení definic parametrů od sebe navzájem a od název šablony.
Toto oddělení nezávisí na možných dalších svislých znacích v rozšířené podobě názvu šablony a definic parametrů.
Pokud je však po nahrazení vnitřní šablony znak svislítka ve volání vnější šablony, je stejný jako každý jiný a hraje svou roli při určování oddělení.
Jinými slovy, analýza se provede nejprve jednou pro substituci a poté jednou pro vykreslení, ale v obou případech mezi nimi není čas navíc.
V případě nahrazení pouze vnitřní šablony jsou účinné dvě následné analýzy.
Při nahrazení šablony obsahující {{{p|q}}} (značka parametru s výchozím nastavením) to má za následek hodnotu p, pokud je definována, a jinak q. Například pomocí {{timc|t pd}} (v anglické Wikipedii), {{subst:t pd}} dá wikitextu 2. Pokud se stránka nahradí sama (např. v nezahrnuté části stránky šablony), nahradí starou verzi.
Úvahy o použití
Jak již bylo zmíněno, změna běžné šablony po nahrazení neovlivní stránku, na které byla nahrazena, a nahrazená proměnná v závislosti na čase již nezávisí na čase atd. Avšak náhrada např. {{#expr:2*3}} neovlivňuje vykreslování vůbec.
Vztah mezi wikitextem stránky a jejím vykreslením může být po nahrazení snadněji pochopitelný, protože máme celý wikitext pohromadě a byly provedeniy náhrady parametrů.
Může být také složitější. Samostatné zaměření na pochopení volání šablony a pochopení obsahu šablony může být jednodušší. Wikitext po nahrazení je často složitější, než když by byl požadovaný wikitext napsán přímo.
Na rozdíl od volání šablony (pokud někdo ví o šablonách), wikitext po nahrazení neukazuje, jak lze dosáhnout podobného výsledku. Wikitext může být dlouhý a komplikovaný, a proto může být těžkopádné psát přímo, nebo může být jednoduchý, např. číslo vyplývající z výpočtu, ale je těžkopádné pátrat přímo. Při studiu wikitextu stránky si člověk může myslet, že tento wikitext je to, co se má napsat a přímo najít, aby získal výsledek, a to i v případech, kdy by to bylo velmi nepraktické.
V takových případech je užitečnou dokumentací volání šablony. Stejně jako v počítačovém programování měníme zdrojový kód a nebo data, abychom vytvořili nové výsledky, a neměníme přímo objektový soubor, zde by změnilo volání šablon a/nebo šablony namísto přímé změny wikitextu vyplývajícího ze záměny.
Obyčejné šablony
V případě nahrazení běžné šablony je značka šablony nahrazena wikitextem šablony, přičemž parametry jsou nahrazeny hodnotami parametrů.
- Příklad: m:Template:t2, obsahující
-
start-{{{1}}}-middle-{{{2}}}-end
- a voláno jako
{{subst:t2|[[a]]|{{tc}}}}
(viz {{Tc }}) dává wikitext:start-[[a]]-middle-{{tc}}-end
, vykreslení jako- start-a-middle-in-end.
Náhrada odstraní části noinclude a includeonly tagy.
Parametry
- Náhrada za p=r nahradí {{{p}}} a {{{p|q}}} za
r
. To zahrnuje případy, kdyr
je ve tvaru {{{s}}} nebo {{{s|t}}}. - Nahrazení nedefinovaným
p
zachová{{{p}}}
a nahradí {{{p|q}}} výchozíq
(v anglické Wikipedii).
S subst:
nahrazení značky šablony wikitextem nefunguje rekurzivně.
Pro úplnou rekurzivní náhradu použijte Special:ExpandTemplates.
Viz také substall a víceúrovňová náhrada níže.
Postupné nahrazování šablon včetně jiných šablon včetně více šablon atd. může být užitečné pro analýzu a dokumentaci chování složitých šablon, například viz $1.
Po nahrazení se však stránka může vykreslit jinak, např. pokud šablony vytvářejí složené závorky, svislé čáry a/nebo znaménka rovná se, které po nahrazení určují rozšíření jiných šablon, ale bez náhrady se považují za prostý text.
Při absenci parametrů lze náhradu šablony porovnat s kopírováním wikitextu nebo vykreslením náhledu nebo uloženého zahrnutí {{ msgnw:
pagename }}.
Nahrazení šablony však vylučuje části <noinclude>
, odstraňuje značky <includeonly>
a nahrazuje nedefinované parametry výchozími hodnotami těmito výchozími hodnotami.
Předdefinované šablony
V případě nahrazení předdefinované šablony, bez parametrů závislých na jiných šablonách, je tag nahrazen výsledkem.
subst:
musí být přidáno přímo před předdefinovaný název šablony bez mezer.Použití subst na proměnnou funguje jako její použití na šablonu. Např. časové razítko:
- {{subst:CURRENTYEAR}}-{{subst:CURRENTMONTH}}-{{subst:CURRENTDAY}} T {{subst:CURRENTTIME}} [[w:UTC|]]
může poskytnout wikitext
- 2010-04-10 T 06:30 [[w:UTC|UTC]]
vykreslen jako
- 2010-04-10 T 06:30 UTC
V případě nahrazení předdefinované šablony parametrem závislým na jiné šabloně, která musí být také nahrazena, samostatným modifikátorem subst:
, jinak je výsledek nedefinovaný.
{{subst:UC:{{subst:tc}}}}
- dává IN, stejný wikitext jako {{UC:{{tc}}}} je rozšířen na.UC:
se použije na výstup "in" Tc.{{subst:ns:{{subst:#expr:2*3}}}}
- dává soubor.{{ns:{{subst:#expr:2*3}}}}
- dává wikitext {{ns:6}} vykreslený jako File.{{subst:t1|{{subst:NAMESPACE}}}}
- dává wikitextu startHelpend (viz {{T1 }}){{subst:t1|{{subst:#expr:3*4}}}}
- dává wikitextu start12end{{subst:t1|{{subst:uc:AbCdEf}}}}
- dává wikitextu startABCDEFend{{subst:#expr:{{subst:3X|11*}}1}}
- dává wikitextu 1331{{subst:UC:{{subst:3X|abc}}}}
- dává wikitext ABCABCABC{{subst:LC:{{subst:#expr:1/100000}}}}
- dává wikitext 1e-05{{subst:#expr:2*{{subst:CURRENTDAY}}}}
- dává (v době psaní článku) wikitext 30{{subst:UC:{{subst:CURRENTDAYNAME}}}}
- dává (v době psaní článku) wikitext THURSDAY
Nicméně:
{{subst:UC:{{tc}}}}
- dává wikitext{{TC}}
vykreslený jako Template:TC.{{subst:ns:{{#expr:2*3}}}}
- zůstane {{subst:ns:{{#expr:2*3}}}}, vykreslený jako {{subst:ns:6}}.
Jak již bylo zmíněno, při substituci jsou všechna volání bez substituce šablon, proměnných a funkcí analyzátoru považována za prostý text.
Výsledkem je nahrazení vnějšího x:
ve vnořených
{{ x:...
{{ y:...
}} }} jsou často vhodné pouze tehdy, jsou-li nahrazeny všechny vnitřní y:
.
V případě náhrady předdefinované šablony, pokud výraz pro jeden z jejích parametrů obsahuje {{{p|3}}} s nedefinovanými p
, tento kód se zmenší na 3.
Na stránce samotné je však {{{p|3}}} považován za takový, nikoli jako 3.
Příklady:
{{#expr:2*{{{p}}}}}
→Expression error: Unrecognized punctuation character "{".
{{#expr:2*{{{p|3}}}}}
→6
{{subst:#expr:2*{{{p|3}}}}}
→ Expression error: Unrecognized punctuation character "{".- nahrazení šablony obsahující {{<includeonly>subst:</includeonly>#expr:2*{{{p|3}}}}} dává 6, pokud
p
není přiřazena hodnota, a dvojnásobek číslap
, pokud je přiřazena hodnota. - stejný výsledek lze získat ze šablony obsahující {{{{{subst}}}#expr:2*{{{p|3}}}}}, pokud má substituční volání parametr "
subst=subst:
".
Srovnat:
{{uc:2*{{{p}}}}}
→2*{{{P}}}
{{uc:2*{{{p|q}}}}}
→2*Q
{{subst:uc:2*{{{p|q}}}}}
→ dává wikitext 2*{{{P|Q}}} vykreslený jako 2*Q.
a také (shora):
{{subst:UC:{{subst:tc}}}}
- dává IN, stejně jako {{UC:{{tc}}}}; UC se použije na výstup "in" Tc.{{subst:UC:{{tc}}}}
- dává wikitext{{TC}}
vykreslený jako Template:TC.
Při substituci UC
se začleněný tag {{tc}} považuje za řetězec stejně jako {{{p|q}}}.
Částečná substituce
Uvnitř běžné šablony je možné použít substituci na běžné volání šablony obsahující parametr a nahradit jej přímým wikitextem obsahujícím parametr. Znamená to automatické sloučení dvou šablon (vytvoření "složené šablony" jako složená funkce). Znamená to automatické sloučení dvou šablon (vytvoření "složené šablony" jako složená funkce). (Nicméně ruční sloučení například volání #expr do jiného volání je užitečné pro zvýšení přesnosti výsledku tím, že se vyhnete zaokrouhlování na 12 číslic.)
Tímto způsobem se lze obejít bez volitelné techniky substituce popsané níže a použít substituci výsledné vnější šablony jednoduše pomocí subst:
(pokud není více úrovní vnoření).
Příklad:
{{subst:t}}
- poskytuje wikitextstart-{{{1|pqr}}}-end
, pouze text m:Template:t, bez noinclude částí a includeonly tagů{{subst:t|a{{{p|q}}}b}}
- dává wikitextstart-a{{{p|q}}}b-end
Příklady s dvojitou substitucí:
{{subst:3X|{{subst:t}}}}
- dává wikitextustart-{{{1|pqr}}}-endstart-{{{1|pqr}}}-endstart-{{{1|pqr}}}-endstart-{{{1|q}}}-end
{{subst:3X|{{subst:t|{{{1|q}}}}}}}
- dává wikitextustart-{{{1|q}}}-endstart-{{{1|q}}}-endstart-{{{1|q}}}-end
Víceúrovňová substituce
Při substituci šablony může být žádoucí provést substituci také uvnitř šablony.
To lze provést pomocí safesubst:
v šabloně.
Aby se zabránilo předčasnému nahrazení (tj. při uložení šablony), je tento kód poskytnut jako výchozí hodnota nepoužitého parametru.
Another solution is to use the default value of an unused parameter.
Often the empty string works, i.e. {{{|safesubst:}}}
, however it is sometimes used by modules that call templates or for inserting comments.
Rozdíl oproti subst:<noinclude />
je v tom, že safesubst:<noinclude />
, vyhodnocení na safesubst:
, pokud parametr s prázdným řetězcem jako název není definován, umožňuje nejen víceúrovňovou substituci, ale také víceúrovňovou transkluzi, protože při transkluzi je ignorován.
Aby byla šablona taková, aby umožňovala volbu mezi těmito dvěma možnostmi a také jednoúrovňovou substituci (a více možností, pokud je zahrnuto více šablon, proměnných a/nebo funkcí analyzátoru), je zapotřebí jeden nebo více parametrů, viz níže.
Víceúrovňová substituce s nezávislým řízením každé substituce zvlášť
Parametr subst (nebo více, každý s vlastním názvem) lze použít s safesubst:
" a prázdným řetězcem jako možnými hodnotami.
Můžeme tak například kontrolovat, zda je nahrazena i vnitřní šablona, když je nahrazena vnější šablona.
Obě možnosti lze nastavit jako výchozí.
Vnitřní šablony s parametry mohou stejným způsobem řídit další vnitřní substituce. Tyto parametry mohou záviset na substitučním parametru řídícím substituci vnitřní šablony, protože pokud není substituován, vnitřní substituce v této šabloně nejsou možné.
Podobně, pokud je ve vnitřní šabloně (šablonách) více šablon, proměnných a/nebo funkcí parseru, můžeme řídit nahrazení všech, buď nezávisle pomocí různých parametrů, nebo s některými nebo všemi pomocí stejného parametru.
Pokud například šablona T
používá parametr subst1
:
- s prázdným řetězcem jako výchozím,
T
volá vnitřní šablony a funkce parseru s předponou {{{subst1|}}}; pro voláníT
můžeme použít:- {{t|..}} - žádná náhrada
- {{subst:t|..}} - jednorázová náhrada
- {{subst:t|subst1=subst:|..}} - dvoustupňová substituce
- {{subst:t|subst1=safesubst:|..}} - totéž
- s výchozím "safesubst:" volá
T
vnitřní šablony a funkce analyzátoru s předponou {{{subst1|safesubst:}}}; pro voláníT
můžeme použít:- {{t|..}} - žádná náhrada
- {{subst:t|subst1=|..}} - jednorázová náhrada
- {{subst:t|..}} - dvoustupňová substituce
Chcete-li přenést volbu nahrazování nebo ne na šablony a funkce analyzátoru volané uvnitř vnitřních šablon T
, můžeme do volání těchto vnitřních šablon přidat něco ve tvaru subst2={{{subst1|}}} nebo subst2={{{subst1|safesubst:}}}, v daném pořadí (proměnné a { {ll|Help:parser function|funkce analyzátoru}} nezískají další parametr).
Částečná substituce
Použití šablony připravené pro volitelný subst=subst:
pouze s běžnou substitucí, bez zadání hodnot parametrů, umožňuje vložit její kód do jiné šablony, jako je kopírování a vkládání, ale všechny
<noinclude>
díly a <includeonly>
klíčová slova automaticky odstraněny.
Spuštění vloženého kódu místo jeho volání může být pro server efektivnější.
Typickým příkladem této techniky je rozšíření, v rámci jiné šablony, šablony používané jako testovací výraz v #switch: jako m:Template:len:
- Vývojový kód:
{{#switch: {{len|parameter tag}}|0=case 0 etc.}}
- Standartní řešení:
{{{{{subst|}}}#switch: {{{{{subst|}}}len|parameter tag|subst={{{subst|}}}}}|0=case 0 etc.}}
- Lepší řešení: Vytvořte kód šablony použitím substituce pomocí tohoto wikitextu:
{{{{{subst|}}}#switch: {{subst:len|parameter tag}}|0=case 0 etc.}}
m:Template:len je připraven pro volitelnou substituci, proto fungují obě řešení, ale druhé řešení nahrazující jeho kód je jednodušší a efektivnější.
Viz m:Template:csn a m:Template:lz12 pro případy, kdy byl Template:len
nahrazen tímto způsobem.
Pokud šablona používá parametr, jehož název je výraz obsahující šablonu nebo funkci analyzátoru, a šablona je volána s odpovídající definicí parametru (ve smyslu konečného názvu parametru), rozšíří se správně pouze v případě, že v době expanze šablona výraz pro název parametru je nebo byl vyhodnocen. Pokud je tedy šablona nahrazena bez nahrazení výrazu za název parametru, definice parametru se "ztratí", takže parametr se stane nedefinovaným. Proto v takovém případě žádná substituce nemůže poskytnout stejný výsledek jako úplná substituce, zatímco částečná substituce dává jiný výsledek. Viz např. m:Template:ts1.
Složené operace
Pomocí {{A|{{B|p}}}}
je volána šablona A
s parametrem volání šablony B
s parametrem p
.
Takové volání šablony bychom mohli integrovat do jediného volání {{C|p}}
"složené šablony" C
s parametrem p
.
- Wikitext pro šablonu
C
by byl{{A|{{B|{{{1}}}}}}}
nebo s volitelnou substitucí následující konstrukce : - {{ {{{subst
|
}}} A|{{ {{{subst|
}}} B|{{{1}}} |subst={{{subst|
}}} }} |subst={{{subst|
}}} }} subst={{{subst|}}}
je nezbytná pouze pro rekurzivní substituci, jak je vysvětleno výše.
Všimněte si, že není užitečné specifikovat {{subst|subst:}}
, protože ve fázi nahrazování se tento tag neredukuje na výchozí subst:
.
Pokud je předdefinováno A
a/nebo B
, konstrukce je podobná, ale bez subst={{{subst|}}}
pro danou šablonu.
includeonly
Alternativní metodou, jak zabránit předčasné substituci, známou jako "includeonly subst magic", je dvojice značek includeonly.
Nahrazení je zabráněno tím, že volání šablony je uvnitř těchto značek.
Nahrazení je také zabráněno tím, že jeden nebo oba tagy jsou kdekoli ve volání šablony kromě definice parametru.
Tag(y) tedy mohou být před, uvnitř nebo za safesubst:
nebo subst:
, nebo uvnitř nebo za názvem šablony.
Pozice těchto dvou značek ovlivňují pouze vykreslování samotné stránky šablony.
Formulář {{<includeonly>safesubst:</includeonly>něco}}
naznačuje, že nahrazení je zabráněno zahozením safesubst:
na samotné stránce, ale ve skutečnosti je nahrazení zabráněno, protože syntaxe safesubst je narušena značkami.
Nenahrazuje "something" v době vytvoření příslušné šablony, ale má požadovaný účinek při nahrazení šablony.
Příklady viz "preload" v Extension:InputBox a "substitution" v Help:Magic words .
Vytvoření stránky, která použije substituci při příštím uložení
Vynucená substituce
Některé šablony záměrně odmítají fungovat bez substituce, například viz w:Template:en. Tato technika je nezbytná pro šablony, jako je w:Template:en, které vytvářejí nějaké časové razítko, např. přidání stránek do kategorií s datem.
- Následující kód v jakékoli šabloně
T
zobrazí varování, pokud není účinná rekurzivní substituce zasubst=subst:
: {{{{{subst|}}}ifdef|{{{{{subst|subst:}}}ns:0}}|'''Warning'''}}
.- Výstup na
{{T}}
nebo{{subst:T}}
- Warning - Výstup na
{{T|subst=subst:}}
-Template:Ifdef
- Výstup na
{{subst:T|subst=subst:}}
- nic (žádný zbývající wikitext)
- Výstup na
- Toto je vzácný případ, kdy nahrazení
ifdef
za#if:
nefunguje přímo.
Náhrada části parametrů
Nechte šablonu Feelings
používat parametry 1 a 2.
Zvažte vytvoření šablony Emotions s jedním parametrem 1, který odpovídá Feelings
, s danou hodnotou love
parametru 2.
Porovnejte {{Feelings|2=love}}
a {{Feelings|1={{{1}}}|2=love}}
.
Na stránce šablony vypadají stejně, viz kupř. m:Template:t ps
, ale první nefunguje, protože {{{1}}}
je považováno za text, nikoli jako parametr.
Při substituci (pomocí subst:
nebo Special:Expandtemplates) je však výsledný wikitext stejný, bez rozdílu mezi textem {{{1}}} a parametrem, je to stejně parametr, takže 1={{{1}}}
není potřeba.
Pokud Feelings
obsahuje např. #expr
s výrazem obsahujícím oba parametry platí totéž, až na to, že můžeme dosadit pouze nejvyšší úroveň (Feelings
), nikoli funkci parser, takže nemůžeme použít Special:Expandtemplates
.
Obecně platí, že nahrazení parametru a použití šablony nebo funkce analyzátoru někdy dává stejný výsledek jako nahrazení šablony nebo funkce analyzátoru kódem parametru s trojitými závorkami a následné nahrazení parametru.
Bez výchozích hodnot (všechny jsou vykresleny stejně v jednom kroku substituce jako bez substituce):
Příklady s rovností:
- Šablona
Feelings
obsahujícíWith {{{1}}} one can {{{2}}}
- Nahrazeno
1=love
,2=help
dáváWith love one can help
. - Když je nahrazen
2=help
, dáváWith {{{1}}} one can help
. To samo o sobě, když je nahrazeno1=compassion
, dáváWith compassion one can help
.
- Nahrazeno
- Dvouúrovňová náhrada šablony obsahující
{{#if:{{{4}}}|{{{3}}}p}}
.- Nahrazeno
3=u
,4=v
dáváup
. - Když je nahrazen
4=v
, dává{{{3}}}p
. To samo o sobě, když je nahrazeno3=u
, dáváup
.
- Nahrazeno
Příklady bez rovnosti:
- Dvouúrovňová náhrada šablony obsahující
{{#if:{{{3}}}|{{{4}}}p}}
- Nahrazeno
3=
,4=v
dává prázdný řetězec. - Když je nahrazen
4=v
, dávávp
. To samo o sobě, když je nahrazeno3=u
, dávávp
.
- Nahrazeno
- Dvouúrovňová náhrada šablony obsahující
{{#if:{{{2}}}|{{{1}}}p}}
- Nahrazeno
1=u
,2=v
dáváup
. - Když je nahrazen
2=v
, dává{{{1}}}pp
(chyba). To samo o sobě, když je nahrazeno3=u
, dáváupp
.
- Nahrazeno
- Dvouúrovňová náhrada šablony obsahující
{{#expr:{{{1}}}*{{{2}}}}}
- Když je nahrazen
1=7
,2=8
, dává56
. - Když je nahrazen
2=8
, dává Expression error: Unrecognised punctuation character "{". To samo o sobě, když je nahrazeno1=7
, zůstává stejné.
- Když je nahrazen
Bez rovnosti tedy můžeme nebo nemusíme dostat chybovou zprávu.
Jeden příklad ukazuje, že nahrazení jednoho parametru může být ovlivněno výše zmíněnou chybou.
Můžeme však poté nahradit např. {{{1}}}
za {{{1{{{{{substvoid|}}}void}}}}}
a proveďte úplnou náhradu, kromě toho, že substvoid
není definováno, což zabraňuje chybě.
Výsledek funguje správně již s transkluzí.
Následně jej lze nahradit substvoid=subst:
, takže dostaneme prosté {{{1}}}
.
S výchozím nastavením:
Vykresleno stejně jako bez substituce:
- Dvouúrovňová záměna šablony obsahující
With {{{1|love}}} one can {{{2}}}
za2=help
dáváWith {{{1|love}}} one can help
. - Dvouúrovňová záměna šablony obsahující
{{#if:{{{4}}}|{{{3|d}}}p}}
za4=v
dávádp
.
Nevykresleno stejně jako bez substituce:
- Dvouúrovňová záměna šablony obsahující
{{#if:{{{3|}}}|{{{4}}}p}}
za4=v
dávávp
. - Dvouúrovňová záměna šablony obsahující
{{#if:{{{2}}}|{{{1|d}}}p}}
za2=v
dávádpp
(chyba). - Dvouúrovňová náhrada šablony obsahující
{{#expr:{{{1|6}}}*{{{2}}}}}
za2=8
poskytuje: Expression error: Unrecognised punctuation character "{"
Po nahrazení definicí parametru:
{{subst:#if:{{{3|}}}|vp}}
→vp
{{subst:#if:v|{{{1|d}}}p}}
→dpp
(chyba){{subst:#expr:{{{1|6}}}*8}}
→ Expression error: Unrecognised punctuation character "{"
Přepsáno:
{{subst:#if:{{subst:#ifeq:{{{3|+}}}|{{{3|-}}}|vp}}}}
→ prázdný řetězec{{subst:#if:v|{{subst:#ifeq:{{{1|+}}}|{{{1|-}}}|{{{1}}}|d}}p}}
→dp
{{subst:#expr:{{subst:#ifeq:{{{1|+}}}|{{{1|-}}}|{{{1}}}|6}}*8}}
→48
Omezení
Substituce není k dispozici ve značkách analyzátoru jako <ref>...</ref>
a <gallery>...</gallery>
.
Pokud napíšete {{subst:foo}}
, nebude nahrazeno ani transkludováno, ale zůstane tak, jak je.
Dokumentování substituce
Použití šablony přes subst:
se automaticky nezobrazí v historii stránek.
Proto je zvláště užitečné poskytnout řádek wikitextu obsahující "subst:" ve shrnutí úprav.
Stránky s nahrazenou šablonou se také nezobrazují v zpětných odkazech a šablona se neobjeví v seznamu přeložených šablon na stránce úprav. Šablona by mohla přidat stránky do kategorie pro sledování náhrad, ale uvedení této kategorie na stránku může zaplnit seznam kategorií podle obsahu, ve kterých se stránka nachází. Do wikitextu jsou také zahrnuty komentáře mimo tagy noinclude. Ke zmínce o šabloně lze tedy použít komentář. Může obsahovat i hodnoty parametrů, protože náhrada parametrů funguje i v komentářích.
Související odkazy
- Help:Substitution/tl;dr – tl;dr
- w:Help:Substitution#The safesubst: modifier
- w:Wikipedia:Template substitution – částečně technické, částečně pravidla
- Phabricator:T4003 – požadavek na funkci umožňující označení šablony jako nahrazené bez
subst:
- Šablony obsahující volání pro sebe s
subst:
a vytvářející podobné volání s aktualizovanými informacemi, které buď nahrazují nebo přidávají předchozí informace: - The pipe trick, which behaves similarly to template substitution