Utilisateur:Od1n/Chargement Lua
Apparence
[[Module:Foobar]]
:
local z = {}
function z.fromTemplate(frame)
return z.main(frame:getParent().args)
end
function z.fromInvoke(frame)
return z.main(frame.args)
end
function z.main(args)
-- code
end
return z
Dans le modèle associé [[Modèle:Foobar]]
:
{{#invoke:Foobar|fromTemplate}} utilisation : {{Foobar|lorem|ipsum}}
Dans un autre modèle :
{{#invoke:Foobar|fromInvoke|lorem|ipsum}}
Dans un autre module Lua :
local foobar = require('Module:Foobar')
local result = foobar.main({'foo', 'bar'})
Rappel important :
frame.args
n'étant pas une vraie table, les actions possibles avec sont limitées (cf. mw:Extension:Scribunto/Lua reference manual#frame.args)
Notes :
- Cette structure n'est pas l'idéale si le module comporte plusieurs fonctions "exportables", car il faudrait dupliquer les fonctions "fromInvoke".
- Autre possibilité : seulement tester si frame ou table d'args, ne pas jouer avec l'éventuelle frame parent, et ajouter un paramètre «
1
» magique :
{{#invoke:Foobar|functionBlah|foo|bar}} {{#invoke:Foobar|functionBlah|fromTemplate}} foobar.functionBlah({'foo', 'bar'})
- Nommer soigneusement les fonctions exportables, car en les renommant après il y a risque de BC break public API.
- Si un paramètre est lu plusieurs fois, faut-il mettre sa valeur en cache pour les perfs ?