Help:Sjablonen

This page is a translated version of the page Help:Templates and the translation is 100% complete.
PD Let op: Als u deze pagina bewerkt, gaat u akkoord met het vrijgeven van uw bijdragen onder de CC0. Zie Helppagina’s Publiek Domein voor meer informatie.
PD

Als u standaardtekst hebt die u in verschillende pagina's wilt opnemen, kunt u daarvoor sjablonen gebruiken. Anders dan bij extensies en mediabestanden is er voor sjablonen geen centrale bewaarplaats. Sjablonen kunnen nieuw worden geschreven of, om dubbel werk te voorkomen, worden geëxporteerd uit een andere wiki, bijvoorbeeld Wikipedia, en dan in de bestemde wiki worden geïmporteerd.

Aanmaken

Sjablonen zijn standaard wiki pagina's waarvan de inhoud ontworpen is om te worden transcluded (ingebed) in andere pagina's. Sjablonen volgen de conventie dat de naam word voorafgegaan door "Template:", wat het aan die namespace toewijst. Daarnaast kun je ze als iedere andere wiki pagina aanmaken.

Het meest eenvoudige gebruik van sjablonen gaat als volgt. Maak een pagina aan met de naam "Template:Welkom" met de volgende inhoud:

Hallo! Welkom bij de wiki.

U heeft uw eerste sjabloon gemaakt! Als u dan de volgende code gebruikt:

{{Welkom}}

in een andere pagina, dan wordt "Hallo! Welkom bij de wiki." getoond in plaats van {{Welkom}}. De inhoud van het sjabloon in "ingebed" in de getoonde pagina.

U kunt {{Welkom}} op elk punt op elke pagina plaatsen waar u iemand wilt verwelkomen. Stel dat dat op 100 pagina's wordt gedaan. Als u dan de inhoud van het sjabloon wijzigt naar:

Hallo allemaal! Welkom op onze mooie wiki.

en dan al die 100 pagina's opnieuw bezoekt waar het sjabloon gebruikt wordt, dan ziet u nu de nieuwe begroeting in plaats van de vorige. U past dus de inhoud van mogelijk heel veel pagina's aan zonder ze zelf per stuk te wijzigen, dit omdat de tekst van het sjabloon wordt overgenomen (transcluded) in deze pagina's.

Dit is de basis van het werken met sjablonen. Maar er zijn natuurlijk enkele aanvullende functies beschikbaar om het nog krachtiger te maken. Meestal zal het sjabloon een Engelse naam hebben, dus bijvoorbeeld Welcome, de Nederlandse naam wordt dan Welcome/nl. De tekst is dan een vertaling van de Engelse tekst.

Gebruik

Sjablonen kunnen op andere pagina's op de volgende manieren gebruikt worden:

  • {{Name}} : als boven beschreven, deze link wordt automatisch vervangen door de huidige inhoud van het sjabloon [[Template:Name]] op het moment dat de betreffende pagina wordt geladen. De link blijft staan in de broncode van de pagina.
  • {{subst:Name}} : als dit wordt gebruikt dan wordt het sjabloon eenmalig en blijvend vervangen in de broncode van de pagina die het sjabloon [[Template:Name]] gebruikt op het moment dat de pagina met de link wordt opgeslagen. Er is dan dus geen sprake meer van dat sjabloon op die pagina, die pagina en het deel wat er door het sjabloon is in geplaatst kan worden gewijzigd, maar dat is dus alleen een wijziging in die pagina.
  • {{safesubst:Name}} : dit is toegevoegd om het mogelijk te maken dat er een vervanging wordt gedaan die later toch weer als sjabloon gebruikt kan worden, lees w:Help:Substitution#The safesubst: modifier.
  • {{msgnw:Name}} : voegt het sjabloon toe in een vorm die de ruwe wiki syntaxis toont (zoals ‎<nowiki> dat doet) bij het ophalen van de pagina die dit sjabloon bevat.

Een gewone wiki-pagina kan ook als sjabloon gebruikt worden, eenvoudig door de betreffende namespace aan te geven:

  • {{Template:Pagename}} bevat [[Template:Pagename]]
  • {{Talk:Pagename}} bevat [[Talk:Pagename]]
  • {{:Pagename}} bevat [[Pagename]]
    • {{subst::Pagename}} vervangt zichzelf met de inhoud van [[Pagename]]

