Onderwijswiki/ParserFunctions
De extensie ParserFunctions is een onmisbare schakel in de ontwikkeling van een onderwijswiki.
Het breidt de standaard wikitekst uit met logische functies die we kennen uit programmeertalen.
Hierdoor kunnen sjablonen intelligent reageren op de invoer van een gebruiker.
Veelgebruikte Functies
[bewerken]#if
[bewerken]De meest gebruikte functie is ``. Deze controleert of een waarde leeg is of niet.
{{#if: {{{parameter|}}} | Waarde indien gevuld | Waarde indien leeg }}
#ifeq
[bewerken]Vergelijkt twee waarden met elkaar. Dit is handig om bijvoorbeeld te controleren welk type object er gevraagd wordt.
{{#ifeq: {{{Object|}}} | Boek | Je bekijkt nu een boek | Dit is geen boek }}
#switch
[bewerken]Wanneer je veel verschillende mogelijkheden hebt, is een `` overzichtelijker dan veel geneste `if`-functies.
{{#switch: {{{Kleur|}}}
| Rood = #FF0000
| Blauw = #0000FF
| #000000 (standaardwaarde)
}}
#expr
[bewerken]Wordt gebruikt voor wiskundige berekeningen. In een onderwijswiki kan dit bijvoorbeeld gebruikt worden om percentages voor een voortgangsbalk te berekenen.
{{#expr: 100 / {{{Totaal}}} * {{{Gedaan}}} }}
#ifexist
[bewerken]Controleert of een bepaalde pagina op de wiki bestaat. Dit is cruciaal voor het automatisch genereren van links naar hoofdstukken of bijbehorende oefeningen.
Sjabloon:Opmaak
[bewerken]Een krachtig voorbeeld van parserfunctions vinden we in de broncode van het Sjabloon:Opmaak. Hier worden parserfunctions gebruikt om parameters te "normaliseren". Omdat we willen dat het sjabloon zowel Nederlandse als Engelse parameternamen begrijpt, zien we vaak constructies als deze:
| object={{#if:{{{Object|}}}|{{{Object|}}}|{{{object|}}}}}
| support={{#if:{{{Support|}}}|{{{Support|}}}|{{{support|}}}}}
| title={{#if:{{{Titel|}}}|{{{Titel|}}}|{{{titel|}}}}}
Wat gebeurt hier?
[bewerken]1. De `#if` controleert eerst of de hoofdletter-variant `` is ingevuld. 2. Zo ja, dan wordt die waarde gebruikt. 3. Zo nee, dan wordt teruggevallen op de kleine letter-variant ``. 4. Dit zorgt voor een robuust sjabloon dat minder snel fout gaat bij kleine typefouten van de gebruiker.
Beperkingen
[bewerken]Hoewel parserfunctions erg krachtig zijn, hebben ze ook nadelen:
- De code kan erg onoverzichtelijk worden ("haakjessoep").
- Complexe logica is traag voor de MediaWiki-server.
- Er is geen echte variabele-opslag zoals in een programmeertaal.
Daarom gebruiken we in de onderwijswiki parserfunctions alleen voor de basiscontrole bij de "voordeur" van het sjabloon, waarna we de rest van het werk overlaten aan de Scribunto (Lua) extensie.
