Zuletzt bearbeitet vor 6 Stunden
von Xineohp1506

Modul:Publikation/Buch: Unterschied zwischen den Versionen

Keine Bearbeitungszusammenfassung
Markierung: Zurückgesetzt
Keine Bearbeitungszusammenfassung
 
(69 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
local buch = {}
local buch = {}
local helper = require("Modul:Publikation/SerieHelper")
local getArgs = require('Module:Arguments').getArgs
local getArgs = require('Module:Arguments').getArgs
local helper = require("Modul:Publikation/Helper")
local related = require("Modul:Publikation/Related")
-- Funktion zur Generierung von Kategorien
local function addCategories(args)
    local categories = ""
   
    -- Kategorie "Bücher"
    categories = categories .. "[[Kategorie:Bücher|" .. args["Titel"] .. "]]\n"
    -- Kategorie "Alle Publikationen"
    categories = categories .. "[[Kategorie:Alle Publikationen|" .. args["Titel"] .. "]]\n"
   
    -- Kategorie für Genre
    if args["Genre"] and args["Genre"] ~= "" then
        for genre in mw.text.gsplit(args["Genre"], ",") do
            genre = mw.text.trim(genre)
            categories = categories .. "[[Category:" .. genre .. "|" .. args["Titel"] .. "]]\n"
        end
    end
    -- Kategorie für Sprache
    if args["Sprache"] and args["Sprache"] ~= "" then
        categories = categories .. "[[Category:" .. args["Sprache"] .. "|" .. args["Titel"] .. "]]\n"
    end
    -- Kategorie für Verlag
    if args["Verlag"] and args["Verlag"] ~= "" then
        categories = categories .. "[[Category:" .. args["Verlag"] .. "|" .. args["Titel"] .. "]]\n"
    end
    -- Kategorie für Serie
    if args["Hat Serie"] and args["Hat Serie"] ~= "" then
        categories = categories .. "[[Category:Serie:" .. args["Hat Serie"] .. "|" .. args["Titel"] .. "]]\n"
    end
    -- Kategorie für Autor(en)
    if args["Autor"] and args["Autor"] ~= "" then
        for author in mw.text.gsplit(args["Autor"], ",") do
            author = mw.text.trim(author)
            categories = categories .. "[[Category:Autor:" .. author .. "|" .. args["Titel"] .. "]]\n"
        end
    end
    -- Kategorie für Standort
    if args["Standort"] and args["Standort"] ~= "" then
        categories = categories .. "[[Category:Standort:" .. args["Standort"] .. "|" .. args["Titel"] .. "]]\n"
    end
    return categories
end


function buch.render(frame)
function buch.render(frame)
     local debugOutput = {}
     local args = getArgs(frame) -- Argumente aus dem Frame extrahieren
    local output = "" -- Initialisierung von output
   
    -- Setze den DISPLAYTITLE basierend auf dem Titel des Buches
    if args["Titel"] then
        helper.setDisplayTitle({title = args["Titel"]})
    end
   
    -- Setze das semantische Attribut "Hat Serie", falls es definiert ist
    if args["Hat Serie"] and args["Hat Serie"] ~= "" then
        helper.setProperty({ args = { ["Hat Serie"] = args["Hat Serie"] } })
    end
   
    -- Setze die Inhaltszusammenfassung als semantischen Wert
    if args["Inhaltszusammenfassung"] and args["Inhaltszusammenfassung"] ~= "" then
        local rawSummary = mw.text.unstripNoWiki(args["Inhaltszusammenfassung"]):gsub("<.->", ""):gsub("%[%[.-%]%]", ""):gsub("%{.-%}", "") -- Entferne HTML-Tags und MediaWiki-Markierungen, bewahre geschützte Bereiche wie <nowiki>
        local truncatedSummary = mw.ustring.sub(rawSummary, 1, 250) -- Begrenze auf 250 Zeichen
        helper.setProperty({ args = { ["Inhaltszusammenfassung"] = truncatedSummary } }) -- Setze den semantischen Wert
        mw.ext.seo.set{description = truncatedSummary} -- Setze die Beschreibung
    end
   
    -- OpenGraph-Bild für SEO
    local coverImage = args["Coverbild"] or "DefaultBuchCover.webp"
    mw.ext.seo.set{["og:image"] = mw.uri.fullUrl("File:Library:" .. coverImage)}
   
    -- Coverbild semantisch setzen
if args["Coverbild"] and args["Coverbild"] ~= "" then
    helper.setProperty({ args = { ["Hat Cover"] = args["Coverbild"] } })
end
   
    -- Erstelle die Ausgabe
    output = output .. '<table class="publikation buch table">'


     -- Argumente aus dem Frame extrahieren
     -- Coverbild
    local args = frame.args
output = output .. '<tr><td colspan="2" style="text-align: center;">' .. helper.getCoverImage({cover = args["Coverbild"], defaultCover = "DefaultBuchCover.webp"}) .. '</td></tr>'
    if not args then
   
        table.insert(debugOutput, "Fehler: Keine Argumente übergeben.")
    -- Titel
        return "<pre>" .. table.concat(debugOutput, "\n") .. "</pre>"
    output = output .. '<tr><td><strong>Titel</strong></td><td>[[Hat Titel::' .. (args["Titel"] or "Unbekannt") .. ']]</td></tr>'
   
    -- Original Titel
    if args["Original Titel"] and args["Original Titel"] ~= "" then
        output = output .. '<tr><td><strong>Original Titel</strong></td><td>[[Original Titel::' .. args["Original Titel"] .. ']]</td></tr>'
     end
     end


     -- Debugging: Gebe alle übergebenen Argumente aus
     -- Autoren mit separater semantischer Speicherung und Links
     table.insert(debugOutput, "Übergebene Argumente:")
     if args["Autor"] then
    for k, v in pairs(args) do
        output = output .. '<tr><td><strong>Autor(en)</strong></td><td>'
        table.insert(debugOutput, k .. ": " .. tostring(v))
        for author in mw.text.gsplit(args["Autor"], ",") do
            author = mw.text.trim(author)
            local authorPage = "Library:Autor:" .. author:gsub(" ", "_")
            helper.setProperty({ args = { ["Hat Autor"] = author } }) -- Semantischen Wert setzen
            output = output .. '[[' .. authorPage .. '|' .. author .. ']], ' -- Link erstellen
        end
        output = output:sub(1, -3) .. '</td></tr>' -- Entfernt das letzte Komma
     end
     end


     -- Serien-ID abrufen
     -- Verlag
     local seriesID = args["SerienID"]
     if args["Verlag"] then
    if not seriesID or seriesID == "" then
         output = output .. '<tr><td><strong>Verlag</strong></td><td>[[Verlag::' .. args["Verlag"] .. ']]</td></tr>'
         table.insert(debugOutput, "Fehler: Serien-ID nicht angegeben.")
        return "<pre>" .. table.concat(debugOutput, "\n") .. "</pre>"
     end
     end


     -- Debugging: Zeige die Serien-ID an
     -- Band und Serie
     table.insert(debugOutput, "Serien-ID erfolgreich abgerufen: " .. seriesID)
     if args["Band"] then
        local seriesID = args["SerienID"]
        local bandText = args["Band"]
        helper.setProperty({ args = { ["Band"] = args["Band"] } }) -- Semantischen Wert setzen


    -- Abfrage erstellen und Serien-Seite abrufen
        if seriesID then
    local seriesQuery = "[[SerienID::" .. seriesID .. "]]"
            local seriesPageTitle = helper.getSeriesPageTitle({ args = { SerienID = seriesID } })
    table.insert(debugOutput, "Query für Serien-Seite: " .. seriesQuery)
            local completeVolumes = "Keine Ergebnisse gefunden."


    local seriesPageTitle = helper.getSeriesPageTitle({ args = { seriesQuery } })
            if seriesPageTitle ~= "Keine Ergebnisse gefunden." then
    table.insert(debugOutput, "Gefundene Serien-Seite: " .. seriesPageTitle)
                completeVolumes = helper.getCompleteVolumesByTitle({ args = { seriesPageTitle, "Complete volumes" } })
            end


    -- Überprüfen, ob die Serien-Seite gefunden wurde
            bandText = bandText .. " von " .. (completeVolumes or "?") .. ' ([[' .. mw.uri.anchorEncode(seriesPageTitle) .. '|' .. (args["Hat Serie"] or "Serie") .. "]])"
    if seriesPageTitle == "Keine Ergebnisse gefunden." then
        end
        table.insert(debugOutput, "Fehler: Serien-Seite konnte nicht abgerufen werden.")
         output = output .. '<tr><td><strong>Band</strong></td><td>' .. bandText .. '</td></tr>'
         return "<pre>" .. table.concat(debugOutput, "\n") .. "</pre>"
     end
     end


     -- Gesamtbände abrufen
     -- Erscheinungsjahr
     local completeVolumes = helper.getCompleteVolumesByTitle(seriesPageTitle, "Complete volumes")
     if args["Erscheinungsjahr"] then
    table.insert(debugOutput, "Gefundene Gesamtbände: " .. tostring(completeVolumes))
        output = output .. '<tr><td><strong>Erscheinungsjahr</strong></td><td>[[Erscheinungsjahr::' .. args["Erscheinungsjahr"] .. ']]</td></tr>'
    end


    if completeVolumes == "Keine Ergebnisse gefunden." then
-- ISBN
         completeVolumes = "Unbekannt"
if args["ISBN-10"] or args["ISBN-13"] then
    local isbn10 = args["ISBN-10"] and helper.getIsbnLink({isbn = args["ISBN-10"], version = "ISBN-10"}) or ""
    local isbn13 = args["ISBN-13"] and helper.getIsbnLink({isbn = args["ISBN-13"], version = "ISBN-13"}) or ""
    -- Semantische Werte setzen
    if args["ISBN-10"] and args["ISBN-10"] ~= "" then
        helper.setProperty({args = {["ISBN-10"] = args["ISBN-10"]}})
    end
    if args["ISBN-13"] and args["ISBN-13"] ~= "" then
        helper.setProperty({args = {["ISBN-13"] = args["ISBN-13"]}})
    end
    -- Anzeige der ISBN
    output = output .. '<tr><td><strong>ISBN</strong></td><td>' .. isbn10 .. (isbn10 ~= "" and isbn13 ~= "" and " / " or "") .. isbn13 .. '</td></tr>'
end
    -- Sprache
    if args["Sprache"] then
         output = output .. '<tr><td><strong>Sprache</strong></td><td>[[Sprache::' .. args["Sprache"] .. ']]</td></tr>'
     end
     end


     -- Serien-Link erstellen
     -- Standort
     local seriesLink = '[[' .. seriesPageTitle .. '|' .. (args["Hat Serie"] or "Serie") .. ']]'
     if args["Standort"] then
        output = output .. '<tr><td><strong>Standort</strong></td><td>[[Standort::' .. args["Standort"] .. ']]</td></tr>'
    end


     -- Ausgabe der Band-Informationen
     -- Umfang (Seitenanzahl)
     local band = args["Band"] or "Kein Band angegeben."
     if args["Umfang"] then
    local bandInfo = "Band " .. band .. " von " .. completeVolumes .. " (" .. seriesLink .. ")"
        output = output .. '<tr><td><strong>Umfang</strong></td><td>[[Umfang::' .. args["Umfang"] .. ']] Seiten</td></tr>'
     table.insert(debugOutput, "Ausgabe der Band-Informationen: " .. bandInfo)
     end


     -- Debugging: Finaler Ausgabe-String
     -- Preis
     table.insert(debugOutput, "Finale Ausgabe:")
    if args["Preis"] then
     table.insert(debugOutput, bandInfo)
        output = output .. '<tr><td><strong>Preis</strong></td><td>[[Preis::' .. args["Preis"] .. ']]</td></tr>'
    end
   
    -- Genre (Mehrfachwerte als Liste)
     if args["Genre"] and args["Genre"] ~= "" then
        output = output .. '<tr><td><strong>Genre</strong></td><td>'
        for genre in mw.text.gsplit(args["Genre"], ",") do
            genre = mw.text.trim(genre) -- Entfernt führende/trailing Whitespaces
            output = output .. '[[Genre::' .. genre .. ']], '
        end
        output = output:sub(1, -3) .. '</td></tr>' -- Entfernt das letzte Komma
    end
 
    -- Datensatz ID (z. B. DNB-ID)
    if args["Datensatz ID"] then
        local dnbLink = "https://d-nb.info/" .. args["Datensatz ID"]
        output = output .. '<tr><td><strong>Datensatz ID</strong></td><td>' .. args["Datensatz ID"] .. ' ([' .. dnbLink .. ' DNB])</td></tr>'
        helper.setProperty({args = {["Datensatz ID"] = args["Datensatz ID"]}})
     end
   
    -- Inhaltszusammenfassung
    if args["Inhaltszusammenfassung"] then
        output = output .. '<tr><td><strong>Inhaltszusammenfassung</strong></td><td>' .. args["Inhaltszusammenfassung"] .. '</td></tr>'
    end
 
    output = output .. '</table>'
   
    -- Weitere Bücher in der Serie (unterhalb der Tabelle)
    if args["Hat Serie"] then
        local relatedBooks = related.buchRelated({
    series = args["Hat Serie"],
    limit = 5,
    defaultCover = "DefaultBuchCover.webp" -- Default-Cover
})
        output = output .. '<div class="related-books">' ..
                '<h2>Weitere Bücher in der Serie:</h2>' ..
                  (relatedBooks or "<p>Keine weiteren Bände verfügbar.</p>") ..
                  '</div>'
    end


     return "<pre>" .. table.concat(debugOutput, "\n") .. "</pre>"
     -- Kategorien hinzufügen
    output = output .. addCategories(args)
    return output
end
end


return buch
return buch

Aktuelle Version vom 26. November 2024, 23:44 Uhr

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

local buch = {}
local getArgs = require('Module:Arguments').getArgs
local helper = require("Modul:Publikation/Helper")
local related = require("Modul:Publikation/Related")

-- Funktion zur Generierung von Kategorien
local function addCategories(args)
    local categories = ""
    
    -- Kategorie "Bücher"
    categories = categories .. "[[Kategorie:Bücher|" .. args["Titel"] .. "]]\n"

    -- Kategorie "Alle Publikationen"
    categories = categories .. "[[Kategorie:Alle Publikationen|" .. args["Titel"] .. "]]\n"
    
    -- Kategorie für Genre
    if args["Genre"] and args["Genre"] ~= "" then
        for genre in mw.text.gsplit(args["Genre"], ",") do
            genre = mw.text.trim(genre)
            categories = categories .. "[[Category:" .. genre .. "|" .. args["Titel"] .. "]]\n"
        end
    end

    -- Kategorie für Sprache
    if args["Sprache"] and args["Sprache"] ~= "" then
        categories = categories .. "[[Category:" .. args["Sprache"] .. "|" .. args["Titel"] .. "]]\n"
    end

    -- Kategorie für Verlag
    if args["Verlag"] and args["Verlag"] ~= "" then
        categories = categories .. "[[Category:" .. args["Verlag"] .. "|" .. args["Titel"] .. "]]\n"
    end

    -- Kategorie für Serie
    if args["Hat Serie"] and args["Hat Serie"] ~= "" then
        categories = categories .. "[[Category:Serie:" .. args["Hat Serie"] .. "|" .. args["Titel"] .. "]]\n"
    end

    -- Kategorie für Autor(en)
    if args["Autor"] and args["Autor"] ~= "" then
        for author in mw.text.gsplit(args["Autor"], ",") do
            author = mw.text.trim(author)
            categories = categories .. "[[Category:Autor:" .. author .. "|" .. args["Titel"] .. "]]\n"
        end
    end

    -- Kategorie für Standort
    if args["Standort"] and args["Standort"] ~= "" then
        categories = categories .. "[[Category:Standort:" .. args["Standort"] .. "|" .. args["Titel"] .. "]]\n"
    end

    return categories
end

function buch.render(frame)
    local args = getArgs(frame) -- Argumente aus dem Frame extrahieren
    local output = "" -- Initialisierung von output
    
    -- Setze den DISPLAYTITLE basierend auf dem Titel des Buches
    if args["Titel"] then
        helper.setDisplayTitle({title = args["Titel"]})
    end
    
    -- Setze das semantische Attribut "Hat Serie", falls es definiert ist
    if args["Hat Serie"] and args["Hat Serie"] ~= "" then
        helper.setProperty({ args = { ["Hat Serie"] = args["Hat Serie"] } })
    end
    
    -- Setze die Inhaltszusammenfassung als semantischen Wert
    if args["Inhaltszusammenfassung"] and args["Inhaltszusammenfassung"] ~= "" then
        local rawSummary = mw.text.unstripNoWiki(args["Inhaltszusammenfassung"]):gsub("<.->", ""):gsub("%[%[.-%]%]", ""):gsub("%{.-%}", "") -- Entferne HTML-Tags und MediaWiki-Markierungen, bewahre geschützte Bereiche wie <nowiki>
        local truncatedSummary = mw.ustring.sub(rawSummary, 1, 250) -- Begrenze auf 250 Zeichen
        helper.setProperty({ args = { ["Inhaltszusammenfassung"] = truncatedSummary } }) -- Setze den semantischen Wert
        mw.ext.seo.set{description = truncatedSummary} -- Setze die Beschreibung
    end
    
    -- OpenGraph-Bild für SEO
    local coverImage = args["Coverbild"] or "DefaultBuchCover.webp"
    mw.ext.seo.set{["og:image"] = mw.uri.fullUrl("File:Library:" .. coverImage)}
    
    -- Coverbild semantisch setzen
	if args["Coverbild"] and args["Coverbild"] ~= "" then
    	helper.setProperty({ args = { ["Hat Cover"] = args["Coverbild"] } })
	end
    
    -- Erstelle die Ausgabe
    output = output .. '<table class="publikation buch table">'

    -- Coverbild
	output = output .. '<tr><td colspan="2" style="text-align: center;">' .. helper.getCoverImage({cover = args["Coverbild"], defaultCover = "DefaultBuchCover.webp"}) .. '</td></tr>'
    
    -- Titel
    output = output .. '<tr><td><strong>Titel</strong></td><td>[[Hat Titel::' .. (args["Titel"] or "Unbekannt") .. ']]</td></tr>'
    
    -- Original Titel
    if args["Original Titel"] and args["Original Titel"] ~= "" then
        output = output .. '<tr><td><strong>Original Titel</strong></td><td>[[Original Titel::' .. args["Original Titel"] .. ']]</td></tr>'
    end

    -- Autoren mit separater semantischer Speicherung und Links
    if args["Autor"] then
        output = output .. '<tr><td><strong>Autor(en)</strong></td><td>'
        for author in mw.text.gsplit(args["Autor"], ",") do
            author = mw.text.trim(author)
            local authorPage = "Library:Autor:" .. author:gsub(" ", "_")
            helper.setProperty({ args = { ["Hat Autor"] = author } }) -- Semantischen Wert setzen
            output = output .. '[[' .. authorPage .. '|' .. author .. ']], ' -- Link erstellen
        end
        output = output:sub(1, -3) .. '</td></tr>' -- Entfernt das letzte Komma
    end

    -- Verlag
    if args["Verlag"] then
        output = output .. '<tr><td><strong>Verlag</strong></td><td>[[Verlag::' .. args["Verlag"] .. ']]</td></tr>'
    end

    -- Band und Serie
    if args["Band"] then
        local seriesID = args["SerienID"]
        local bandText = args["Band"]
        helper.setProperty({ args = { ["Band"] = args["Band"] } }) -- Semantischen Wert setzen

        if seriesID then
            local seriesPageTitle = helper.getSeriesPageTitle({ args = { SerienID = seriesID } })
            local completeVolumes = "Keine Ergebnisse gefunden."

            if seriesPageTitle ~= "Keine Ergebnisse gefunden." then
                completeVolumes = helper.getCompleteVolumesByTitle({ args = { seriesPageTitle, "Complete volumes" } })
            end

            bandText = bandText .. " von " .. (completeVolumes or "?") .. ' ([[' .. mw.uri.anchorEncode(seriesPageTitle) .. '|' .. (args["Hat Serie"] or "Serie") .. "]])"
        end
        output = output .. '<tr><td><strong>Band</strong></td><td>' .. bandText .. '</td></tr>'
    end

    -- Erscheinungsjahr
    if args["Erscheinungsjahr"] then
        output = output .. '<tr><td><strong>Erscheinungsjahr</strong></td><td>[[Erscheinungsjahr::' .. args["Erscheinungsjahr"] .. ']]</td></tr>'
    end

	-- ISBN
	if args["ISBN-10"] or args["ISBN-13"] then
	    local isbn10 = args["ISBN-10"] and helper.getIsbnLink({isbn = args["ISBN-10"], version = "ISBN-10"}) or ""
	    local isbn13 = args["ISBN-13"] and helper.getIsbnLink({isbn = args["ISBN-13"], version = "ISBN-13"}) or ""
	
	    -- Semantische Werte setzen
	    if args["ISBN-10"] and args["ISBN-10"] ~= "" then
	        helper.setProperty({args = {["ISBN-10"] = args["ISBN-10"]}})
	    end
	    if args["ISBN-13"] and args["ISBN-13"] ~= "" then
	        helper.setProperty({args = {["ISBN-13"] = args["ISBN-13"]}})
	    end
	
	    -- Anzeige der ISBN
	    output = output .. '<tr><td><strong>ISBN</strong></td><td>' .. isbn10 .. (isbn10 ~= "" and isbn13 ~= "" and " / " or "") .. isbn13 .. '</td></tr>'
	end
	
    -- Sprache
    if args["Sprache"] then
        output = output .. '<tr><td><strong>Sprache</strong></td><td>[[Sprache::' .. args["Sprache"] .. ']]</td></tr>'
    end

    -- Standort
    if args["Standort"] then
        output = output .. '<tr><td><strong>Standort</strong></td><td>[[Standort::' .. args["Standort"] .. ']]</td></tr>'
    end

    -- Umfang (Seitenanzahl)
    if args["Umfang"] then
        output = output .. '<tr><td><strong>Umfang</strong></td><td>[[Umfang::' .. args["Umfang"] .. ']] Seiten</td></tr>'
    end

    -- Preis
    if args["Preis"] then
        output = output .. '<tr><td><strong>Preis</strong></td><td>[[Preis::' .. args["Preis"] .. ']]</td></tr>'
    end
    
    -- Genre (Mehrfachwerte als Liste)
    if args["Genre"] and args["Genre"] ~= "" then
        output = output .. '<tr><td><strong>Genre</strong></td><td>'
        for genre in mw.text.gsplit(args["Genre"], ",") do
            genre = mw.text.trim(genre) -- Entfernt führende/trailing Whitespaces
            output = output .. '[[Genre::' .. genre .. ']], '
        end
        output = output:sub(1, -3) .. '</td></tr>' -- Entfernt das letzte Komma
    end

    -- Datensatz ID (z. B. DNB-ID)
    if args["Datensatz ID"] then
        local dnbLink = "https://d-nb.info/" .. args["Datensatz ID"]
        output = output .. '<tr><td><strong>Datensatz ID</strong></td><td>' .. args["Datensatz ID"] .. ' ([' .. dnbLink .. ' DNB])</td></tr>'
        helper.setProperty({args = {["Datensatz ID"] = args["Datensatz ID"]}})
    end
    
    -- Inhaltszusammenfassung
    if args["Inhaltszusammenfassung"] then
        output = output .. '<tr><td><strong>Inhaltszusammenfassung</strong></td><td>' .. args["Inhaltszusammenfassung"] .. '</td></tr>'
    end

    output = output .. '</table>'
    
    -- Weitere Bücher in der Serie (unterhalb der Tabelle)
    if args["Hat Serie"] then
        local relatedBooks = related.buchRelated({ 
    		series = args["Hat Serie"], 
    		limit = 5,
    		defaultCover = "DefaultBuchCover.webp" -- Default-Cover
		})
        output = output .. '<div class="related-books">' ..
                 '<h2>Weitere Bücher in der Serie:</h2>' ..
                  (relatedBooks or "<p>Keine weiteren Bände verfügbar.</p>") ..
                  '</div>'
    end

    -- Kategorien hinzufügen
    output = output .. addCategories(args)
    return output
end

return buch