Modul:KategorieInfo
Kategorie-Metadaten (strukturierte Darstellung) Bearbeiten
Diese Seite dokumentiert den Aufbau und die Verwendung von Kategorie-Metadaten im Wikonia-System. Die Informationen basieren auf einer zentralen JSON-Datei, die über ein Lua-Modul verarbeitet und auf Kategorieseiten angezeigt wird.
Ziel Bearbeiten
Kategorien sollen mit einer konsistenten Infobox versehen werden, die Beschreibung, Zugehörigkeit und verwandte Themen enthält. Die Daten werden zentral gepflegt, um Redundanz und manuelle Formatierungen zu vermeiden.
Bestandteile Bearbeiten
Modul:KategorieDaten.json Bearbeiten
Diese Datei enthält alle Kategoriedaten in strukturierter, maschinenlesbarer Form.
- Pflichtfelder
description_de: Beschreibung der Kategorie auf Deutschdescription_en: Beschreibung der Kategorie auf Englisch
- Optionale Felder
icon: Dateiname eines Icons, z. B.Wrench.svgparent: Name einer übergeordneten Kategorierelated: Liste verwandter Kategorien (als Array)namespace: Zugehöriger Namensraum (z. B.Help) oderfalsestatus: Status der Kategorie, z. B.active,deprecated,draftvisible: Sichtbarkeit für Benutzer (Standard:true)note_de: Redaktioneller Hinweis (Deutsch)note_en: Redaktioneller Hinweis (Englisch)
Modul:KategorieInfo Bearbeiten
Das Lua-Modul erzeugt automatisch eine Infobox auf Basis der obigen JSON-Daten.
Funktionen:
- Erkennt die aktuelle Kategorieseite automatisch
- Ermittelt die Sprache des Benutzers (oder nutzt die Seiteninhaltssprache)
- Lädt die passenden Texte aus der JSON-Datei
- Erzeugt eine formatierte Box mit:
- Titel (inkl. Icon)
- Beschreibung
- Übergeordnete Kategorie (falls definiert)
- Verwandte Kategorien (falls vorhanden)
- Hinweise (optional)
Einbindung Bearbeiten
Auf Kategorieseiten reicht folgende Zeile ganz oben:
{{#invoke:KategorieInfo|show}}
Pflege Bearbeiten
- Die Datei
Modul:KategorieDaten.jsondarf nur gültiges JSON enthalten. - Änderungen an der Datei wirken sofort auf alle betroffenen Kategorieseiten.
- Die Bearbeitung ist nur für Administratoren (bzw. Interface-Admins) erlaubt.
- Das Modul ist bewusst so gestaltet, dass fehlende Felder toleriert werden.
Erweiterungsmöglichkeiten Bearbeiten
- Lokalisierung weiterer Felder (z. B.
status_de,status_en) - Redaktionelles Gadget zum Editieren der JSON über ein Formular
- Spezialseite mit tabellarischer Übersicht aller Kategorien
- Visuelle Icons oder Farbcodes je nach Status
local jsonLoader = require('Modul:JsonLoader')
local p = {}
function p.show(frame)
-- JSON laden
local data, err = jsonLoader.load('Modul:KategorieDaten.json')
if not data then
return '<div class="kategoriebox fehler">' .. err .. '</div>'
end
-- aktuelle Seite ermitteln
local title = mw.title.getCurrentTitle()
local name = title.text
-- Sprachwahl
local lang = mw.language.getContentLanguage().code
local userLang = frame:callParserFunction("int", "lang") or lang
-- passenden Datensatz holen
local info = data[name]
if not info then
local fallbackMessage = {
de = "⚠️ Diese Kategorie ist derzeit nicht im zentralen Kategoriedaten-Modul ([[Modul:KategorieDaten.json]]) erfasst.<br>Bitte ergänze sie, um hier eine Beschreibung anzeigen zu lassen.",
en = "⚠️ This category is not yet listed in the central category metadata module ([[Module:KategorieDaten.json]]).<br>Please add it to display information here."
}
local msg = fallbackMessage[userLang] or fallbackMessage[lang] or fallbackMessage["en"]
return '<div class="kategoriebox fehler">' .. msg .. '</div>'
end
-- Hilfsfunktion für Sprachfelder
local function getField(key)
return info[key .. "_" .. userLang] or info[key .. "_" .. lang] or info[key .. "_en"] or ""
end
-- Darstellung vorbereiten
local icon = info.icon and string.format('[[File:%s|32px|class=icon]] ', info.icon) or ""
local description = getField("description")
local note = getField("note")
local parent = info.parent and ("→ [[:Kategorie:" .. info.parent .. "|" .. info.parent .. "]]") or ""
local related = ""
if info.related and type(info.related) == "table" then
local links = {}
for _, r in ipairs(info.related) do
table.insert(links, "[[" .. r .. "]]")
end
related = "<div class='kategorie-verwandt'><b>See also:</b> " .. table.concat(links, ", ") .. "</div>"
end
-- HTML-Box zusammenbauen
local box = "<div class='kategoriebox'>"
box = box .. "<div class='kategorie-title'>" .. icon .. "'''" .. name .. "'''</div>"
box = box .. "<div class='kategorie-desc'>" .. description .. "</div>"
if parent ~= "" then
box = box .. "<div class='kategorie-parent'>" .. parent .. "</div>"
end
if related ~= "" then
box = box .. related
end
if note ~= "" then
box = box .. "<div class='kategorie-hinweis'>" .. note .. "</div>"
end
box = box .. "</div>"
return box
end
return p