Als er geen dergelijke namespace bestaat, dan wordt aangenomen dat de hele titel een sjabloon is:

  • {{Foo:Bar}} bevat [[Template:Foo:Bar]]

Parameters

Om het mechanisme van transclusion nog meer te versterken, MediaWiki staat parameters toe bij de aanroep van een sjabloon. Hiermee kan het sjabloon door de schrijver van het artikel worden aangestuurd afhankelijk van de context.

Neem aan dat u een klein bedankje wilt plaatsen in de overlegpagina van andere gebruikers, zoals:


Een klein bedankje... voor al uw inzet. knuffel van Frank Alberts


Het bedankje heeft dan een reden (voor al uw inzet) en een afzender (Frank Alberts). Het doel is dat iedereen, iedereen om een reden moet kunnen bedanken.

Een voordeel is dat een bedankje er overal (waar dan dit sjabloon wordt gebruikt) hetzelfde uitziet. U kunt bijvoorbeeld een sjabloon Sjabloon:Bedankt aanmaken. Het bedankje ziet er hetzelfde uit, maar de reden en degene die bedankt verschillen omdat het parameters zijn. Geef ze dan ook door als parameters. Als we de overige elementen even overslaan en het veld formatteren en de afbeelding plaatsen, dan is de inhoud van het (vertaalde) sjabloon ongeveer zo:

'''Een klein bedankje...'''
voor {{{1}}}.
knuffel van {{{2}}}

Let op het gebruik van {{{1}}} en {{{2}}}. Dat is hoe de parameters in het sjabloon bekend zijn. Opvallend is dat elke parameter tussen drie accolades {{{ }}} staat. Dit is anders dan het normale gebruik van de sjabloonnaam.

Als het sjabloon op een pagina wordt gebruikt, dan vult u de waarden van de parameters in, gescheiden door een verticale streep (|). In de MediaWiki kunt u parameters op drie manieren doorgeven: Anoniem, Nummer en Naam.

Anonieme parameters

Om de parameters anoniem door te geven vult u ze in volgorde in:

{{Thankyou/nl|al uw inspanningen|Frank Alberts}}

In dit geval ontvangt het {{Thankyou/nl}} sjabloon parameters {{{1}}}=al uw inspanningen en {{{2}}}=Frank Alberts, resultaat:


Een klein bedankje... voor al uw inspanningen. knuffel van Frank Alberts


De volgorde is zeer belangrijk voor de werking van het sjabloon. Als u ze in deze volgorde doorgeeft:

{{Thankyou/nl|Frank Alberts|al uw inspanningen}}

dan is het resultaat:


Een klein bedankje... voor Frank Alberts. knuffel van al uw inspanningen


Het identificeren van parameters op volgorde (met {{{1}}}, enz.) werkt alleen voor anonieme parameters. Parameters die met een naam worden doorgegeven, zoals hieronder, zijn in het sjabloon niet benaderbaar met een nummer.
Met een gelijk-teken in het argument van een anonieme parameter kan het worden aangezien als een parameter op naam (zie hieronder) de tekst ervoor is dan de parameter en de tekst erna de waarde. Dit kan voorkomen als u een externe link toevoegt of een HTML-element met attributen (zie taak T16235). De oplossing is dan om parameters op naam te gebruiken of genummerde parameters, zoals in de volgende sectie wordt uitgelegd.

Genummerde parameters

Om de parameter op nummer door te geven, identificeer elke parameter bij het doorgeven:

{{Thankyou/nl|2=Frans Alberts|1=uw vriendschap}}

Het sjabloon {{Thankyou/nl}} krijgt nu de parameters {{{1}}}=uw vriendschap en {{{2}}}=Frank Alberts, ze staan in de verkeerde volgorde maar worden op nummer doorgegeven, dus het resultaat is:


Een klein bedankje... voor uw vriendschap. knuffel van Frank Alberts


Dit kan ook nuttig zijn als een genummerde parameter een "=" teken bevat.
Voorbeelden
{{Thankyou/nl|1=adding “=”|2=Frank Alberts}}

