Utilisateur:Od1n/Chargement Lua

[[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 :


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 ?