Modul:Faktenbox/Tabs/Adressen: Unterschied zwischen den Versionen
(Überarbeitung, + Sortierung Geburtshaus/ort und Letzter Wohnort) |
(Kommentar) |
||
| (6 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 32: | Zeile 32: | ||
["AdresseBis"] = { querypostfix = "", default = ""}} | ["AdresseBis"] = { querypostfix = "", default = ""}} | ||
-- DB-Abfrage | -- SMW-DB-Abfrage | ||
local query = "[[-Has subobject::".. fbdata.fullpagename .. "]][[SubObjektTyp::Adresse]]|?#-|limit=100" | local query = "[[-Has subobject::".. fbdata.fullpagename .. "]][[SubObjektTyp::Adresse]]|?#-|limit=100" | ||
for i, a in pairs(attr) do | for i, a in pairs(attr) do | ||
| Zeile 39: | Zeile 39: | ||
local addresses = mw.smw.ask(query) | local addresses = mw.smw.ask(query) | ||
if addresses ~= nil then | if addresses ~= nil then -- Adressen vorhanden? | ||
-- defaults setzen fehlender Attribute | -- defaults setzen fehlender Attribute | ||
| Zeile 79: | Zeile 79: | ||
end | end | ||
if e["AdresseVon"] ~= "" then | if e["AdresseVon"] ~= "" then | ||
if e["AdresseBis"] | if e["AdresseBis"] == "" then | ||
table.insert(bracket, "seit") | |||
table.insert(bracket, "seit " | |||
end | end | ||
table.insert(bracket, lfd.formatDate(e["AdresseVon"])) | |||
end | end | ||
if e["AdresseBis"] ~= "" then | if e["AdresseBis"] ~= "" and e["AdresseBis"] ~= e["AdresseVon"] then | ||
if e["AdresseVon"] ~= "" then | if e["AdresseVon"] ~= "" then | ||
table.insert(bracket, "- " | table.insert(bracket, "-") | ||
else | else | ||
table.insert(bracket, "bis " | table.insert(bracket, "bis") | ||
end | end | ||
table.insert(bracket, lfd.formatDate(e["AdresseBis"])) | |||
end | end | ||
if #bracket > 0 then | if #bracket > 0 then | ||
| Zeile 97: | Zeile 97: | ||
t = t .. "\n" | t = t .. "\n" | ||
end | end | ||
end | |||
end -- Ende if Adressen vorhanden | |||
-- Tab draus machen | -- Tab draus machen | ||
| Zeile 106: | Zeile 107: | ||
function p.sortIndex(address) | function p.sortIndex(address) | ||
local von_sort_index = p.smwDate2SortIndex(address["AdresseVon"]) | -- mw.log("sortIndex(address)") | ||
local bis_sort_index = p.smwDate2SortIndex(address["AdresseBis"]) | -- mw.logObject(address) | ||
-- Datums-Index holen | |||
local von_sort_index = p.smwDate2SortIndex(address["AdresseVon"], "von") | |||
local bis_sort_index = p.smwDate2SortIndex(address["AdresseBis"], "bis") | |||
-- Ggf. Index von Geburtshaus/-ort setzen | -- Ggf. Index von Geburtshaus/-ort setzen | ||
-- ganz nach vorne => höchste Prio = -99999999 | -- ganz nach vorne => höchste Prio = -99999999 | ||
| Zeile 129: | Zeile 133: | ||
bis_sort_index = 77777777 | bis_sort_index = 77777777 | ||
end | end | ||
-- Übernahme fehlender Index von | |||
-- Übernahme fehlender Index von | elseif von_sort_index == 0 and bis_sort_index ~= 0 then | ||
von_sort_index = bis_sort_index | von_sort_index = bis_sort_index | ||
-- Übernahme fehlender Index bis | |||
elseif bis_sort_index == 0 and von_sort_index ~= 0 then | |||
bis_sort_index = von_sort_index | bis_sort_index = von_sort_index | ||
-- Korrektur von > bis | |||
elseif von_sort_index > bis_sort_index then | |||
von_sort_index = bis_sort_index -- den kleineren übernehmen | |||
end | end | ||
-- mw.log(von_sort_index .. " - " .. bis_sort_index) | |||
return von_sort_index, bis_sort_index | return von_sort_index, bis_sort_index | ||
end | end | ||
function p.smwDate2SortIndex(date) | function p.smwDate2SortIndex(date, vonbis) | ||
-- mw.log("smwDate2SortIndex(" .. date .. ")") | -- mw.log("smwDate2SortIndex(" .. date .. ")") | ||
-- Datum in Index wandeln | -- Datum in Index wandeln | ||
| Zeile 150: | Zeile 157: | ||
local sort_index = "" | local sort_index = "" | ||
local date=str.split2(date, " ") | local date=str.split2(date, " ") | ||
if #date == 1 then | if #date == 1 then -- nur Jahr vorhanden | ||
sort_index = tostring(date[1]) .. " | sort_index = tostring(date[1]) | ||
elseif #date == 2 then | if vonbis == "von" then | ||
sort_index = tostring(date[2]) .. string.format("%02d", com.getMonthnr(date[1])) .. " | sort_index = sort_index .. "9999" | ||
elseif #date == 3 then | else | ||
sort_index = sort_index .. "0000" | |||
end | |||
elseif #date == 2 then -- nur Monat + Jahr vorhanden | |||
sort_index = tostring(date[2]) .. string.format("%02d", com.getMonthnr(date[1])) | |||
if vonbis == "von" then | |||
sort_index = sort_index .. "99" | |||
else | |||
sort_index = sort_index .. "00" | |||
end | |||
elseif #date == 3 then -- komplettes Datum vorhanden | |||
sort_index = tostring(date[3]) .. string.format("%02d",com.getMonthnr(date[2])) .. string.format("%02d", tonumber(string.match(date[1], "%d*"))) | sort_index = tostring(date[3]) .. string.format("%02d",com.getMonthnr(date[2])) .. string.format("%02d", tonumber(string.match(date[1], "%d*"))) | ||
end | end | ||
Aktuelle Version vom 6. November 2025, 09:36 Uhr
Seiten-Übersicht
| Hauptseite | Unterseiten | ||
|---|---|---|---|
| Allgemein | |||
| Faktenbox | Vorlagen | ||
| Formulare |
|
||
| Module | |||
| Abfrage | Vorlagen |
| |
| Formulare |
| ||
| Sonstige | |||
Dieses Modul enthält gemeinsame Funktionen, um eine Faktenbox zu füllen
Funktionen Modul:Faktenbox
Faktenbox()
Universelle Faktenbox ohne Formular/Klasse/Gebäude. Sie kann als zusätzliche Faktenboxen auf einer Seite eingebaut werden ähnlich Vorlage:Tabbox. Sie setzt ebenso Attribute wie die regulären Faktenboxen z.B. von Gebäuden, Straßen, Personen usw.
Funktionen Modul:Faktenbox/Tabs
universalDatenTab()
Universeller Daten-Tab zeigt alle seine übergebenen Parameter außer die für Karte und Bild an.
bildTab()
Selbsterklärend...
benennungenTab()
Tab mit Liste der Benennungen.
tab()
Vervollständigt Tab-Inhalt zu einem Tab.
Funktionen Modul:Faktenbox/Tabs/Karte
kartenTab()
Selbsterklärend...
getKartenArgs()
Karten-Argumente übernehmen und aufbereiten.
Funktionen Modul:Faktenbox/Tabs/Adressen
adressenTab()
Tab mit Liste der Adressen. Die Adressen werden bestmöglich chronologisch aufsteigend sortiert.
p.sortIndex() und p.smwDate2SortIndex()
Erstellen Sortierindizes anhand Datum und Schlüsselwörtern (z.B. Geburtshaus ganz oben) für chronologische Sortierung.
Funktionen Modul:Faktenbox/Zeilen
zeileKategorieSeite()
Diese Zeile ist die oberste Zeile eines Daten-Tabs, welche nochmal den Namen des Objekts und einen Link zur Klassen-Kategorie anzeigt und das Attribut:Seite setzt.
zeileStrasseHnr()
Wie zeile(attr, attrText, val), aber speziell ausgrichtet, um Attribut:Straße, Attribut:Hausnummer, Attribut:StraßeHnr und Attribut:AnzahlGebäude zu setzen und anzuzeigen.
zeileAktenNr()
Wie zeile(attr, attrText, val), aber speziell ausgrichtet, um Attribut:AktenNr zu setzen und anzuzeigen.
Die AktenNr werden als Query-Link und mit Seitenanzahl mit dieser AktenNr angezeigt.
zeileGeoDaten()
Zeile um alle Attribut:Geokoordinaten mit OSM-Link und die Attribut:GeoJson-Karte zu anzuzeigen.
zeileDatum()
Zeile um ein Datum standardisiert per linkFormDate() anzuzeigen.
zeileSemantikBrowsenAbfrage()
Zeile mit Link zum semantischen Browsen (Datensicht) und zur Abfrage.
zeile()
Standard-Zeile um ein Attribut zu setzen und anzuzeigen. Wenn es sich beim Attribut-Wert um eine Liste mit mehreren Elementen handelt, wird vom Attribut-Anzeigetext automatisch die Mehrzahl gebildet.
| Parameter | Beschreibung |
|---|---|
attr_name |
Attribut-Name |
attr_text |
Optionaler Attribut-Anzeigetext. Default: attr_name. Siehe auch attr_text_anzeige
|
attr_val |
Attribut-Wert. Wenn nicht übergeben, werden die von der #invoke:-Vorlage übergegebenen Parameter (fbdata.pargs) verwendet.
|
fbdata |
fbdata-Daten-table mit von der #invoke:-Vorlage übergegebenen Parameter (fbdata.pargs).
|
delimiter |
Trennzeichen bei Werte-Listen. Bei Nicht-Übergabe wird Attribut-Wert auch nicht als Liste behandelt. |
val_prefix |
Attribut-Wert-Prefix z.B. "ca." |
val_postfix |
Attribut-Wert-Postfix z.B. "km" |
val_show_only |
Attribut-Wert nur anzeigen, aber nicht setzen |
setPageAttr()
Setzen eines Attributs vom Datentyp Seite in folgender Prüf- und Setzreihenfolge:
- Wenn
valproblematische Wikitext/HTML-Inhalte enthält, dann wirdval1:1 angezeigt und ggf. gerendert (nicht innerhalb[[Attribut::Wert]])- Attribut
namemitvalper{{#set:Attribut=Wert}}unsichtbar im Hintergrund gesetzt, auch wenn das Verarbeitungsfehler provoziert (gewollt)
- Ansonsten wenn
valals Seite existiert, wird diese 1:1 gesetzt und angezeigt ([[Attribut::Wert]]) - Ansonsten wenn
valKlammerungen am Anfang oder am Ende enthält (Beispiel: "(BlaBlub) Rathaus (BlaBla)"), wird geprüft, ob eine Seite ohne die Klammerungen (also Rathaus) existiert. Wenn ja, wird "(BlaBlub) Rathaus (BlaBla)" angezeigt und das Attribut mit nur "Rathaus" gesetzt. - Ansonsten wird
val1:1 angezeigt und ggf. gerendert (nicht innerhalb[[Attribut::Wert]])- Attribut
namemitvalper{{#set:Attribut=Wert}}unsichtbar im Hintergrund gesetzt, auch wenn das Verarbeitungsfehler provoziert (gewollt)
setStandardAttr()
Setzen eines Standard-Attributs (nicht Datentyp Seite). Klammerwerte werden optional abgetrennt und Attribut-Wert wird optional nur angezeigt, aber nicht gesetzt.
Funktionen Modul:Faktenbox/Common
common()
Sonstige gemeinsame Dinge anfügen
- Klasse
- Formular
- Kategorien
- Wartung
fbdata()
Erstellt Faktenbox-Daten-Tabelle.
fbdata-Daten-table
Um die Parameter-Übergabe zu obigen Funktionen zu vereinfachen wird die fbdata-Daten-table verwendet, in der folgende Daten abgelegt werden:
fbdata.frame=framevonFaktenbox(frame)fbdata.pargs=frame:getParent().args. Beispiel:fbdata.pargs["Ehemals"]oderfbdata.pargs.Ehemalsfbdata.klasseKlassen-table. Beispiel Kirche:fbdata.klasse = {"Kirche", "Gebäude"}("Kirche" ist primäre und "Gebäude" sekundäre Klasse)fbdata.kategorieKategorien-table. Beispiel Kirche:fbdata.kategorie = {"Kirchen", "Gebäude"}("Kirchen" ist primäre und "Gebäude" sekundäre Kategorie)fbdata.kategorie_einzahlEinzahl-Kategorien-table als Alternative zufbdata.klasse. Beispiel Kirche:fbdata.kategorie_einzahl = {"Kirche", "Gebäude"}("Kirche" ist primäre und "Gebäude" sekundäre Kategorie)fbdata.formularFormular- Pagesnames
frame.fullpagenameframe.pagenameframe.subpagename
frame.strasse_hnrUntertabelle für Straße/Hausnummer-Datenframe.strasse_hnr.strasseUntertabelle für Straßenframe.strasse_hnr.strasse.nameStraßennameframe.strasse_hnr.strasse.hausnummerHausnummern-table dieser Straßeframe.strasse_hnr.strasse.suspektSuspekte Formular-Werte dieser Straße
frame.strasse_hnr.suspektSuspekte Formular-Werte aller Straßenframe.strasse_hnr.anzahlGebaeudeAnzahl aller gültigen Straße/Hausnummer-Kombinationen
- Ggf. weitere Klassen-abhängige Einträge
attr_text_anzeige
Sofern kein attr_text angegeben, wird i. A. attr_name angezeigt.
Jedoch wird bei manchen attr_name-Attributen stattdessen automatisch die ausgeschriebene Version angezeigt.
Beispiel: Beim Attribut:TeilDesEnsembles wird anhand der table attr_text_anzeige "Teil des Ensembles" angezeigt.
Diese Übersetzung von attr_name zur Anzeige-Version ist in attr_text_anzeige abgelegt und erfolgt global bei allen Faktenboxen.
Unterseiten
Siehe auch
local p = {}
local com = require("Modul:Common")
local str = require("Modul:String")
local wik = require("Modul:Wiki")
local que = require("Modul:Queries")
local lfd = require("Modul:LinkFormDatum")
local fab_tabs = require("Modul:Faktenbox/Tabs")
function p.adressenTab_(fbdata)
-- mw.log("adressenTab_()")
-- mw.logObject(fbdata)
-- Konsolenzeile zum Debuggen:
-- =p.adressenTab_({fullpagename="Jakob Bock"})
-- =p.adressenTab_({fullpagename="Ludwig Erhard"})
-- =p.adressenTab_({fullpagename="Druck & Kopie Hartmann KG"})
-- =p.adressenTab_({fullpagename="Rathaus"})
-- =p.adressenTab_({fullpagename="E-Tankstelle Hochstraße"})
-- =p.adressenTab_({fullpagename="Jakob Wassermann"})
-- =p.adressenTab_({fullpagename="Hedwig Gellinger"})
local t = ""
-- Attribute-Liste
local attr = {
["Adressart"] = { querypostfix = "", default = ""},
["Straße"] = { querypostfix = "#-", default = ""},
["Hausnummer"] = { querypostfix = "", default = 0},
["StraßeHnr"] = { querypostfix = "#-", default = ""},
["VonObjekt"] = { querypostfix = "#-", default = ""},
["AdresseVon"] = { querypostfix = "", default = ""},
["AdresseBis"] = { querypostfix = "", default = ""}}
-- SMW-DB-Abfrage
local query = "[[-Has subobject::".. fbdata.fullpagename .. "]][[SubObjektTyp::Adresse]]|?#-|limit=100"
for i, a in pairs(attr) do
query = query .. "|?" .. i .. a.querypostfix
end
local addresses = mw.smw.ask(query)
if addresses ~= nil then -- Adressen vorhanden?
-- defaults setzen fehlender Attribute
for i, _ in pairs(addresses) do
for j, a in pairs(attr) do
addresses[i][j] = addresses[i][j] or a.default
end
end
-- Chronologische Sortierung
if #addresses > 1 then
-- Sortier-Indizes setzen
for i, _ in pairs(addresses) do
addresses[i].von_sort_index, addresses[i].bis_sort_index = p.sortIndex(addresses[i])
end
-- Tabelle sortieren
table.sort(addresses, function(a1, a2) return a1.bis_sort_index < a2.von_sort_index end)
end
-- Liste erstellen
t = t .. "<nowiki></nowiki>\n" -- nötig, warum auch immer, damit erster Listeeintrag richtig gerendert wird
for _, e in ipairs(addresses) do
t = t .. "* '''" -- Zeilenanfang Liste
-- Straße/Hausnummer ausgeben
if wik.pageExists(e["StraßeHnr"]) then -- Link zu Einzel-Gebäude-Seite
t = t .. "[[" .. e["StraßeHnr"] .. "]]"
elseif wik.pageExists(e["VonObjekt"]) then -- alternativ Link zu Gebäude-Komplex-Seite
t = t .. "[[" .. e["VonObjekt"] .. "|" .. e["StraßeHnr"] .. "]]"
elseif wik.pageExists(e["Straße"]) then -- alternativ Link zu Straße-Seite
t = t .. "[[" .. e["Straße"] .. "]] " .. tostring(e["Hausnummer"])
else
t = t .. "" .. e["StraßeHnr"] .. "" -- alternativ nur fetter Text
end
t = t .. "'''"
-- Zusatzinfos in Klammern anfügen
local bracket = {}
if e["Adressart"] ~= "" then
table.insert(bracket, e["Adressart"])
end
if e["AdresseVon"] ~= "" then
if e["AdresseBis"] == "" then
table.insert(bracket, "seit")
end
table.insert(bracket, lfd.formatDate(e["AdresseVon"]))
end
if e["AdresseBis"] ~= "" and e["AdresseBis"] ~= e["AdresseVon"] then
if e["AdresseVon"] ~= "" then
table.insert(bracket, "-")
else
table.insert(bracket, "bis")
end
table.insert(bracket, lfd.formatDate(e["AdresseBis"]))
end
if #bracket > 0 then
t = t .. " (" .. table.concat(bracket, " ") ..")"
end
t = t .. "\n"
end
end -- Ende if Adressen vorhanden
-- Tab draus machen
t = fab_tabs.tab_(t, "Adressen")
-- mw.log("t = " .. t)
return t
end
function p.sortIndex(address)
-- mw.log("sortIndex(address)")
-- mw.logObject(address)
-- Datums-Index holen
local von_sort_index = p.smwDate2SortIndex(address["AdresseVon"], "von")
local bis_sort_index = p.smwDate2SortIndex(address["AdresseBis"], "bis")
-- Ggf. Index von Geburtshaus/-ort setzen
-- ganz nach vorne => höchste Prio = -99999999
if string.find(address["Adressart"], "Geburt") == 1 then -- beginnt mit "Geburt"
von_sort_index = -99999999
end
-- Ggf. Index von "Letzter Wohnort" (nicht unbedingt Fürth!) setzen
-- ganz nach hinten => niedrigste Prio = 99999999
if address["Adressart"] == "Letzter Wohnort" then -- exakte Übereinstimmung
von_sort_index = 99999999
bis_sort_index = 99999999
-- Ggf. Index von fehlenden von/bis setzen
-- wenn fehlt, ganz nach hinten (aber vor "Letzter Wohnort") => drittniedrigste Prio = 77777777
-- "Letzter Wohnort" => zweitniedrigste Prio = 88888888
elseif von_sort_index == 0 and bis_sort_index == 0 then
if string.find(address["Adressart"], "Letzter Wohnort") == 1 then -- beginnt mit "Letzter Wohnort"
von_sort_index = 88888888
bis_sort_index = 88888888
else
von_sort_index = 77777777
bis_sort_index = 77777777
end
-- Übernahme fehlender Index von
elseif von_sort_index == 0 and bis_sort_index ~= 0 then
von_sort_index = bis_sort_index
-- Übernahme fehlender Index bis
elseif bis_sort_index == 0 and von_sort_index ~= 0 then
bis_sort_index = von_sort_index
-- Korrektur von > bis
elseif von_sort_index > bis_sort_index then
von_sort_index = bis_sort_index -- den kleineren übernehmen
end
-- mw.log(von_sort_index .. " - " .. bis_sort_index)
return von_sort_index, bis_sort_index
end
function p.smwDate2SortIndex(date, vonbis)
-- mw.log("smwDate2SortIndex(" .. date .. ")")
-- Datum in Index wandeln
-- Bsp.: 23 Apr. 1989 => 19890423
-- Konsolenzeile zum Debuggen:
-- =p.smwDate2SortIndex("2000")
-- =p.smwDate2SortIndex("Februar 2000")
-- =p.smwDate2SortIndex("3. Februar 2000")
local sort_index = ""
local date=str.split2(date, " ")
if #date == 1 then -- nur Jahr vorhanden
sort_index = tostring(date[1])
if vonbis == "von" then
sort_index = sort_index .. "9999"
else
sort_index = sort_index .. "0000"
end
elseif #date == 2 then -- nur Monat + Jahr vorhanden
sort_index = tostring(date[2]) .. string.format("%02d", com.getMonthnr(date[1]))
if vonbis == "von" then
sort_index = sort_index .. "99"
else
sort_index = sort_index .. "00"
end
elseif #date == 3 then -- komplettes Datum vorhanden
sort_index = tostring(date[3]) .. string.format("%02d",com.getMonthnr(date[2])) .. string.format("%02d", tonumber(string.match(date[1], "%d*")))
end
sort_index = tonumber(sort_index) or 0
-- mw.log("sort_index = " .. tostring(sort_index))
return sort_index
end
return p