Zuletzt bearbeitet vor 7 Stunden
von Xineohp1506

Modul:Publikation/Buch: Unterschied zwischen den Versionen

Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 5: Zeile 5:


-- Funktion zur Extraktion der Gesamtbände aus der Serien-ID
-- Funktion zur Extraktion der Gesamtbände aus der Serien-ID
function buch.getCompleteVolumes(frame)
function buch.getCompleteVolumes(seriesID)
     if not mw.smw then
     if not mw.smw then
         return "Semantic MediaWiki-Erweiterung nicht gefunden."
         return "Semantic MediaWiki-Erweiterung nicht gefunden."
     end
     end


     -- Überprüfung auf leere Parameter
     -- Überprüfung auf Serien-ID
     if frame.args[1] == nil then
     if not seriesID or seriesID == "" then
         return "Keine Abfrageparameter gefunden."
         return "Keine Serien-ID angegeben."
     end
     end


     -- Abfrage ausführen
     -- Abfrage erstellen
     local queryResult = mw.smw.getQueryResult(frame.args)
    local query = { ["[[SerienID::" .. seriesID .. "]]"] = "" } -- Keine spezielle Ausgabeanweisung
     local queryResult = mw.smw.getQueryResult(query)


     -- Kein Ergebnis
     -- Kein Ergebnis
     if queryResult == nil then
     if not queryResult or not queryResult.results then
         return "Keine Ergebnisse gefunden."
         return "Keine Ergebnisse gefunden."
     end
     end
    -- Debugging: Vollständige Struktur anzeigen
    -- return "<pre>" .. mw.dumpObject(queryResult) .. "</pre>"


     -- Extrahieren des Seitentitels
     -- Extrahieren des Seitentitels

Version vom 21. November 2024, 22:28 Uhr

Die Dokumentation für dieses Modul kann unter Modul:Publikation/Buch/Doku erstellt werden

local smw = require('Module:SMW')
local getArgs = require('Module:Arguments').getArgs

local buch = {}

-- Funktion zur Extraktion der Gesamtbände aus der Serien-ID
function buch.getCompleteVolumes(seriesID)
    if not mw.smw then
        return "Semantic MediaWiki-Erweiterung nicht gefunden."
    end

    -- Überprüfung auf Serien-ID
    if not seriesID or seriesID == "" then
        return "Keine Serien-ID angegeben."
    end

    -- Abfrage erstellen
    local query = { ["[[SerienID::" .. seriesID .. "]]"] = "" } -- Keine spezielle Ausgabeanweisung
    local queryResult = mw.smw.getQueryResult(query)

    -- Kein Ergebnis
    if not queryResult or not queryResult.results then
        return "Keine Ergebnisse gefunden."
    end

    -- Extrahieren des Seitentitels
    local results = queryResult.results
    if results and results[1] and results[1].fulltext then
        return "Gefundener Seitentitel: " .. results[1].fulltext
    else
        return "Kein Seitentitel gefunden."
    end
end

function buch.getCompleteVolumesByTitle(page, attribute)
    if not mw.smw then
        return "Semantic MediaWiki-Erweiterung nicht gefunden."
    end

    -- Überprüfung auf Seitentitel und Attribut
    if not page or not attribute then
        return "Seite oder Attribut nicht angegeben."
    end

    -- Abfrage erstellen
    local query = "[[" .. page .. "]]|?" .. attribute .. "|limit=1"
    local result = mw.smw.ask(query)
    if not result then
        return "Keine Ergebnisse gefunden."
    end

    -- Durchlaufe Ergebnisse, um das Attribut zu extrahieren
    for title, data in pairs(result) do
        if data[attribute] and type(data[attribute]) == "table" then
            return tostring(data[attribute][1]) -- Erster gefundener Wert
        end
    end

    return "Attribut nicht gefunden."
end

-- Hauptfunktion für die Buchdarstellung
function buch.render(args, helper)
    local seriesID = args["Hat Serie"] or ""
    local band = args["Band"] or ""

    -- Serien-Seite holen
    local seriesTitle = buch.getCompleteVolumes(seriesID)
    if seriesTitle:find("Gefundener Seitentitel") then
        seriesTitle = seriesTitle:gsub("Gefundener Seitentitel: ", "")
    else
        return "Fehler beim Abrufen der Serien-Seite."
    end

    -- Attribut abrufen
    local completeVolumes = buch.getCompleteVolumesByTitle(seriesTitle, "Complete volumes")
    if completeVolumes:find("Keine Ergebnisse gefunden") or completeVolumes:find("Attribut nicht gefunden") then
        return "Fehler beim Abrufen der Gesamtbände."
    end

    -- Ausgabe der Bände
    local bandOutput = "Band " .. band
    if completeVolumes and completeVolumes ~= "" then
        bandOutput = bandOutput .. " von " .. completeVolumes
    else
        bandOutput = bandOutput .. " (Keine Gesamtbände gefunden)"
    end

    return bandOutput
end

return buch