Modifiche

Creata pagina con "{{header}} Sebbene MediaWiki contenga funzionalità native per la gestione delle variabili e la generazione di output condizionali, è possibile ottenere risultati più sofis..."
{{header}}

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 [https://en.wikipedia.org/wiki/Lua_(programming_language) Lua].

Questa funzionalità si appoggia sull'estensione [[mw:Extension:Scribunto|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:

<code>{{#invoke: Module_name | function_name | arg1 = val_arg1 | arg2 = val_arg2 | arg3 = val_arg3 ... }}</code>

Nella pagina Module:Module_name:

<syntaxhighlight lang="lua">local p = {} --p stands for package

function p.hello( frame )
return "Hello, world!"
end

return p</syntaxhighlight>

Esempio di funzione complessa con lettura delle variabili inserite dall'utente nel template e restituzione di output differenziati a seconda del valore delle variabili:

<syntaxhighlight lang="lua">
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
</syntaxhighlight>

== Documentazione ==
* [[mw:Extension:Scribunto/Lua reference manual|Extension:Scribunto/Lua reference manual]]
** [[mw:Extension:Scribunto/Lua_reference_manual#Differences_from_standard_Lua|Differences from standard Lua]] NB: rispetto a Lua standard, in Lua MediaWiki "print" è completamente sostituito da "return".

[[Categoria:Esempi]]