Resultaat:


Een klein bedankje... voor adding “=”. knuffel van Frank Alberts

  Waarschuwing: Hierdoor moet elke parameter genummerd worden doorgegeven.

Parameters met een naam

de derde manier om parameter door te geven is doorgeven op naam. De inhoud van het sjabloon wordt dan:

'''Een klein bedankje...'''
voor {{{reason}}}.
knuffel van {{{signature}}}

In het sjabloon gebruiken we {{{reason}}} en {{{signature}}} om de paramter te identificeren, in plaats van een nummer. Om deze parameters door te geven op naam, wordt het:

{{Thankyou/nl|signature=Frank Alberts|reason=zijn wie je bent}}

In dit geval krijgt het sjabloon {{Thankyou/nl}} de parameters {{{reason}}}=zijn wie je bent en {{{signature}}}=Frank Alberts, het resultaat:


Een klein bedankje... voor zijn wie je bent. knuffel van Frank Alberts


Parameters op naam zijn hoofdlettergevoelig, dus:

{{Thankyou/nl|signature=Frank Alberts|Reason=zijn wie je bent|reason=zijn case-sensitive}}

Resultaat:


Een klein bedankje... voor zijn case-sensitive. knuffel van Frank Alberts


Het voordeel van het gebruik van een naam in uw sjabloon, naast dat het flexibel is bij de volgorde van doorgeven, is dat het uw sjabloon beter leesbaar maakt als er veel parameters zijn.

Standaardwaarden

Als u een sjabloon gebruikt maar u geeft niet de benodigde parameters mee, zoals hier:

{{Thankyou/nl}}

in het voorbeeld met genummerde parameters krijgt u het volgende:


Een klein bedankje... voor {{{1}}}. knuffel van {{{2}}}


Omdat er geen argumenten zijn meegegeven, gebruikt het sjabloon de parameters zelf, in plaats van de waarde. U kunt ook standaardwaarden voor een parameter aangeven, die worden dan gebruikt als de parameter niet wordt meegegeven.Voorbeeld met als inhoud van het sjabloon:

'''Een klein bedankje...'''
voor {{{reason|alles}}}.
knuffel van, {{{signature|Frank Alberts}}}

dan geeft de {{{reason|alles}}} aan dat als de parameter {{{reason}}} niet wordt meegegeven, dat dan de waarde alles wordt gebruikt. Bij de andere parameter gaat het op dezelfde manier. Met dit sjabloon krijgen we bij een aanroep van het sjabloon zonder meegegeven parameters:


Een klein bedankje... voor alles. knuffel van Frank Alberts


The value of a parameter can be an empty string. For example, in {{foo|bar=}} or {{foo|bar=|baz=qux}}, the foo template considers the bar parameter to be "". This is different from omitting the parameter altogether, which leaves it undefined and triggers the default value mechanism described above.

Vaak wordt een standaardwaarde gebruikt om een alternatieve naam van de parameter te noemen. Voorbeeld, bij {{{a|{{{b|}}} }}}, het sjabloon zoekt eerst naar een parameter met de naam "a". Als die ontbreekt dan wordt de parameter met de naam "b" gebruikt. Als zowel "a" als "b" ontbreken, dan is er geen uitvoer.


Evaluatie

Dit wordt een wat geavanceerd gedeelte dat u kunt overslaan als u het niet echt nodig heeft.

In het algemeen worden de parameters van een sjabloon vervangen in sjabloon als de tokens worden uitgewerkt. Ze worden pas geëvalueerd bij het gebruik.

Dit heeft gevolgen. First of all, if you have a Template:Start containing {{mytemplate, and a Template:End containing |foo=bar}}, and put {{start}}{{end}} on a page, mytemplate isn't transcluded, because tokens like "|" cannot be added by a template and keep their special meaning in templates. U kunt sjablonen gebruiken om de naam van de parameter of sjabloon te sturen, maar u kunt geen aanroep van een sjabloon splitsen tussen verschillende sjablonen.

