Zuletzt bearbeitet vor 2 Stunden
von Xineohp1506

Modul:Publikation/Buch: Unterschied zwischen den Versionen

Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
local buch = {}
local buch = {}


-- Funktion zur dynamischen Abfrage der Gesamtbände
-- Funktion, um die Anzahl der Bände aus der Serienseite zu holen
function buch.getTotalVolumes(seriesPage)
local function getTotalVolumes(seriesTitle)
     -- Abfrage für die Gesamtbände auf der Serienseite
     if not seriesTitle or seriesTitle == "" then
     local query = "[[" .. seriesPage .. "]][[Gesamtbände::+]]"
        return nil
    end
 
     local query = "[[Hat Titel::" .. seriesTitle .. "]]|?Complete volumes|limit=1"
     local result = mw.smw.getQueryResult(query)
     local result = mw.smw.getQueryResult(query)


    -- Überprüfen, ob Ergebnisse vorliegen
     if result and result.results and next(result.results) then
     if result and result.results and next(result.results) then
         local key = next(result.results)
         for _, data in pairs(result.results) do
        local data = result.results[key]
            return data.properties["Complete volumes"] and data.properties["Complete volumes"][1] or nil
 
        -- Gesamtbände zurückgeben, falls vorhanden
        if data and data.properties and data.properties["Gesamtbände"] then
            return data.properties["Gesamtbände"][1]
         end
         end
     end
     end
    -- Fallback: nil, wenn keine Gesamtbände gefunden wurden
     return nil
     return nil
end
end
Zeile 24: Zeile 20:
function buch.render(args, main)
function buch.render(args, main)
     local output = '<table class="publikation buch">'
     local output = '<table class="publikation buch">'
    -- Coverbild
    local defaultCover = args["Typ"] == "Buch" and "Library:Cover:DefaultBook.webp" or "Library:Cover:DefaultSeries.webp"
    output = output .. '<tr><td colspan="2" style="text-align: center;">' .. main.getCoverImage(args["Coverbild"], defaultCover) .. '</td></tr>'


     -- Titel
     -- Titel
     output = output .. '<tr><td><strong>Titel</strong></td><td>[[Hat Titel::' .. (args["Titel"] or "Unbekannt") .. ']]</td></tr>'
    local title = args["Titel"] or "Unbekannt"
     output = output .. '<tr><td><strong>Titel</strong></td><td>[[Hat Titel::' .. title .. ']]</td></tr>'


     -- Autoren (Mehrfachwerte als Liste)
     -- Autor(en)
     if args["Autor"] then
     if args["Autor"] then
         output = output .. '<tr><td><strong>Autor(en)</strong></td><td>'
         output = output .. '<tr><td><strong>Autor(en)</strong></td><td>'
         for author in mw.text.gsplit(args["Autor"], ",") do
         for author in mw.text.gsplit(args["Autor"], ",") do
             output = output .. '[[Hat Autor::' .. author .. ']], '
             output = output .. '[[Hat Autor::' .. mw.text.trim(author) .. ']], '
         end
         end
         output = output:sub(1, -3) .. '</td></tr>' -- Entfernt das letzte Komma
         output = output:sub(1, -3) .. '</td></tr>' -- Entfernt das letzte Komma
     end
     end


     -- Verlag
     -- Band
     output = output .. (args["Verlag"] and '<tr><td><strong>Verlag</strong></td><td>[[Verlag::' .. args["Verlag"] .. ']]</td></tr>' or "")
     if args["Band"] then
        local seriesTitle = args["Hat Serie"] or ""
        local totalVolumes = getTotalVolumes(seriesTitle)


    -- Band und Serie
         output = output .. '<tr><td><strong>Band</strong></td><td>'
