Si vous désirez créer des modèles sur votre wiki, vous devrez tôt ou tard apprendre à utiliser les fonctions parseur pour créer un code plus complexe. Que ça soit {{#if:}}
ou {{#switch:}}
, elles vous aideront à créer des modèles plus efficaces pour votre contenu.
Cependant, à un moment donné, vous pouvez être confronté à un problème: l'utilisation d'un trop grand nombre de #if
rend la lecture du code source plus difficile. Imaginez que vous souhaitiez classer automatiquement les pages d'épisodes de votre wiki consacré à une série télévisée selon les règles suivantes:
- Si le paramètre
{{{saison}}}
est présent, cela ajoute[[Catégorie:Épisodes de la saison {{{saison}}}]]
. - Si le paramètre
{{{saison}}}
est manquant, cela ajoute[[Catégorie:Épisodes sans saison]]
pour que vous puissiez les trouver facilement.
Dans un modèle, vous n'avez qu'à ajouter un simple #if:
comme suit:
{{#if:{{{saison|}}}|[[Catégorie:Épisodes de la saison {{{saison}}}]]|[[Catégorie:Épisodes sans saison]]}}
Avoir beaucoup de {{ }}
et de [[ ]]
peut rendre le tout assez difficile à lire, mais ce n'est pas si pire... pour l'instant. Qu'arrive-t-il si on ajoute une autre règle?
- Si le paramètre
{{{special}}}
est présent, en fonction de si l'épisode est un épisode régulier ou spécial, on doit alors ajouter[[Catégorie:Épisodes spéciaux de la saison {{{saison}}}]]
à la place.
Comment faire? Comme cela:
{{#if:{{{saison|}}}|{{#if:{{{special|}}}|[[Catégorie:Épisodes spéciaux de la saison {{{saison}}}]]|[[Catégorie:Épisodes de la saison {{{saison}}}]]}}|[[Catégorie:Épisodes sans saison]]}}
Cela devient un peu plus difficile à lire, n'est-ce pas? Nous venons d'ajouter une seule règle à notre logique! Les fonctions parseurs sont excellentes pour les vérifications simples, mais elles deviennent plus compliquées lorsque vous essayez d'implémenter une logique plus complexe en les utilisant. Que faire alors ? En tant que langage de programmation, Lua est un outil plus puissant qui vous aide à ajouter une logique avancée à vos modèles, tout en étant plus facile à lire si vous êtes familier avec lui. Mais avant de pouvoir convertir l'exemple précédent, nous devons comprendre ce que c'est et comment vous pouvez l'utiliser sur vos wikis à travers les modules.
Départ rapide avec Lua[]
Les scripts Lua sont disponibles par défaut dans l'espace de noms Module: de tous les wikis. Tout comme tous vos modèles commencent par Modèle:, tous les scripts Lua se trouvent dans des pages qui commencent par Module:. La plupart des modules ressemblent à ceci:
local p = {}
function p.main(frame)
-- code
end
return p
Résumons rapidement l'exemple précédent:
local p
est une variable, qui stocke une table vide{}
. Vous en avez besoin pour garder toutes vos fonctions exportées regroupées afin qu'elles puissent être retournée (return
) à la fin. D'autres modules et pages pourront utiliser tout ce qui se trouve dans la table exportée.- Nous créons une fonction
main
à l'intérieur de notre tablep
.frame
est un argument que toutes les fonctions reçoivent lorsqu'elles sont appellées à partir d'une page; vous pouvez en lire davantage sur le frame ici, mais pour l'instant, nous devons simplement savoir que c'est ce qui nous permets d'accéder aux paramètres utilisés dans la page. Par exemple, dans "{{Modèle|Premier|Deuxieme|hello=world}}
", nous aurions accès aupremier
paramètre,deuxième
paramètre ainsi qu'à la valeur du paramètre nomméhello
(qui estworld
).
Gardez en tête: main
est simplement un exemple! Vous pouvez utiliser le nom que vous voulez pour vos fonctions.
Créer notre module[]
Maintenant, allons voir du code! Concentrez-vous sur ce qui est dans la fonction main
.
local p = {}
function p.categoriser(frame)
local args = require('Dev:Arguments').getArgs(frame)
local saison = args.saison
local special = args.special
if saison then
if special then
return string.format( '[[Catégorie:Épisodes spéciaux de la saison %s]]', saison )
else
return string.format( '[[Catégorie:Épisodes de la saison %s]]', saison )
end
else
return '[[Catégorie:Épisodes sans saison]]'
end
end
return p
Étape par étape[]
Prenons le temps d'observer comment cette fonction fonctionne.
- Accéder aux paramètres
- Il y a plusieurs méthodes pour accéder aux paramètres passés à votre module à partir de la page, mais la plus recommandée est d'utiliser les Arguments un module Lua global disponible sur tous les wikis Fandom. Il exporte une fonction
getArgs
qui retourne une table avec tous les arguments de votre objetframe
. En utilisant la même modèle que tout à l'heure, "{{Modèle|Premier|Deuxieme|hello=world}}
", il vous retournera les arguments dans une table comme:
{ "Premier", "Deuxieme", hello = "world" }
- N'oubliez pas que dans Lua les tables débutent avec l'index 1! Vous pouvez donc accéder aux paramètres désirés en écrivant
args[1]
(Premier),args[2]
(Deuxieme) etargs.hello
(world). Si vous tentez d'accéder un index qui n'existe pas, vous recevrez une valeurnil
, l'équivalent deundefined
en Javascript ou deNone
en Python.
- Implémenter votre logique
- Vous devriez déjà être familier avec les
if
en programmation. La syntaxe de Lua est un peu différente mais assez facile à comprendre. - Tout comme nous l'avons fait précédemment avec les fonctions parseur, on regarde d'abord si le paramètre
saison
est présent. S'il ne l'était pas, nous recevrions une valeurnil
de notre tableargs
et serait donc considéré commefalse
. - L'autre partie qui pourrait vous questionner est l'utilisation de
string.format
. Lua possède plusieurs façons de concaténer les strings, et ça en est une. Le premier paramètre de cette fonction est votre string modèle. Dans celle-ci, chaque%s
sera remplacé par les paramètres qui suivent dans l'ordre (dans ce cas-ci, la valeur stockée dansseason
).- Si
saison
est présent, vérifie sispecial
est également présent.- Si
special
est présent, ajoute une catégorie[[Catégorie:Épisodes spéciaux de la saison %s]]
, où%s
sera remplacé par la valeur danssaison
. - Sinon, ajouter une catégorie
[[Catégorie:Épisodes de la saison %s]]
.
- Si
- Si
saison
n'est pas présent, ajoute une catégorie[[Catégorie:Épisodes sans saison]]
.
- Si
- Tout comme un modèle, la valeur retournée par le module est insérée dans l'article.
Comment puis-je l'utiliser?[]
Si l'exemple précédent était sauvegardé dans Module:Épisode
, vous pourriez l'utiliser à partir de n'importe quelle page en écrivant {{#invoke:Épisode|categoriser|saison=1}}
. Cependant, vous devriez éviter. Bien que la syntaxe soit très similaire aux modèles, cela pourrait porter à confusion les nouveaux contributeurs de votre wiki: #invoke
? Pourquoi categoriser
? Où se trouve ce modèle?
Normalement, vos utilisateurs n'utiliseront jamais les modules directements, mais plutôt via les modèles. Par exemple, vous pourriez appeler le module dans votre Modèle:Infobox épisode
comme suit: {{#invoke:Épisode|categoriser}}
.
Vous vous demandez peut-être aussi: comment le module connaitra-t-il la saison? Eh bien, votre objet frame
aura accès aux paramètre que votre modèle {{Infobox épisode}}
lui passera! Et grâce au module global d'arguments que nous avons utilisé plus tôt, vous aurez un accès facile sans même avoir à modifier votre module. Génial, n'est-ce pas?
Résumé[]
Ce blog vous a seulement donné une idée de la façon dont vous pouvez utiliser Lua pour simplifier la logique de vos modèles, en espérant que vous serez en mesure de l'appliquer dans de meilleurs scénarios afin qu'ils soient plus faciles à maintenir! Voici une courte liste de quand vous devriez envisager d'utiliser Lua :
- Votre modèle comporte de nombreuses fonctions parseur, surtout si elles sont imbriquées les unes dans les autres.
- Vous avez besoin d'avoir un nombre indéterminé de paramètre. Au lieu de manuellement ajouter
{{{parametre 1}}}
,{{{parametre 2}}}
,{{{parametre 3}}}
et ainsi de suite, vous pouvez utiliser Lua. - Bien que centraliser vos données soit une mauvaise pratique pour les wikis, c'est parfois la meilleure solution pour vos besoins. Et la meilleure façon de centraliser les données est d'utiliser des modules Lua.
Gardez en tête que les modules Lua nécéssitent que quelqu'un connaisse le langage pour pouvoir les maintenir à jour. Efforcez-vous de toujours suivre les meilleures pratiques et standards de programmation dans vos modules pour que les autres soient capable de les comprendre et de les modifier au besoin. Par exemple: utilisez des noms significatifs pour vos variables (local po
ne donne pas beaucoup d'information pour comprendre que la variable représente le prix d'un objet local prix_objet
) et diviser votre code en plusieurs fonctions plus courtes pour les rendre plus faciles à lire. Évidemment, ajouter des commentaires et de la documentation!
Vous disposez de tous les outils disponibles dans un langage de programmation pour créer des modules puissants à utiliser dans vos articles, au lieu de vous contenter des fonctions parserur du wikitexte et d'autres fonctions de base.
Devenir un Pro : Aspects Techniques
Vous pouvez consulter l'article original ici (en anglais).
Cliquez ici pour suivre les blogs du Staff.
Nous expérimentons ! Apprenez-en plus sur les types d'événements et autres choses que nous avons fait jusqu'à présent ou que nous prévoyons de faire !
Vous souhaitez un accès à temps réel à vos camarades éditeurs et au staff ?
Rejoignez notre serveur Discord officiel pour les utilisateurs enregistrés !