Info Istruzioni per l'uso
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:StatsArticoli/man (modifica · cronologia)
Sandbox: Modulo:StatsArticoli/sandbox (modifica · cronologia) · Test: Modulo:StatsArticoli/test (modifica · cronologia · Esegui)

Questo modulo è stato creato per semplificare ( o evitare del tutto) la gestione delle lunghe concatenazioni di {{PAGESINCATEGORY}}, {{#expr:}} e {{formatNum:}} nelle tabelle che riassumono gli articoli e i loro livelli su Wikivoyage. Un esempio lo trovate su questa pagina.

Funzioni

totalDestinations
Scopo: Calcola il numero totale di articoli relativi alle destinazioni (vedi Modelli articoli e gerarchia geografica) , considerando tutti i livelli.
Utilizzo: {{#invoke:StatsArticoli|totalDestinations}}: 8 909
Ritorna: Il numero totale di articoli sulle destinazioni, formattato come numero.
totalDestinationsByLevel
Scopo: Calcola il numero totale di articoli relativi alle destinazioni per un specifico livello.
Parametri:
livello (stringa): Il livello degli articoli da contare (es. "Abbozzi", "Articoli usabili").
Utilizzo: {{#invoke:StatsArticoli|totalDestinationsByLevel|livello=Guide}}: 437
Ritorna: Il numero totale di articoli sulle destinazioni per il livello specificato, formattato come numero.
totalThematicArticles
Scopo: Calcola il numero totale di articoli tematici, con trattamento speciale per "Frasari" e "Tematiche turistiche" a causa della nomenclatura delle categorie non consistente.
Utilizzo: {{#invoke:StatsArticoli|totalThematicArticles}}: 1 040
Ritorna: Il numero totale di articoli tematici, formattato come numero.
totalThematicArticlesByLevel
Scopo: Calcola il numero totale di articoli tematici per un specifico livello.
Parametri:
livello (stringa): Il livello degli articoli da contare.
Utilizzo: {{#invoke:StatsArticoli|totalThematicArticlesByLevel|livello=Guide}}: 42
Ritorna: Il numero totale di articoli tematici per il livello specificato, formattato come numero.
percentagePerArticleType
Scopo: Calcola la percentuale di articoli di un determinato tipo e livello all'interno della loro categoria principale. Può essere usato in combinazine con template come {{BarraMultiCol}}.
Parametri:
tipo (stringa): Il tipo degli articoli (es. "Città").
livello (stringa): Il livello degli articoli (es. "Abbozzi").
parent (stringa, opzionale): La categoria principale, se diversa dal tipo di articolo.
Utilizzo: {{#invoke:StatsArticoli|percentagePerArticleType|tipo=Città|livello=Abbozzi}}: 70.491
Ritorna: La percentuale di articoli del tipo e livello specificati all'interno della loro categoria principale, formattata come numero decimale.
percentageByTypeAndLevel
Scopo: Calcola la percentuale di articoli di un determinato tipo e livello rispetto al totale degli articoli, sia per le destinazioni che per gli articoli tematici.
Parametri:
tipo (stringa): Specifica il tipo di articoli per cui calcolare la percentuale. Deve essere "destinazioni" per gli articoli relativi a luoghi geografici o "tematiche" per gli articoli tematici.
livello (stringa): Il livello degli articoli per cui calcolare la percentuale (es. "Abbozzi", "Articoli usabili").
Utilizzo: {{#invoke:StatsArticoli|percentageByTypeAndLevel|tipo=destinazioni|livello=Abbozzi}} per calcolare la percentuale di articoli di tipo "destinazioni" al livello "Abbozzi" (74.318%).
Ritorna: La percentuale di articoli del tipo e livello specificati, formattata come numero decimale con tre cifre dopo il punto.
Note: È importante specificare correttamente i parametri 'tipo' e 'livello' per evitare errori. La funzione restituirà un messaggio di errore se i parametri non sono validi o se il tipo specificato non è tra quelli ammessi ("destinazioni" o "tematiche").
totalDisambiguation
Scopo: Calcola il numero totale di pagine di disambiguazione.
Utilizzo: {{#invoke:StatsArticoli|totalDisambiguation}} (2 566)
Ritorna: Il numero totale di pagine di disambiguazione, formattato come numero.
totalPortals
Scopo: Calcola il numero totale di portali.
Utilizzo: {{#invoke:StatsArticoli|totalPortals}} (22)
Ritorna: Il numero totale di portali, formattato come numero.
totalUNESCO
Scopo: Calcola il numero totale di pagine nella categoria "Liste dei patrimoni mondiali dell'umanità".
Utilizzo: {{#invoke:StatsArticoli|totalUNESCO}} (169)
Ritorna: Il numero totale di pagine nella categoria specificata, formattato come numero.
grandTotal
Scopo: Calcola il numero totale di articoli, includendo destinazioni, articoli tematici, pagine di disambiguazione, portali e liste UNESCO.
Utilizzo: {{#invoke:StatsArticoli|grandTotal}} (12 706)
Ritorna: Il numero totale di articoli calcolato, formattato come numero.
totalUncategorized
Scopo: Calcola il numero totale di articoli non categorizzati, sottraendo il totale calcolato da `grandTotal` dal numero totale di articoli nel sito.
Utilizzo: {{#invoke:StatsArticoli|totalUncategorized}} (7)
Ritorna: Il numero totale di articoli non categorizzati, formattato come numero.


Esempi per il Debug

Mentre si lavora ai Moduli Lua è possible fare dei test senza dover salvare o utilizzare il modulo su altre pagine del progetto. Lo strumento da usare in questi casi è l'estensione di debug. Qui alcuni esempi:

  • Articoli tematici totali per tipo: =p.totalThematicArticlesByLevel(mw.getCurrentFrame():newChild{title="Module:StatsArticoli",args={livello="Articoli usabili"}})
  • Percentuale per tipo di articolo: =p.percentagePerArticleType(mw.getCurrentFrame():newChild{title="Module:StatsArticoli",args={tipo="Città", livello="Abbozzi"}})
  • Percentuale per tipo e livello: =p.percentageByTypeAndLevel(mw.getCurrentFrame():newChild{title="Module:StatsArticoli",args={livello="Articoli usabili", tipo="tematiche"}})

Vedi anche


--[[ 	Module to avoid too long concatentaions of {{PAGESINCATEGORY}}, #expr and formatnum in the 	table summarizing the articles and their levels in Wikivoyage. 	Maintainers:		User:Nastoshka 	Version:			1.0.0 	Last updated:		2024-02-17  -- Debugging examples: 		   =p.totalDestinations(mw.getCurrentFrame():newChild{title="Module:StatsArticoli",args={}}) --         ==p.totalDestinationsByLevel(mw.getCurrentFrame():newChild{title="Module:StatsArticoli",args={livello="Articoli usabili"}}) --         =p.percentagePerArticleType(mw.getCurrentFrame():newChild{title="Module:StatsArticoli",args={tipo="Città", livello="Abbozzi"}}) ]]   local p = {}  -- --------------------------------  SETUP VARIABLES ------------------------------------  -- Setup variables local destinations = {"Distretto", "Città", "Regione nazionale", "Regione continentale", "Stato", "Continente", "Parco", "Monte", "Sito archeologico", "Massa d'acqua"} local thematicTypes = {"Aeroporto", "Frasario", "Itinerario", "Sentiero", "Tematica"} local levels = {'Abbozzi', 'Articoli usabili', 'Guide', 'Articoli in vetrina', 'Articoli senza livello'}   -- --------------------------------  AUX FUNCTIONS ------------------------------------  local function _categoryExists(catName)     local title = mw.title.new('Category:' .. catName)     return title and title.exists or false end  local function getCategoryCount(categoryName, flag)     return mw.site.stats.pagesInCategory(categoryName, flag or 'pages') end   -- --------------------------------  CALC SUM AND ARTICLE COUNTS ------------------------------------   -- ----------- TOTALS AND SUBTOTALS -------------------------  local function calcSummary(articleTypes, level)     local sum = 0     for _, articleType in ipairs(articleTypes) do         local catName = articleType .. (level and " - " .. level or "")         if _categoryExists(catName) then             sum = sum + getCategoryCount(catName, "pages")         end     end     return sum end  function p.totalDestinations()     local sum = calcSummary(destinations,nil) -- all levels     return mw.language.getContentLanguage():formatNum(sum) end  function p.totalDestinationsByLevel(frame)     local level = frame.args["livello"] 	if not level or level == '' then         error("Per il calcolo delle somme per livello è necessario inserire il parametro con il livello desiderato.")     end      local sum = calcSummary(destinations,level)     return mw.language.getContentLanguage():formatNum(sum) end   function p.totalThematicArticles()     -- Handling Frasari e Tematiche (purtroppo il nome delle categorie non è consistente qui     -- Per i livelli abbiamo come dapertutto "Tematica - Abbozzi",  "Tematica - Guide"...     -- ma per la categoria generale i nomi sono "Frasari" e "Tematiche turistiche"     local sum = calcSummary(thematicTypes,nil) +                 getCategoryCount("Frasari", "pages") +                 getCategoryCount("Tematiche turistiche", "pages")      return mw.language.getContentLanguage():formatNum(sum) end  function p.totalThematicArticlesByLevel(frame)  	local level = frame.args["livello"] 	if not level or level == '' then         error("Per il calcolo delle somme per livello è necessario inserire il parametro con il livello desiderato.")     end     local sum = calcSummary(thematicTypes,level)     return mw.language.getContentLanguage():formatNum(sum) end  function p.totalDisambiguation()     local pages = getCategoryCount("Disambigue", "pages")     return mw.language.getContentLanguage():formatNum(pages) end  function p.totalPortals()     local portals = getCategoryCount("Portali", "pages")     return mw.language.getContentLanguage():formatNum(portals) end  function p.totalUNESCO()     local unesco = getCategoryCount("Liste dei patrimoni mondiali dell'umanità", "pages")     return mw.language.getContentLanguage():formatNum(unesco) end  function p._grandTotal()     local total_destinations = calcSummary(destinations,nil)     local total_thematic = calcSummary(thematicTypes,nil) +                 getCategoryCount("Frasari", "pages") +                 getCategoryCount("Tematiche turistiche", "pages")      local total_disambiguation = getCategoryCount("Disambigue", "pages")     local total_portals = getCategoryCount("Portali", "pages")     local total_unesco = getCategoryCount("Liste dei patrimoni mondiali dell'umanità", "pages")      local sum = total_destinations + total_thematic + total_disambiguation + total_portals + total_unesco     return sum end  function p.grandTotal()     local sum = p._grandTotal()     return mw.language.getContentLanguage():formatNum(sum) end  function p.totalUncategorized()     local uncategorized = mw.site.stats.articles - p._grandTotal()      return mw.language.getContentLanguage():formatNum(uncategorized) end   -- ----------- PERCENTAGES FOR THE COLORED BARS -------------------------  function p.percentagePerArticleType(frame) 	local articleType = frame.args["tipo"]     local level = frame.args["livello"]     local parentCat = frame.args["parent"] or articleType -- per i casi in cui la categoria senza livello differisca nel nome da quelle con i livelli     local percentage = "0"  	if not level or not articleType or level == '' or articleType == '' then         error("I parametri 'tipo' e 'livello' sono obbligatori.")         return percentage     end      if not _categoryExists(parentCat) then         error("La categoria " .. parentCat .. " non esiste.")         return percentage     end  	local total = getCategoryCount(parentCat, "pages")     local catName = articleType .. " - " .. level     if _categoryExists(catName) then     	local count = getCategoryCount(catName,"pages")         percentage = count/total*100         percentage = string.format("%.3f", percentage)     end      return percentage end  function p.percentageByTypeAndLevel(frame)     local type = frame.args["tipo"] -- "destinazioni" o "tematiche"     local level = frame.args["livello"]     local total = 0     local subtotal = 0     local percentage = "0"      if not level or not type or level == '' or type == '' then         error("I parametri 'tipo' e 'livello' sono obbligatori.")         return percentage     end      if type == "destinazioni" then         total = calcSummary(destinations,nil)         subtotal = calcSummary(destinations,level)     elseif type == "tematiche" then         total = calcSummary(thematicTypes,nil)         subtotal = calcSummary(thematicTypes,level)     else         error("Il parametro 'tipo' deve essere 'destinazioni' o 'tematiche'.")         return percentage     end      if total > 0 then         percentage = string.format("%.3f",  subtotal/total*100)     end      return percentage end  return p