Het tweede gevolg is de eliminatie van dode code. (Code die nooit wordt uitgevoerd.) If you make a template call like {{foo|{{DISPLAYTITLE:Bar}} }}, and Template:Foo does not contain {{{1}}}, then the displaytitle is not used, since it is only evaluated when needed, and it there is no parameter to substitute it into, so it is never evaluated. This usually comes into play when using Extension:ParserFunctions, and can be especially noticed when used in combination with the int: magic word that varies by user language.

Template calls starting with the magic word subst: or safesubst: are evaluated in a separate first pass that only happens at save time, along with ~~~~ and links using the pipe trick. If they cannot be evaluated during the first pass, subst: calls are ignored, and safesubst: are treated as if a normal template.

Veel parser-functies, tags en trancluded speciale pagina's worden niet direct ingevoegd zoals sjablonen maar worden vervangen door een "strip marker". Dit betekent dat u de resultaten niet kunt manipuleren met parser-functies als padleft: en vergelijkbare functies in extensies, die zien de 'strip marker' in plaats van het resultaat van de parser-functie.


Recursie in sjablonen

Het gebruiken van een sjabloon in het sjabloon zelf zorgt er niet voor dat de MediaWiki in een oneindige lus terecht komt. MediaWiki stopt met een recursie als de naam van het sjabloon vet is. Voorbeeld, als de inhoud van Template:Aaaa is a {{Aaaa}} z, dan toont het "a a Template loop detected: Template:Aaaa z z".

Forbidden idiom

This safeguard precludes a potentially useful template idiom where a template self-normalizes its own calling arguments. In this forbidden example template:d can either be called {{d|20200311}} or {{d|y=2020|m=3|d=11}}. If called in the first manner, it recurses into itself with the second argument structure (obtained using string parser functions), which then follows a unified processing path.

