Modul:Blogpost
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