Extension:Page Forms/Page Forms and templates
Page Forms , je ve své podstatě systém pro editaci parametrů šablon, prostřednictvím wiki stránek. (Lze ale také jeho prostřednictvím upravovat sekce stránky.) Více se o roli šablon v MediaWiki dozvíte na stránce Šablony .
Zajímá vás, proč lze pomocí Page Forms upravit hodnoty parametrů použité šablony nebo vybranou sekci stránky, ale ne její kategorizaci? Je to proto, že Page Forms vychází z toho, že by veškerá data MediaWiki - včetně obsahu, informací o kategoriích, atp. - měly být na stránce uloženy jako hodnoty parametrů v šabloně. A to z několika důvodů:
- U šablony je dané, kam co patří, což zabraňuje tomu, aby došlo k vytvoření nejednoznačné datové struktury
- Šablona při zobrazení skryje složitou syntaxi, což usnadňuje práci s obsahem, neboť se můžete soustředit pouze na editaci dat
- Šablony umožňují snazší realizaci změn, protože je lze dělat pro všechny stránky na jednom místě, aniž by bylo nutné upravovat jednu stránku po druhé.
Page Forms poskytuje řadu funkcí, které pomáhají právě při vytváření a zobrazování šablon a nijak nesouvisí s editací formuláře.
A ty jsou popsány na této stránce.
Neexistuje žádný technický důvod, proč jsou všechny tyto funkce definovány v Page Forms . Teoreticky by #arraymap
a #arraymaptemplate
mohly být přidány k rozšíření ParserFunctions a ve skutečnosti jsou podobné funkce součástí rozšíření ArrayFunctions .
Existuje jistě argument z hlediska pohodlí, proč je držet v Page Forms .
V každém případě neexistují žádné plány na jejich přesun.
Zjednodušení zobrazení šablony
Page Forms definuje dvě parserové funkce, #template_params
a #template_display
, které dohromady mohou značně zjednodušit kód potřebný k zobrazení volání šablony – a také mohou zjednodušit definici jakýchkoli formulářů, které takovou šablonu používají.
#template_params
Funkce #template_params
by měla být v rámci šablony uzavřena v elementu <noinclude>
.
Obsahuje totiž očekávané parametry této šablony, spolu s dalšími podrobnostmi o každém z nich.
Toto je ukázkový příklad volání této funkce u šablony nazvané "Recipe":
{{#template_params:
Cuisine
|Cooking time (label=Čas na přípravu (v minutách);display=nonempty)
|Ingredients (holds template=Recipe ingredient)
|Instructions (display=nonempty)
}}
Povolené údaje (které můžeme označit jako "parametry parametrů") jsou:
label
- text, který se použije k popisu formulářového pole pro tento parametr na stránkách a ve formulářích. Pokud není nastaven žádný popisek, použije se místo něj název parametru.display
- je-li hodnota nastavena nanonempty
, zobrazí se jen pokud bude obsahovat nějakou hodnotu.holds template
- určuje, že v rámci tohoto parametru může být celá série volání jedné a téže šablony.cargo field
- pokud je nainstalováno rozšíření Cargo , určuje tohle pole v tabulce šablony Cargo , kterému z nich bude tento parametr odpovídat. Pokud tento parametr nebude nastaven, vyhledá se pole které svým názvem odpovídá tomuto parametru.
Přidání funkce #template_params
do šablony pomáhá následujícími způsoby:
- Funkce zajistí, přehledné umístění parametrů na stránce šablony.
- Její atributy usnadní zobrazování šablony (viz následující část).
- A některé z nich se rovnou použijí ve formulářích, což umožní zjednodušení definice formulářového pole.
#template_display
Funkce #template_display
by měla být umístěna v rámci tagu <includeonly>
šablony.
Zpracovává zobrazení pro volání šablony.
V mnoha případech, za předpokladu, že byla dorovnána sázka #template_params
, může být sázka #template_display
docela jednoduchá.
Například pro šablonu s výše uvedeným voláním #template_params
by volání #template_display
mohlo jednoduše vypadat takto:
{{#template_display:}}
Pokud na druhou stranu neexistuje žádné volání #template_params
, pak by volání #template_display
muselo vypadat takto:
{{#template_display:
Cuisine={{{Cuisine|}}}
|Cooking time={{{Cooking time|}}}
|Ingredients={{{Ingredients|}}}
|Instructions={{{Instructions|}}}
}}
To se ale nedoporučuje.
Existují dva předdefinované parametry, které může #template_display
nabývat:
_format
- určuje, v jakém formátu by se mělo zobrazení zobrazit. Možnosti jsouinfobox
(výchozí),table
,sections
atext
.infobox
zobrazí informační okno na pravé straně stránky, podobně jako Wikipedie.table
zobrazí tabulku, která pokrývá celou stránku.sections
vytvoří z každého názvu parametru záhlaví sekce s hodnotou pod ním. Atext
zobrazí všechna data šablony jako text s tučně zvýrazněnými názvy parametrů._title
- určuje název, který by se měl zobrazit v horní části pole, pokud je použit výchozí formát infoboxu. Pokud je nastaveno na prázdné, nezobrazí se žádný řádek s názvem. (Ve výchozím nastavení je název stránky nebo zobrazovaný název stránky, pokud je zadán.)
Chcete-li zobrazit všechna data jako celostránkovou tabulku, stačí zavolat:
{{#template_display:_format=table}}
Více hodnot pro stejné pole
Page Forms také definuje funkce parseru #arraymap
a #arraymaptemplate
, které poskytují podporu pro více hodnot pro jedno pole, oddělených čárkou nebo jiným znakem.
Tyto funkce parseru „mapují“ na každou hodnotu část textového zpracování.
Může to být tak jednoduché, jako převést každou hodnotu na odkaz, i když může existovat složitější zpracování, jako je převedení každé hodnoty na tag kategorie, tag obrázku, tag vlastnosti Semantic MediaWiki a tak dále.
#arraymap
a #arraymaptemplate
lze také použít mimo kontext šablony, ačkoli tato stránka se s tímto využitím ve skutečnosti nezabývá.
#arraymap
Obecné volání této funkce je:
{{#arraymap:hodnota | oddělovač | proměnná | vzorec | nový_oddělovač | spojení}}
Funkce rozdělí 'hodnotu' pomocí 'oddělovače' a poté pro každou z nich použije stejné mapování jako 'vzorec' na 'proměnnou' a poté všechny hodnoty znovu spojí pomocí 'nového_oddělovače' – s výjimkou konečné hodnoty, která je spojena pomocí 'spojení', pokud je nastavena.
Například: Pokud máte formulář, který vyplňuje pole 'Authors'
, a chcete, aby hodnoty pro toto pole byly odděleny čárkami a každá z nich byla odkazem, můžete do šablony vložit následující:
{{#arraymap:{{{Authors|}}}|,|x|[[x]]}}
Tato funkce v podstatě 'mapuje' syntaxi odkazu na každou hodnotu v poli oddělenou čárkami.
(Parametr 'oddělovač' má výchozí hodnotu ,
a 'nový oddělovač' má výchozí hodnotu ,
(všimněte si mezery navíc), pokud nejsou nastaveny.)
Uživatel tak může zadat všechny hodnoty na stejný řádek, s mezerami nebo bez nich.
(Mimochodem, všimněte si, že proměnná x
se zde používá jako interní proměnná. Lze použít i jakýkoli jiný řetězec, například @@@@
.)
Parametr 'nový_oddělovač' je obzvláště užitečný, pokud se žádná z výsledných hodnot ve skutečnosti nezobrazí, protože ve výchozím nastavení by se taková věc zobrazila jako řetězec čárek. Běžným příkladem je situace, kdy původní hodnota obsahuje seznam názvů kategorií a každý název se přemění na tag kategorie, ale ve skutečnosti se nezobrazí.
Abyste se v takovém případě vyhnuli zobrazení čárek, měli byste nastavit hodnotu 'nový_oddělovač' na mezeru.
Použití pouze |
na konci nebude fungovat, protože analyzátor MediaWiki jej bude ignorovat – místo toho je nejjednodušší použít \s
, které se přeloží na mezeru.
Takhle by se dala taková věc nazvat:
{{#arraymap:{{{Categories|}}}|,|x|[[Category:x]]|\s}}
Výstup můžete vylepšit tak, aby vypadal přirozenějším jazykem, a to přidáním hodnoty 'spojení' jako posledního oddělovače, takže výstup bude vypadat například jako A, B and C
místo jen A, B, C
.
Zde je příklad, jak to udělat:
{{#arraymap:{{{Authors|}}}|,|x|[[x]]|, <nowiki />|and}}
Pokud k vytvoření šablony použijete stránky 'CreateTemplate' nebo 'CreateClass' a určíte pole, které může nabývat více než jedné hodnoty, bude do vygenerované šablony automaticky přidáno volání #arraymap
.
#arraymaptemplate
Existují některé druhy mapování, které jsou natolik složité, že je nelze umístit do funkce #arraymap
.
Pro tento účel můžete místo toho použít podobnou funkci #arraymaptemplate
.
Chcete-li tuto funkci použít, nejprve vytvořte šablonu, která bere jedno pole (v šabloně by mělo být označeno jako {{{1}}}
) a aplikuje na toto pole požadované mapování.
Pak aplikujte hodnotu #arraymaptemplate
na hlavní pole šablony stejně jako u hodnoty #arraymap
, s použitím následujícího formátu:
{{#arraymaptemplate:hodnota | šablona | oddělovač | nový_oddělovač}}
...kde 'šablona' je název dané šablony mapování.
Například: Chcete-li zobrazit (čárkou oddělený) seznam autorů jako číslovaný seznam, můžete nejprve vytvořit šablonu s názvem "Numbered author" s následujícím obsahem:
# [[Má autora::{{{1}}}]]
...pak zavolejte následující:
{{#arraymaptemplate:{{{authors|}}}|Numbered author|,|\n}}
<span id="Using_\s
_and_\n
_in_the_delimiter">
Použití \s
a \n
v oddělovači
Pro oba parametry, #arraymap
i #arraymaptemplate
, bude řetězec \s
v hodnotě 'delimiter' nebo 'nový_oddělovaČ' převeden na mezeru, zatímco řetězec \n
v obou parametrech bude převeden na nový řádek.
Je třeba poznamenat, že pokud chcete, aby se mezi hodnotami zobrazoval skutečný zalomený řádek, měli byste jako oddělovač použít dva nové řádky (např. \n\n
), protože MediaWiki vyžaduje dva nové řádky k zobrazení zalomeného řádku.
Speciální stránky založené na šablonách
Page Forms definuje tři speciální stránky, které se vztahují k šablonám:
Special:Templates
- který obsahuje seznam všech šablon na wiki,Special:CreateTemplate
Special:CreateClass
Obě poslední dvě stránky (tj. Special:CreateTemplate a Special:CreateClass) lze použít k automatickému generování šablon.