Modul:KategorieInfo
Kategorie-Metadaten (strukturierte Darstellung)[Quelltext 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[Quelltext 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[Quelltext bearbeiten]
Modul:KategorieDaten.json[Quelltext 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[Quelltext 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[Quelltext bearbeiten]
Auf Kategorieseiten reicht folgende Zeile ganz oben:
{{#invoke:KategorieInfo|show}}
Pflege[Quelltext 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[Quelltext 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