Modul:ZauberNachGrad: Unterschied zwischen den Versionen

Zur Navigation springen Zur Suche springen
keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
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 – holt die Daten.
Dieses Modul ist in zwei Hauptfunktionen unterteilt:
renderSpellList – rendert die HTML-Ausgabe als Tabelle.
 
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 = {}


-- Holt alle Zauber einer Magieschule, gruppiert nach Grad
---------------------------------------------------------
-- 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


-- Gibt die Tabellenansicht mit Vorschaubild, Titel, Beschreibung und weiteren Attributen aus
---------------------------------------------------------
-- 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 Konvertieren von Einzelwert oder Tabelle zu String
                 -- 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 (ausgenommen die aktuelle)
                 -- 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 abfragen über Typ::Gesamtquellen + -Hat Unterobjekt
                 -- Quellen mit externer Modulhilfe holen
            local quellenAnzeigen = QuellenModul.getQuellen({ args = { Pagename = title } }) or "–"
                local quellenAnzeigen = QuellenModul.getQuellen({ args = { Pagename = title } }) or "–"
 


                 -- Tabellenzeile einfügen
                 -- 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')

Navigationsmenü