Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 1: | Zeile 1: | ||
local buch = {} | local buch = {} | ||
-- Funktion zur dynamischen Abfrage der Gesamtbände | |||
function buch.getTotalVolumes(seriesPage) | |||
-- Abfrage für die Gesamtbände auf der Serienseite | |||
local query = "[[" .. seriesPage .. "]][[Gesamtbände::+]]" | |||
local result = mw.smw.getQueryResult(query) | |||
-- Überprüfen, ob Ergebnisse vorliegen | |||
if result and result.results and next(result.results) then | |||
local key = next(result.results) | |||
local data = result.results[key] | |||
-- 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 | |||
-- Fallback: nil, wenn keine Gesamtbände gefunden wurden | |||
return nil | |||
end | |||
function buch.render(args, main) | function buch.render(args, main) | ||
Zeile 24: | Zeile 45: | ||
-- Band und Serie | -- Band und Serie | ||
if args["Band"] then | |||
local bandText = 'Band ' .. args["Band"] -- Beginnt mit "Band X" | |||
-- Wenn eine Serie angegeben ist, verarbeiten wir sie | |||
if args["Hat Serie"] then | |||
-- Serienseite und Serienlink erstellen | |||
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> | output = output .. '<tr><td><strong>Band</strong></td><td>' .. bandText .. '</td></tr>' | ||
end | |||
elseif args["Hat Serie"] then | |||
-- 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 | -- Erscheinungsjahr | ||
output = output .. (args["Erscheinungsjahr"] and '<tr><td><strong>Erscheinungsjahr</strong></td><td>[[Erscheinungsjahr::' .. args["Erscheinungsjahr"] .. ']]</td></tr>' or "") | output = output .. (args["Erscheinungsjahr"] and '<tr><td><strong>Erscheinungsjahr</strong></td><td>[[Erscheinungsjahr::' .. args["Erscheinungsjahr"] .. ']]</td></tr>' or "") |
Version vom 19. November 2024, 21:57 Uhr
Die Dokumentation für dieses Modul kann unter Modul:Publikation/Buch/Doku erstellt werden
local buch = {}
-- Funktion zur dynamischen Abfrage der Gesamtbände
function buch.getTotalVolumes(seriesPage)
-- Abfrage für die Gesamtbände auf der Serienseite
local query = "[[" .. seriesPage .. "]][[Gesamtbände::+]]"
local result = mw.smw.getQueryResult(query)
-- Überprüfen, ob Ergebnisse vorliegen
if result and result.results and next(result.results) then
local key = next(result.results)
local data = result.results[key]
-- 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
-- Fallback: nil, wenn keine Gesamtbände gefunden wurden
return nil
end
function buch.render(args, main)
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
output = output .. '<tr><td><strong>Titel</strong></td><td>[[Hat Titel::' .. (args["Titel"] or "Unbekannt") .. ']]</td></tr>'
-- Autoren (Mehrfachwerte als Liste)
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::' .. author .. ']], '
end
output = output:sub(1, -3) .. '</td></tr>' -- Entfernt das letzte Komma
end
-- Verlag
output = output .. (args["Verlag"] and '<tr><td><strong>Verlag</strong></td><td>[[Verlag::' .. args["Verlag"] .. ']]</td></tr>' or "")
-- Band und Serie
if args["Band"] then
local bandText = 'Band ' .. args["Band"] -- Beginnt mit "Band X"
-- Wenn eine Serie angegeben ist, verarbeiten wir sie
if args["Hat Serie"] then
-- Serienseite und Serienlink erstellen
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
elseif args["Hat Serie"] then
-- 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
-- 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 "")
output = output .. '</table>'
return output
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