Zum Inhalt springen

Modul:Blogpost

Aus Matrix of Time

Beschreibung

Das Modul Blogpost stellt Lua-Hilfsfunktionen für die Vorlage:Blogpost bereit. Es übernimmt Aufgaben, die im Wikitext-Vorlagensystem nur umständlich oder gar nicht realisierbar sind.

Funktionen

beschreibung

Kürzt einen Text auf maximal n Zeichen (Standard: 160). Der Schnitt erfolgt am letzten Wortende vor dem Limit; anschließend wird „…" angehängt. Wird intern für das WikiSEO-Tag description verwendet.

Parameter Typ Pflicht Beschreibung
text String ja Der zu kürzende Fließtext
laenge Zahl nein Maximale Zeichenanzahl (Standard: 160)

Beispiel:

{{#invoke:Blogpost|beschreibung|text=Langer Fließtext hier…|laenge=160}}

tags

Verarbeitet eine kommagetrennte Tag-Liste. Gibt für jeden Tag sowohl eine -Zuweisung als auch einen verlinkten aus, der auf die jeweilige Tag-Übersichtsseite verweist.

Parameter Typ Pflicht Beschreibung
tags String nein Kommagetrennte Tag-Liste, z. B. Technik, Reisen, Natur

Beispiel:

{{#invoke:Blogpost|tags|tags=Technik, Reisen}}

seoDescription

Funktional identisch mit beschreibung. Dient als semantisch klar benannte Einstiegsfunktion für den WikiSEO-Block in der Vorlage.

kanonischeURL

Gibt die vollständige URL der aktuellen Seite zurück. Wird für den WikiSEO-Parameter og:url verwendet.

Abhängigkeiten

  • Keine externen Module erforderlich
  • Wird ausschließlich von Vorlage:Blogpost aufgerufen

Wartung

Bei Änderungen an der Kategorie-Struktur der Tags muss die Funktion tags in diesem Modul angepasst werden (Zeile mit Kategorie:Blog-Tag:).


-- Module:Blogpost
-- Stellt Hilfsfunktionen für die Vorlage:Blogpost bereit.
-- Aufgaben: Text kürzen (Truncate), Tag-Verarbeitung, SEO-Aufbereitung.

local p = {}

--- Kürzt einen Text auf maximal `laenge` Zeichen.
-- Schneidet am letzten Leerzeichen vor dem Limit ab und hängt „…" an.
-- @param text  string  Der zu kürzende Text
-- @param laenge number  Maximale Zeichenanzahl (Standard: 160)
-- @return string
local function truncate(text, laenge)
    laenge = laenge or 160
    if not text or text == '' then
        return ''
    end
    -- Whitespace normalisieren
    text = text:gsub('%s+', ' '):match('^%s*(.-)%s*$')
    if mw.ustring.len(text) <= laenge then
        return text
    end
    local gekuerzt = mw.ustring.sub(text, 1, laenge)
    -- Am letzten Wortende abschneiden
    local letztes_leerzeichen = mw.ustring.find(gekuerzt, '%s[^%s]*$')
    if letztes_leerzeichen then
        gekuerzt = mw.ustring.sub(gekuerzt, 1, letztes_leerzeichen - 1)
    end
    return gekuerzt .. '…'
end

--- Gibt den gekürzten Text zurück (aufrufbar aus Vorlagen via #invoke).
-- @param frame  Frame-Objekt mit frame.args.text und optional frame.args.laenge
function p.beschreibung(frame)
    local args = frame.args
    local text = args.text or ''
    local laenge = tonumber(args.laenge) or 160
    return truncate(text, laenge)
end

--- Verarbeitet eine kommagetrennte Tag-Liste.
-- Gibt eine wikitextformatierte Liste von verlinkten Tags zurück.
-- @param frame  Frame-Objekt mit frame.args.tags
function p.tags(frame)
    local args = frame.args
    local tagstring = args.tags or ''
    if tagstring == '' then
        return ''
    end

    local result = {}
    for tag in tagstring:gmatch('[^,]+') do
        tag = tag:match('^%s*(.-)%s*$') -- trimmen
        if tag ~= '' then
            table.insert(result, '[[Kategorie:Blog-Tag:' .. tag .. ']]<span class="blog-tag">[[Blog:Übersicht/' .. tag .. '|' .. tag .. ']]</span>')
        end
    end
    return table.concat(result, ' ')
end

--- Gibt den gekürzten Introtext für WikiSEO zurück.
-- Identisch mit beschreibung, aber als eigenständige Funktion
-- für klarere Vorlage-Syntax.
function p.seoDescription(frame)
    local args = frame.args
    local text = args.text or ''
    local laenge = tonumber(args.laenge) or 160
    return truncate(text, laenge)
end

--- Gibt die kanonische URL des Blogposts zurück.
function p.kanonischeURL(frame)
    local titel = mw.title.getCurrentTitle()
    return tostring(titel:fullUrl())
end

return p