Sebbene MediaWiki contenga funzionalità native per la gestione delle variabili e la generazione di output condizionali, è possibile ottenere risultati più sofisticati utilizzando all'interno di MediaWiki moduli scritti in Lua.
Questa funzionalità si appoggia sull'estensione Scribunto di MediaWiki.
La sintassi di base prevede l'inserimento all'interno di un template di un "invoke" che punta a un "Modulo" e a una funzione che deve essere dichiarata al suo interno.
Nel template:
Errore script: nessun modulo "Module_name".
Nella pagina Module:Module_name:
local p = {} --p stands for package
function p.hello( frame )
return "Hello, world!"
end
return p
Esempio di funzione complessa con lettura delle variabili inserite dall'utente nel template e restituzione di output differenziati a seconda del valore delle variabili:
local p = {} --p stands for package
function p.display( frame )
-- ================ recupero variabili dal frame del template ================
notizia1 = frame.args['notizia1']
inizioNotizia1 = frame.args['inizioNotizia1']
fineNotizia1 = frame.args['fineNotizia1']
notizia2 = frame.args['notizia2']
inizioNotizia2 = frame.args['inizioNotizia2']
fineNotizia2 = frame.args['fineNotizia2']
notizia3 = frame.args['notizia3']
inizioNotizia3 = frame.args['inizioNotizia3']
fineNotizia3 = frame.args['fineNotizia3']
notizia4 = frame.args['notizia4']
inizioNotizia4 = frame.args['inizioNotizia4']
fineNotizia4 = frame.args['fineNotizia4']
oggi = frame.args['oggi']
-- ================ controllo quali notizie sono attive ================
if notizia1 ~= "vuota" and inizioNotizia1 <= oggi and oggi <= fineNotizia1 then
notizia1Attiva = true
else notizia1Attiva = false
end
if notizia2 ~= "vuota" and inizioNotizia2 <= oggi and oggi <= fineNotizia2 then
notizia2Attiva = true
else notizia2Attiva = false
end
if notizia3 ~= "vuota" and inizioNotizia3 <= oggi and oggi <= fineNotizia3 then
notizia3Attiva = true
else notizia3Attiva = false
end
if notizia4 ~= "vuota" and inizioNotizia4 <= oggi and oggi <= fineNotizia4 then
notizia4Attiva = true
else notizia4Attiva = false
end
-- ================ vedo quali notizie sono attive e mostro output di conseguenza ================
-- se sono attive tutte e quattro
if notizia1Attiva == true and notizia2Attiva == true and notizia3Attiva == true and notizia4Attiva == true then
output = "<div class=news-1-of-4>"..notizia1.."</div><div class=news-2-of-4>"..notizia2.."</div><div class=news-3-of-4>"..notizia3.."</div><div class=news-4-of-4>"..notizia4.."</div>"
-- se sono attive tre notizie
elseif notizia1Attiva == true and notizia2Attiva == true and notizia3Attiva == true and notizia4Attiva == false then
output = "<div class=news-1-of-3>"..notizia1.."</div><div class=news-2-of-3>"..notizia2.."</div><div class=news-3-of-3>"..notizia3.."</div>"
-- se sono attive due notizie
elseif notizia1Attiva == true and notizia2Attiva == true and notizia3Attiva == false and notizia4Attiva == false then
output = "<div class=news-1-of-4>"..notizia1.."</div><div class=news-2-of-4>"..notizia2.."</div><div class=news-3-of-4>"..notizia1.."</div><div class=news-4-of-4>"..notizia2.."</div>"
-- se è attiva una notizia
elseif notizia1Attiva == true and notizia2Attiva == false and notizia3Attiva == false and notizia4Attiva == false then
output = "<div class=news-static>"..notizia1.."</div>"
-- se non è attiva nessuna notizia
elseif notizia1Attiva == false and notizia2Attiva == false and notizia3Attiva == false and notizia4Attiva == false then
output = "<div class=news-static>Al momento non ci sono notizie.</div>"
end
return output
end
return p
Documentazione
- Extension:Scribunto/Lua reference manual
- Differences from standard Lua NB: rispetto a Lua standard, in Lua MediaWiki "print" è completamente sostituito da "return".