Zuletzt bearbeitet vor 13 Stunden
von Xineohp1506

Modul:Publikation/Buch: Unterschied zwischen den Versionen

Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(18 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 4: Zeile 4:
local buch = {}
local buch = {}


-- Funktion zur Extraktion der Gesamtbände aus der Serien-ID
-- Funktion zum holen des Seitentitels mithilfe der Serien-ID
function buch.getCompleteVolumes(seriesID)
function buch.getSeriesPageTitle(frame)
     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 Serien-ID
     local queryResult = mw.smw.getQueryResult(frame.args)
    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
     -- Kein Ergebnis gefunden
     if not queryResult or not queryResult.results then
     if not queryResult or not queryResult.results or not queryResult.results[1] then
         return "Keine Ergebnisse gefunden."
         return "Keine Ergebnisse gefunden."
     end
     end


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


function buch.getCompleteVolumesByTitle(page, attribute)
-- Funktion zur Extraktion der Gesamtbände aus der Serienseite
function buch.getCompleteVolumesByTitle(frame)
     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 Seitentitel und Attribut
     local page = frame.args[1]  -- Seitentitel
    local attribute = frame.args[2]  -- Attributname
 
    -- Überprüfen, ob die erforderlichen Parameter vorhanden sind
     if not page or not attribute then
     if not page or not attribute then
         return "Seite oder Attribut nicht angegeben."
         return "Seite oder Attribut nicht angegeben."
Zeile 46: Zeile 43:
     local query = "[[" .. page .. "]]|?" .. attribute .. "|limit=1"
     local query = "[[" .. page .. "]]|?" .. attribute .. "|limit=1"
     local result = mw.smw.ask(query)
     local result = mw.smw.ask(query)
    -- Kein Ergebnis gefunden
     if not result then
     if not result then
         return "Keine Ergebnisse gefunden."
         return "Keine Ergebnisse gefunden."
     end
     end


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


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


     -- Serien-Seite holen
    -- Debug: Zeige alle empfangenen Argumente
     local seriesTitle = buch.getCompleteVolumes(seriesID)
    debugOutput = debugOutput .. "Empfangene Argumente:\n<pre>" .. mw.dumpObject(args) .. "</pre>\n"
     if seriesTitle:find("Gefundener Seitentitel") then
 
         seriesTitle = seriesTitle:gsub("Gefundener Seitentitel: ", "")
     -- Serien-ID prüfen
    else
     local seriesID = args["SerienID"]
         return "Fehler beim Abrufen der Serien-Seite."
     if seriesID then
    end
        debugOutput = debugOutput .. "Serien-ID: " .. seriesID .. "\n"
 
        -- Serienseite abrufen
         local seriesPageTitle = buch.getSeriesPageTitle({ args = { "[[SerienID::" .. seriesID .. "]]" } })
         debugOutput = debugOutput .. "Gefundene Serienseite: " .. tostring(seriesPageTitle) .. "\n"


    -- Attribut abrufen
        -- Gesamtbände abrufen
    local completeVolumes = buch.getCompleteVolumesByTitle(seriesTitle, "Complete volumes")
        if seriesPageTitle and seriesPageTitle ~= "Keine Ergebnisse gefunden." then
    if completeVolumes:find("Keine Ergebnisse gefunden") or completeVolumes:find("Attribut nicht gefunden") then
            local completeVolumes = buch.getCompleteVolumesByTitle({ args = { seriesPageTitle, "Complete volumes" } })
        return "Fehler beim Abrufen der Gesamtbände."
            debugOutput = debugOutput .. "Gefundene Gesamtbände: " .. tostring(completeVolumes) .. "\n"
    end


    -- Ausgabe der Bände
            -- Formatiere die Ausgabe
    local bandOutput = "Band " .. band
            local band = args["Band"] or "Unbekannt"
    if completeVolumes and completeVolumes ~= "" then
            local seriesTitle = seriesPageTitle:gsub("Library:Serie:", "") -- Entferne den Namensraum
         bandOutput = bandOutput .. " von " .. completeVolumes
            return "Band " .. band .. " von " .. tostring(completeVolumes) .. " ([["
                  .. seriesPageTitle .. "|" .. seriesTitle .. "]])"
         else
            debugOutput = debugOutput .. "Fehler: Serienseite konnte nicht gefunden werden.\n"
        end
     else
     else
         bandOutput = bandOutput .. " (Keine Gesamtbände gefunden)"
         debugOutput = debugOutput .. "Fehler: Serien-ID nicht angegeben.\n"
     end
     end


     return bandOutput
    -- Rückgabe der Debug-Ausgabe bei Fehlern
     return debugOutput
end
end


return buch
return buch

Aktuelle Version vom 22. November 2024, 00:45 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 zum holen des Seitentitels mithilfe der Serien-ID
function buch.getSeriesPageTitle(frame)
    if not mw.smw then
        return "Semantic MediaWiki-Erweiterung nicht gefunden."
    end

    local queryResult = mw.smw.getQueryResult(frame.args)

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

    -- Seitentitel extrahieren
    local results = queryResult.results
    if results[1].fulltext then
        return results[1].fulltext
    else
        return "Kein Seitentitel gefunden."
    end
end

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

    local page = frame.args[1]  -- Seitentitel
    local attribute = frame.args[2]  -- Attributname

    -- Überprüfen, ob die erforderlichen Parameter vorhanden sind
    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)

    -- Kein Ergebnis gefunden
    if not result then
        return "Keine Ergebnisse gefunden."
    end

    -- Ergebnis verarbeiten
    for title, data in pairs(result) do
        if data[attribute] then
            return tostring(data[attribute])
        end
    end

    return "Attribut nicht gefunden."
end

-- Hauptfunktion für die Buchdarstellung
function buch.render(frame, parentModule)
    local args = frame.args -- Direkt auf frame.args zugreifen
    local debugOutput = ""

    -- Debug: Zeige alle empfangenen Argumente
    debugOutput = debugOutput .. "Empfangene Argumente:\n<pre>" .. mw.dumpObject(args) .. "</pre>\n"

    -- Serien-ID prüfen
    local seriesID = args["SerienID"]
    if seriesID then
        debugOutput = debugOutput .. "Serien-ID: " .. seriesID .. "\n"

        -- Serienseite abrufen
        local seriesPageTitle = buch.getSeriesPageTitle({ args = { "[[SerienID::" .. seriesID .. "]]" } })
        debugOutput = debugOutput .. "Gefundene Serienseite: " .. tostring(seriesPageTitle) .. "\n"

        -- Gesamtbände abrufen
        if seriesPageTitle and seriesPageTitle ~= "Keine Ergebnisse gefunden." then
            local completeVolumes = buch.getCompleteVolumesByTitle({ args = { seriesPageTitle, "Complete volumes" } })
            debugOutput = debugOutput .. "Gefundene Gesamtbände: " .. tostring(completeVolumes) .. "\n"

            -- Formatiere die Ausgabe
            local band = args["Band"] or "Unbekannt"
            local seriesTitle = seriesPageTitle:gsub("Library:Serie:", "") -- Entferne den Namensraum
            return "Band " .. band .. " von " .. tostring(completeVolumes) .. " ([["
                   .. seriesPageTitle .. "|" .. seriesTitle .. "]])"
        else
            debugOutput = debugOutput .. "Fehler: Serienseite konnte nicht gefunden werden.\n"
        end
    else
        debugOutput = debugOutput .. "Fehler: Serien-ID nicht angegeben.\n"
    end

    -- Rückgabe der Debug-Ausgabe bei Fehlern
    return debugOutput
end

return buch