if args["Band"] then
        output = output .. args["Band"]
        local bandText = 'Band ' .. args["Band"] -- Beginnt mit "Band X"
        if totalVolumes then
 
            output = output .. ' von ' .. totalVolumes
        -- Wenn eine Serie angegeben ist, verarbeiten wir sie
         end
         if args["Hat Serie"] then
        if seriesTitle ~= "" then
            -- Serienseite und Serienlink erstellen
             output = output .. ' ([[ ' .. seriesTitle .. ' | Serie ]])'
            local seriesPage = 'Library:Serie:' .. args["Hat Serie"]:gsub(" ", "_")
            local serienLink = '[[' .. seriesPage .. '|' .. args["Hat Serie"] .. ']]'
 
            -- Gesamtbände dynamisch abrufen
            local totalVolumes = buch.getTotalVolumes(seriesPage)
 
            -- Bandtext erweitern, falls Gesamtbände vorhanden sind
            if totalVolumes then
                bandText = bandText .. ' von ' .. totalVolumes
            end
 
            -- Serienlink in Klammern hinzufügen
            bandText = bandText .. ' (' .. serienLink .. ')'
 
            -- Semantische Verbindung zur Serie setzen
            output = output .. '<tr><td><strong>Band</strong></td><td>[[Hat Serie::' .. args["Hat Serie"] .. ']] ' .. bandText .. '</td></tr>'
         else
            -- Keine Serie angegeben, nur Band anzeigen
             output = output .. '<tr><td><strong>Band</strong></td><td>' .. bandText .. '</td></tr>'
         end
         end
    elseif args["Hat Serie"] then
         output = output .. '</td></tr>'
        -- Wenn nur eine Serie angegeben ist, ohne Band
        local seriesPage = 'Library:Serie:' .. args["Hat Serie"]:gsub(" ", "_")
        local serienLink = '[[' .. seriesPage .. '|' .. args["Hat Serie"] .. ']]'
         output = output .. '<tr><td><strong>Serie</strong></td><td>[[Hat Serie::' .. args["Hat Serie"] .. ']] ' .. serienLink .. '</td></tr>'
     end
     end
    -- Erscheinungsjahr
    output = output .. (args["Erscheinungsjahr"] and '<tr><td><strong>Erscheinungsjahr</strong></td><td>[[Erscheinungsjahr::' .. args["Erscheinungsjahr"] .. ']]</td></tr>' or "")
    -- ISBN
    if args["ISBN-10"] or args["ISBN-13"] then
        local isbn10 = main.getIsbnLink(args["ISBN-10"], "ISBN-10")
        local isbn13 = main.getIsbnLink(args["ISBN-13"], "ISBN-13")
        output = output .. '<tr><td><strong>ISBN</strong></td><td>' .. isbn10 .. (isbn10 ~= "" and isbn13 ~= "" and " / " or "") .. isbn13 .. '</td></tr>'
    end
    -- Sprache
    output = output .. (args["Sprache"] and '<tr><td><strong>Sprache</strong></td><td>[[Sprache::' .. args["Sprache"] .. ']]</td></tr>' or "")
    -- Standort
    output = output .. (args["Standort"] and '<tr><td><strong>Standort</strong></td><td>[[Standort::' .. args["Standort"] .. ']]</td></tr>' or "")
    -- Umfang (Seitenanzahl)
    output = output .. (args["Umfang"] and '<tr><td><strong>Umfang</strong></td><td>[[Umfang::' .. args["Umfang"] .. ']] Seiten</td></tr>' or "")
    -- Preis
    output = output .. (args["Preis"] and '<tr><td><strong>Preis</strong></td><td>[[Preis::' .. args["Preis"] .. ']]</td></tr>' or "")
    -- Inhaltszusammenfassung
    output = output .. (args["Inhaltszusammenfassung"] and '<tr><td><strong>Inhaltszusammenfassung</strong></td><td>' .. args["Inhaltszusammenfassung"] .. '</td></tr>' or "")


    -- Weitere Felder hinzufügen...
     output = output .. '</table>'
     output = output .. '</table>'
     return output
     return output
end
end
-- Funktion zur dynamischen Abfrage der Gesamtbände
function buch.getTotalVolumes(seriesPage)
    local query = "[[" .. seriesPage .. "]][[Gesamtbände::+]]"
    local result = mw.smw.getQueryResult(query)
    if result and result.results and next(result.results) then
        local key = next(result.results)
        local data = result.results[key]
        if data and data.properties and data.properties["Gesamtbände"] then
            return data.properties["Gesamtbände"][1]
        end
    end
    return nil
end


return buch
return buch

Version vom 20. November 2024, 00:22 Uhr

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

local buch = {}

-- Funktion, um die Anzahl der Bände aus der Serienseite zu holen
local function getTotalVolumes(seriesTitle)
    if not seriesTitle or seriesTitle == "" then
        return nil
    end

    local query = "[[Hat Titel::" .. seriesTitle .. "]]|?Complete volumes|limit=1"
    local result = mw.smw.getQueryResult(query)

    if result and result.results and next(result.results) then
        for _, data in pairs(result.results) do
            return data.properties["Complete volumes"] and data.properties["Complete volumes"][1] or nil
        end
    end
    return nil
end

function buch.render(args, main)
    local output = '<table class="publikation buch">'

    -- Titel
    local title = args["Titel"] or "Unbekannt"
    output = output .. '<tr><td><strong>Titel</strong></td><td>[[Hat Titel::' .. title .. ']]</td></tr>'

    -- Autor(en)
    if args["Autor"] then
        output = output .. '<tr><td><strong>Autor(en)</strong></td><td>'
        for author in mw.text.gsplit(args["Autor"], ",") do
            output = output .. '[[Hat Autor::' .. mw.text.trim(author) .. ']], '
        end
        output = output:sub(1, -3) .. '</td></tr>' -- Entfernt das letzte Komma
    end

    -- Band
    if args["Band"] then
        local seriesTitle = args["Hat Serie"] or ""
        local totalVolumes = getTotalVolumes(seriesTitle)

        output = output .. '<tr><td><strong>Band</strong></td><td>'
        output = output .. args["Band"]
        if totalVolumes then
            output = output .. ' von ' .. totalVolumes
        end
        if seriesTitle ~= "" then
            output = output .. ' ([[ ' .. seriesTitle .. ' | Serie ]])'
        end
        output = output .. '</td></tr>'
    end

    -- Weitere Felder hinzufügen...
    output = output .. '</table>'
    return output
end

return buch