5.423
Bearbeitungen
Stewie (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Stewie (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 3: | Zeile 3: | ||
gruppiert nach Zaubergrad mit Vorschaubild, Titel, Kurzbeschreibung und weiteren Eigenschaften. | gruppiert nach Zaubergrad mit Vorschaubild, Titel, Kurzbeschreibung und weiteren Eigenschaften. | ||
getSpellList – | Dieses Modul ist in zwei Hauptfunktionen unterteilt: | ||
renderSpellList – | |||
1. getSpellList – Fragt die Daten mit Semantic MediaWiki (SMW) ab und strukturiert sie nach Zaubergrad. | |||
2. renderSpellList – Wandelt diese Daten in eine HTML-Tabelle um und gibt sie aus. | |||
Verwendung: | Verwendung: | ||
{{#invoke:ZauberNachGrad|renderSpellList|Schule=Kampfmagie}} | {{#invoke:ZauberNachGrad|renderSpellList|Schule=Kampfmagie}} | ||
Erforderlich ist ein gültiger Wert für den Parameter „Schule“, z. B. Kampfmagie oder Feuermagie. | |||
--]] | --]] | ||
-- Wir binden ein separates Modul ein, das sich um die Anzeige der Quellen kümmert | |||
local QuellenModul = require('Modul:Quelleninformationen') | local QuellenModul = require('Modul:Quelleninformationen') | ||
local p = {} | local p = {} | ||
-- | --------------------------------------------------------- | ||
-- Funktion: getSpellList(frame) | |||
-- Diese Funktion holt alle Zauber einer bestimmten Magieschule. | |||
-- Die Abfrage erfolgt getrennt für jeden Zaubergrad (0–5). | |||
-- Rückgabe ist ein Lua-Array mit SMW-Ergebnissen je Grad. | |||
--------------------------------------------------------- | |||
function p.getSpellList(frame) | function p.getSpellList(frame) | ||
local schule = frame.args['Schule'] | local schule = frame.args['Schule'] | ||
if not schule then return nil end | if not schule then return nil end -- Wenn keine Schule angegeben ist, abbrechen | ||
local spellData = {} | local spellData = {} | ||
-- Für jeden Grad separat abfragen | |||
for grad = 0, 5 do | for grad = 0, 5 do | ||
local query = string.format( | local query = string.format( | ||
'[[Category::Zauber]][[%s::%d]]|?Seitentitel|?Kurzbeschreibung|?Profilbild|?Zaubertypus|?Zauberart|?Zauberschwierigkeit|?Zauberoption|?Magieschule|mainlabel=-|limit=199', | '[[Category::Zauber]][[%s::%d]]' .. | ||
'|?Seitentitel|?Kurzbeschreibung|?Profilbild|?Zaubertypus|?Zauberart|?Zauberschwierigkeit|?Zauberoption|?Magieschule' .. | |||
'|mainlabel=-|limit=199', | |||
schule, grad | schule, grad | ||
) | ) | ||
Zeile 36: | Zeile 49: | ||
end | end | ||
-- | --------------------------------------------------------- | ||
-- Funktion: renderSpellList(frame) | |||
-- Diese Funktion nimmt die gruppierten Zauberlisten (von getSpellList), | |||
-- erzeugt eine HTML-Tabelle und gibt sie als String zurück. | |||
--------------------------------------------------------- | |||
function p.renderSpellList(frame) | function p.renderSpellList(frame) | ||
local schuleFilter = frame.args['Schule'] | local schuleFilter = frame.args['Schule'] | ||
Zeile 46: | Zeile 63: | ||
local output = {} | local output = {} | ||
local totalCount = 0 | local totalCount = 0 | ||
-- Zählen, wie viele Zauber insgesamt gefunden wurden | |||
for grad = 0, 5 do | for grad = 0, 5 do | ||
local spells = spellsByGrad[grad] | local spells = spellsByGrad[grad] | ||
Zeile 53: | Zeile 72: | ||
end | end | ||
-- Einleitung: Überschrift mit Gesamtanzahl | |||
table.insert(output, string.format('<h2>%d Zauber der Magieschule</h2>', totalCount)) | table.insert(output, string.format('<h2>%d Zauber der Magieschule</h2>', totalCount)) | ||
-- Beginn der Tabelle mit Spaltenüberschriften | |||
table.insert(output, '<table class="wikitable">') | table.insert(output, '<table class="wikitable">') | ||
table.insert(output, '<tr><th>Bild</th><th>Titel</th><th>Beschreibung</th><th>Typus</th><th>Art</th><th>Schwierigkeit</th><th>Option</th><th>Weitere Magieschulen</th><th>Quelle</th></tr>') | table.insert(output, | ||
'<tr>' .. | |||
'<th>Bild</th><th>Titel</th><th>Beschreibung</th><th>Typus</th>' .. | |||
'<th>Art</th><th>Schwierigkeit</th><th>Option</th>' .. | |||
'<th>Weitere Magieschulen</th><th>Quelle</th>' .. | |||
'</tr>' | |||
) | |||
-- Für jeden Zaubergrad: Untertitel + Einträge | |||
for grad = 0, 5 do | for grad = 0, 5 do | ||
local spells = spellsByGrad[grad] | local spells = spellsByGrad[grad] | ||
Zeile 62: | Zeile 91: | ||
table.insert(output, string.format('<tr><th colspan="9">Zaubergrad %d</th></tr>', grad)) | table.insert(output, string.format('<tr><th colspan="9">Zaubergrad %d</th></tr>', grad)) | ||
for _, spell in ipairs(spells) do | for _, spell in ipairs(spells) do | ||
-- Basisdaten | |||
local title = spell["Seitentitel"] or "Unbenannt" | local title = spell["Seitentitel"] or "Unbenannt" | ||
local description = spell["Kurzbeschreibung"] or "" | local description = spell["Kurzbeschreibung"] or "" | ||
Zeile 70: | Zeile 100: | ||
local imageTag = string.format('[[Datei:%s|50px]]', image) | local imageTag = string.format('[[Datei:%s|50px]]', image) | ||
-- Hilfsfunktion zum | -- Hilfsfunktion zum normierten Anzeigen von SMW-Werten | ||
local function safeString(value) | local function safeString(value) | ||
if type(value) == "table" then | if type(value) == "table" then | ||
Zeile 86: | Zeile 116: | ||
local option = safeString(spell["Zauberoption"]) | local option = safeString(spell["Zauberoption"]) | ||
-- Weitere Magieschulen anzeigen ( | -- Weitere Magieschulen anzeigen (die nicht der aktuellen entsprechen) | ||
local magieschule = spell["Magieschule"] | local magieschule = spell["Magieschule"] | ||
local schuleAnzeigen = "–" | local schuleAnzeigen = "–" | ||
Zeile 108: | Zeile 138: | ||
end | end | ||
-- Quellen | -- Quellen mit externer Modulhilfe holen | ||
local quellenAnzeigen = QuellenModul.getQuellen({ args = { Pagename = title } }) or "–" | |||
-- | -- Zeile zur Tabelle hinzufügen | ||
table.insert(output, string.format( | table.insert(output, string.format( | ||
'<tr><td>%s</td><td>[[%s]]</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>', | '<tr><td>%s</td><td>[[%s]]</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>', | ||
Zeile 121: | Zeile 150: | ||
end | end | ||
-- Tabelle abschließen | |||
table.insert(output, '</table>') | table.insert(output, '</table>') | ||
return table.concat(output, '\n') | return table.concat(output, '\n') |
Bearbeitungen