{{#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 -->}}

If template:d is modified to recurse into template:d/2 and template:d/2 is an identical manual copy of template:d this idiom works fine as the self-recursion safeguard operates dynamically and not statically.

A feasible way for the MediaWiki software to loosen the self-recursion rule would be to require that each recursive call have a distinct argument count from all previous active calls, at most once recursing with the argument count non-decreasing. That would provide a strong guarantee against infinite self-recursion while enabling useful idioms such as the one described here in a flexible manner.

If the processing path is of low complexity, a simple solution using only one template is to handle each calling convention on a separate if/else branch, duplicating the logic of the processing path within each case. If the processing path is more complex, each call-structure case can delegate to an implementation template with a unified call structure which provides the final template behaviour.

Tables in parameters

Since the syntax for wikitables involves pipes in single braces ({ }) and using the pipe trick will not work in transclusion parameters, one will have to create a table as a separate page and transclude it from there.[1]

Controle sjabloon inclusie

Standaard wordt de gehele inhoud van het sjabloon getoond, zowel als het sjabloon wordt getoond als wanneer het via een pagina waarin dat sjabloon wordt gebruikt, gaat. U kunt wel bepalen welke delen van een sjabloon worden getoond en toegevoegd met gebruik van de tags ‎<noinclude>, ‎<includeonly> en ‎<onlyinclude>.

Alles tussen ‎<noinclude> en ‎</noinclude> wordt alleen getoond als de pagina van het sjabloon wordt getoond, dus niet als het sjabloon in een pagina is gebruikt. Dit is handig als u tekst of code wilt toevoegen in een sjabloon die u alleen in de sjabloon pagina wilt tonen, zoals:

  • Categorieën links bij het categoriseren van het sjabloon zelf
  • interlanguage links naar vergelijkbare sjablonen in een andere taal
  • Uitleg over hoe een sjabloon te gebruiken

Op een vergelijkbare manier wordt alles tussen ‎<includeonly> en ‎</includeonly> verwerkt en getoond alleen als het sjabloon op een pagina wordt gebruikt en niet op de sjabloon-pagina zelf, dat kan nuttig zijn als:

  • Categoriseer pagina's die het sjabloon includen. NB: bij het wijzigen van de categorieën die aan een sjabloon zijn toegekend op deze manier kan het wijzigen wat later plaatsvinden: dit wordt afgehandeld in via de wachtrij . Om het herindelen direct te forceren voor een bepaalde pagina, open die pagina voor wijzigen en sla de pagina zonder wijziging op.
  • Het er zeker van zijn dat de sjablooncode niet uitgevoerd wordt bij het bekijken van de sjabloon-pagina zelf. Dit is omdat het parameters verwacht en uitvoering zonder parameters geen goed resultaat zal geven.

Alles buiten ‎<noinclude> en ‎<includeonly> wordt verwerkt en normaal getoond; zowel als de sjabloon-pagina wordt getoond als een pagina wordt getoond waarin dat sjabloon wordt gebruikt. De aandacht gaat naar wat er binnen die tags staat.

Alles buiten de ‎<onlyinclude> tags wordt weggelaten bij de transclusie. Ook secties binnen includeonly worden overgeslagen bij de transclusie als ze tenminste niet ook de tags onlyinclude gebruiken. De aandacht gaat naar wat er buiten die tag staat.

Deze tags kunnen ook genest worden.

De drie gedeeltelijke transclusie tags maken elke combinatie mogelijk wat er verwerkt en opgebouwd wordt voor weergave. Ook commentaar vervult een rol.

Sjablonen organiseren

Om een sjabloon nuttig te maken moet een schrijver van een artikel het sjabloon kunnen vinden en kunnen opzoeken hoe het gebruikt kan worden.

Om te zoeken kan een schrijver:

  1. Klik op Speciale pagina's > Alle pagina's
  2. In de lijst Naamruimte:, kies Template en klik op OK.

Om informatie te geven over het gebruik, voeg op de sjabloon-pagina een voorbeeld toe zoals deze:

<noinclude>
== Gebruik ==
Welkom gebruikers:
{{Thankyou/nl|reason=uw reden|signature=uw naam}}
</noinclude>

Een schrijver kan de aanroep van het sjabloon dan simpel kopiëren en in het eigen artikel gebruiken.

Linken naar een sjabloon

Een sjabloon-pagina kan naar elke wiki-pagina linken, dit gaat op dezelfde manier. Voorbeeld, de link Template:Navbar wordt gegenereerd door de wikicode [[Template:Navbar]] te gebruiken.

Op veel wiki's kan Template:Tl worden gebruikt voor een link naar een sjabloon geformatteerd op een manier die de "dubbele accolades" wikicode toont die nodig is om het sjabloon te transcluden zonder dat dan ook te doen. Voorbeeld, de code {{tl|Navbar}} kan worden gebruikt om de link {{Navbar}} te maken.

Deze constructie wordt meestal gebruikt bij het refereren aan sjablonen in de sjabloondocumentatie, help-pagina's en overleg-pagina's. Dit effect kan ook worden bereikt met gebruik van {{[[Template:Navbar|Navbar]]}}, maar bij manier {{tl}} is minder tikwerk nodig. Op elke wiki met het sjabloon Tl, kan het wel/geen uitvoer opleveren van tekst in een "code-element" of als monospace-type. Indien niet (zoals op deze wiki), kan een ander sjabloon met een vergelijkbare naam dat doen. Een voorbeeld staat in de "See also" section of our Template:Tl documentation.

Van een wiki naar een andere wiki kopiëren

Bij een sjabloon is vaak CSS of een ander sjabloon verplicht, zodat gebruikers vaak moeilijkheden hebben bij het kopiëren van sjablonen van de ene wiki naar een andere wiki. Hieronder een uitleg die voor de meeste sjablonen wel zal werken.

MediaWiki code

Als u mag importeren (u heeft het recht importupload) op de nieuwe wiki:

  1. Ga naar Special:Export op de originele wiki en download een xml-bestand met de complete geschiedenis van alle benodigde sjablonen, dit gaat als volgt:
    • Vul de naam van het sjabloon in het grote tekstveld, bijvoorbeeld "Template:Welcome". Let goed op het gebruik van hoofdletters en speciale tekens. Het exporteren kan lukken met een niet helemaal goede naam maar het xml-bestand bevat dan niet de gegevens die het moet bevatten.
    • Selecteer het veld "Sjablonen toevoegen".
    • Selecteer het veld "Alleen de laatste versie, niet de volledige geschiedenis".
    • Klik op "Exporteren".
  2. Ga naar Special:Import op de nieuwe wiki en upload het xml-bestand.

Als u op de nieuwe wiki niet mag importeren:

  1. Ga in de originele wiki naar het sjabloon wat u wilt kopiëren. Ga naar de pagina om het te bewerken en kopieer alle wikitext
  2. Op de nieuwe wiki, ga naar de pagina met dezelfde naam als het gekopieerde sjabloon. Kies aanmaken/bewerken plak de tekst. In de wijziging samenvatting van het sjabloon link naar de originele pagina voor de toeschrijving.
  3. Terug naar de originele wiki op het bewerkscherm, onder het wijzigveld, kijk naar de lijst "Sjablonen op deze pagina gebruikt". Voer voor elk genoemd sjabloon deze instructies uit, als die sjablonen nog niet bekend zijn op de nieuwe wiki. Kijk ook of er in de overgezette sjablonen nog gebruikte sjablonen zijn die nog onbekend zijn op de nieuwe wiki. Dit gaat door totdat u geen op de nieuwe wiki onbekende sjablonen meer vindt in deze sjablonen.

Zo kopieert u alle nodige code, het zal genoeg zijn voor enkele sjablonen. Merk op dat alleen pagina-elementen verwerkt bij het opbouwen van de pagina worden geëxporteerd, dat betekent dus dat bijvoorbeeld documentatie subpagina's niet worden geëxporteerd. Indien het niet werkt, controleer dan of er rode links genoemd worden bij "Pagina's opgenomen in de huidige versie van deze pagina", onderaan het wijzigingsveld. Als die er zijn herhaal dan de eerder genoemde stappen voor deze pagina's en kopieer de code in de modules.

Naar het succesvol importeren van het sjabloon en alle gelinkte sjablonen van de andere wiki, kunt u het aanpassen als het nodig is voor uw eigen wiki. Dat zou kunnen zijn, een eigen logo, het snoeien van onnodige categorieën en het bekijken van rode links.

Extensies

Een extensie die vaak in sjablonen wordt gebruikt is ParserFunctions. Bezoek pagina Extension:ParserFunctions en kijk of een van de genoemde functies wordt gebruikt in de sjablonen die u heeft gekopieerd. Als dat zo is, installeer dan de extensie ParserFunctions als die nog niet is geïnstalleerd. U heeft voor het installeren de rechten van een systeembeheerder nodig op de server van uw MediaWiki installatie.

Er kan ook afhankelijkheid zijn in de sjablonen, vooral op Wikipedia, door Lua. Als er {{#invoke: }} in de code van het sjabloon zit, dam lijkt dat waarschijnlijk. Als het wordt gebruikt, installeer dan (als die er nog niet is) de extensie Scribunto , hiervoor zijn weer de rechten van een sysbeheerder nodig. Bekijk die pagina voor meer instructies over het installeren en het gebruik.

CSS en JavaScript code

Naast MediaWiki code maken veel sjablonen ook veel gebruik van CSS en sommige vertrouwen op het werken van JavaScript. Als de overgezette sjablonen niet zoals verwacht werken, controleer dan deze punten. Om de benodigde CSS en JavaScript over te zetten zult u wel weer beheerdersrechten nodig hebben, want u wijzigt systeemberichten in de "MediaWiki:" namespace.

  1. Kijk naar het gebruik van CSS classes (teksten als class="foobar") in de tekst van het sjabloon. Indien die classes in "MediaWiki:Common.css" of "MediaWiki:Monobook.css" staan op de originele wiki, kopieer die classes naar "MediaWiki:Common.css" in de nieuwe wiki en controleer of het sjabloon nu goed werkt.
  2. als het gekopieerde sjabloon nog altijd niet op de gewenste manier werkt, controleer dan of er code in "MediaWiki:Common.js" of "MediaWiki:Monobook.js" is op de originele wiki. Als die er is, probeer dan die te kopiëren naar "MediaWiki:Common.js" op de nieuwe wiki. Normaal is het een goed idee om allen code te kopiëren uit code die u vertrouwd en die code eerst te bekijken om te zien welk deel relevant is. Let op het aanwezige commentaar dat mogelijk aanwijzingen geeft over de functionaliteit van dat deel van de code.

Zie ook

Externe links