Zum Inhalt springen

Modul:NeoWikiLink

aus AufEinWort, der freien Forschung
Dies ist die aktuelle Version dieser Seite, zuletzt bearbeitet am 29. Oktober 2026 um 17:13 Uhr durch Sophos (Diskussion | Beiträge) (Automated edit (via create-page on MediaWiki MCP Server)).
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Das Modul liest Werte aus NeoWiki und gibt sie als gewöhnliche interne Wikilinks aus. Es verändert weder NeoWiki-Daten noch SMW-Annotationen oder die Eingabemaske im Reiter „Daten“.

Aufruf

Ein Feld des Hauptsubjekts der aktuellen Seite:

{{#invoke:NeoWikiLink|link|Urheber}}

Ein bestimmtes Subjekt, unabhängig von dessen Speicherort:

{{#invoke:NeoWikiLink|link|Urheber|subject=sF1Bf9yXAGnAwj1}}
{{#invoke:NeoWikiLink|link|Werkform|subject=sF1Bf9yXAGnAwj1}}

Das Hauptsubjekt einer anderen Seite:

{{#invoke:NeoWikiLink|link|Urheber|seite=Subject:sF1Bf9yXAGnAwj1}}

Parameter

Parameter Bedeutung
1 oder feld Name des NeoWiki-Felds.
subject oder subjekt Optional: Subjekt-ID. Hat Vorrang vor der Seitenangabe.
page oder seite Optional: Seite, deren Hauptsubjekt gelesen wird. Ohne Subjekt- und Seitenangabe gilt die aktuelle Seite.
namensraum Optional: vorangestellter Namensraum, etwa Person oder Werk. Ohne Angabe wird der Feldwert selbst als Seitentitel verwendet.
anzeige Optional: abweichender Linktext; gilt bei mehreren Werten für jeden Link.
trenner Optional: Trennung mehrerer Werte. Vorgabe: Komma und Leerzeichen.

Alle Werte eines mehrwertigen Felds werden einzeln verlinkt. Auswahlfelder liefern die lesbare Optionsbezeichnung. Fehlende oder leere Werte ergeben keine Ausgabe. Nicht vorhandene Zielseiten ergeben normale rote Links. Kategorie- und Dateiseiten werden verlinkt, ohne Kategorien zu setzen oder Dateien einzubetten. Ungültige oder externe Seitentitel werden mit einer Fehlermeldung zurückgewiesen.

Bei Relationsfeldern wird die von NeoWiki gelieferte Anzeigenbezeichnung als Wikiseitentitel verwendet; dies ist keine Auflösung auf die Speicherseite des verknüpften Subjekts.

Das Modul stellt keine dauerhafte Zuordnung zwischen einer Werkseite und einem separat gespeicherten Subjekt her. Dafür kann die Subjekt-ID im Aufruf angegeben werden.

Beispiel mit Namensraum

{{#invoke:NeoWikiLink|link|Urwerk|subject=sF1Bf9yXAGnAwj1|namensraum=Werk}}

-- Verlinkt NeoWiki-Feldwerte mit normalen Wikiseiten.
-- Aufruf: {{#invoke:NeoWikiLink|link|Urheber|subject=s...}}
-- Ohne subject/seite wird das Hauptsubjekt der aktuellen Seite gelesen.
local p = {}
local function trim(value)
    if value == nil then return nil end
    local result = mw.text.trim(tostring(value))
    if result == '' then return nil end
    return result
end

function p.link(frame)
    local args = frame.args
    local property = trim(args[1]) or trim(args.feld)
    if not property then
        error('NeoWikiLink: Feldname fehlt.', 0)
    end
    local nw = require('mw.neowiki')
    local options = {}
    options.subject = trim(args.subject) or trim(args.subjekt)
    options.page = trim(args.page) or trim(args.seite)
    local values = nw.getAll(property, options) or {}
    local prefix = trim(args.namensraum)
    local label = trim(args.anzeige)
    local links = {}
    for _, value in ipairs(values) do
        local text = trim(value)
        if text then
            local target = prefix and (prefix .. ':' .. text) or text
            -- Keine Daten als Wikitext oder externe Links interpretieren.
            if target:find('[%[%]{}|<>\n\r]') or target:sub(1, 1) == ':' then
                error('NeoWikiLink: Ungültiges Linkziel im Feld ' .. property .. '.', 0)
            end
            local title = mw.title.new(target)
            if not title or title.isExternal then
                error('NeoWikiLink: Ungültiger oder externer Seitentitel im Feld ' .. property .. '.', 0)
            end
            links[#links + 1] = '[[:' .. title.prefixedText .. '|' ..
                mw.text.nowiki(label or text) .. ']]'
        end
    end
    return table.concat(links, args.trenner or ', ')
end

return p