Modul:Bild

Version vom 1. Dezember 2025, 16:32 Uhr von HeikoBot (Diskussion | Beiträge) (weitere Bilder anzeigen optimiert)

Seiten-Übersicht

Zur Klasse Bild gehörende Seiten:
Hauptseite Unterseiten
Allgemein
Faktenbox Vorlagen
Formulare
Module
Abfrage Vorlagen


Formulare


Sonstige


Galerie()

Diese Funktion fügt via der {{Bilder dies...}}-Vorlagen, der {{Werke dies...}}-Vorlagen oder der {{Galerie|...}}-Vorlage alle zugehörigen Bilder in eine Artikelseite ein.

Parameter Überschrift rechts
attr (Frei-)Attribut-Name
val Attribut-Wert (optional, default ist {{PAGENAME}})
attr_zeige_nicht Zeige-Nicht-Attribut-Name
sort Sortier-Attribut der ask-Abfrage (optional, default ist Erstellungsdatum)
order Sortier-Reihenfolge der ask-Abfrage (optional, default ist desc)

Bilder diese... Seiten

Werke diese... Seiten

Nicht alle davon sind eine Bilder-Galerie!

Siehe auch


local p = {}

local com = require("Modul:Common")
local dev = require("Modul:Development")
local str = require("Modul:String")
local wik = require("Modul:Wiki")
local que = require("Modul:Queries")

local n_bilder_limit = 200
local abfrage = "Abfrage Bilder"												-- Formular/Vorlage-Seitenname ggf. mit "/Work"

function p.Galerie(frame)
--	mw.log("Galerie(frame)")
--	mw.logObject(frame, "frame")
	-- Kommando-Zeile zum Debuggen:
	-- frame=mw.getCurrentFrame(); frame.args={["attr"]="Person;Straße",["val"]="Karl Rothammel;Erlanger Straße",["attr_zeige_nicht"]="ZN",["sort"]="Seite",["order"]="asc"}; print(p.Galerie(frame))
	local t = ""
	
	-- Argumente holen und ggf. default setzen
	local args = wik.getArgs(frame.args, {"attr", "val", "attr_zeige_nicht", "sort", "order"})
	args.sort = args.sort or "Erstellungsdatum, Seite"
	args.order = args.order or "desc, asc"

	-- Seiten-Selektor
	local selector = ""
	local pagename = wik.pagename()
	args.attr = str.splitAndStrip(args.attr, ";")
	args.val = str.splitAndStrip(args.val or "", ";")
	args.attr_zeige_nicht = str.splitAndStrip(args.attr_zeige_nicht or "", ";")
	for i, a in ipairs(args.attr) do
		args.val[i] = args.val[i] or pagename
		if selector ~= "" then
			selector = selector .. " OR "
		end
		selector = selector .. 
			"[[Datei:+]][[Kategorie:Bilder]]" ..
			"[[" .. a .. "::" .. args.val[i] .. "]]"
		if args.attr_zeige_nicht[i] ~= nil then
			selector = selector .. "[[" .. args.attr_zeige_nicht[i] .. "::!Ja]]"
		end
	end
--	mw.logObject(selector, "selector")

	-- Bilder-Anzahl
	local n_bilder = mw.smw.ask(selector .. "|format=count")
	t = t .. "{{#set:Bilderanzahl=" .. n_bilder .. "}}"
	if n_bilder == 0 then
		t = t ..
			"Keine Bilder gefunden" ..
			"[[Kategorie:Seiten mit leeren Bilder-Galerien]]"
	else

		-- Abfrage-Link-Teile
		local queryformlink_part1 =
			"{{#queryformlink:" ..
			"form=" .. abfrage ..
			"|link text="
		local queryformlink_part2 =
			"|query string="
		for i, a in ipairs(args.attr) do
			queryformlink_part2 = queryformlink_part2 ..
				"&" .. abfrage .. "[attrname" .. i .. "]=" .. a ..
				"&" .. abfrage .. "[attrval" .. i .. "]=" .. args.val[i]
		end
		queryformlink_part2 = queryformlink_part2 ..
			"&" .. abfrage .. "[format]="
		local queryformlink_part3 =
			"&" .. abfrage .. "[bild1]="
		local queryformlink_part4 =
			"&" .. abfrage .. "[limit]="
		local queryformlink_part5 =
			"&" .. abfrage .. "[chron_order]=absteigend" ..
			"&" .. abfrage .. "[attr_op]=oder" ..
			"&_run}}"

		-- Bilder-Galerie und Abfrage-Links
		t = t ..
			"'''Bilder als " ..
			queryformlink_part1 .. "Galerie" .. -- link text
			queryformlink_part2 .. "Galerie" .. -- format
			queryformlink_part3 .. "1" .. -- erstes Bild
			queryformlink_part4 .. n_bilder_limit ..
			queryformlink_part5 .. " / " ..
			queryformlink_part1 .. "Tabelle" .. -- link text
			queryformlink_part2 .. "Tabelle" .. -- format
			queryformlink_part3 .. "1" .. -- erstes Bild
			queryformlink_part4 .. n_bilder_limit ..
			queryformlink_part5 ..
			" anzeigen, sortieren und filtern'''"..
			"{{#ask:" .. selector .. 
			"|?Dateiinfo" ..
			"|sort=" .. args.sort ..
			"|order=" .. args.order ..
			"|format=gallery" ..
			"|limit=" .. n_bilder_limit ..
			"|searchlabel=" ..
			"}}"
		if n_bilder > n_bilder_limit then
			t = t ..
				queryformlink_part1 .. "... weitere Bilder anzeigen" .. -- link text
				queryformlink_part2 .. "Galerie" .. -- format
				queryformlink_part3 .. (1) .. -- erstes Bild
				queryformlink_part4 .. 500 ..
				queryformlink_part5 ..
				"[[Kategorie:Seiten mit vollen Bilder-Galerien]]"
		end

	end -- if n_bilder == 0 then ... else ...

--	mw.logObject(t, "t")
	t = frame:preprocess(t)
	return t
end

function p.Abfrage(frame)
--	mw.log("Abfrage(frame)")
--	mw.logObject(Abfrage, "frame")
	-- Kommando-Zeile zum Debuggen:
	-- p.Galerie{pargs={["attr"]="Person;Straße",["val"]="Karl Rothammel;Erlanger Straße",["attr_zeige_nicht"]="ZN",["sort"]="Seite",["chron_order"]="absteigend"}}
	local t = ""

	local frame, pargs = dev.GetFrameAndParentArgs(frame)

	-- Selektor zusammenbauen
	local selector = "[[Datei:+]][[Kategorie:Bilder]]"
	if not com.isEmpty(pargs["Erstellungsdatum von"]) then
		selector = selector .. "[[Erstellungsdatum::>=" .. pargs["Erstellungsdatum von"] .. "]]"
	end
	if not com.isEmpty(pargs["Erstellungsdatum bis"]) then
		selector = selector .. "[[Erstellungsdatum::<=" .. que.dateLastDayCompleter(pargs["Erstellungsdatum bis"]) .. "]]"
	end
	if not com.isEmpty(pargs["Über Datum von"]) then
		selector = selector .. "[[ÜberDatum::>=" .. pargs["Über Datum von"] .. "]]"
	end
	if not com.isEmpty(pargs["Über Datum bis"]) then
		selector = selector .. "[[ÜberDatum::<=" .. que.dateLastDayCompleter(pargs["Über Datum bis"]) .. "]]"
	end
	if not com.isEmpty(pargs["Straße"]) then
		selector = selector .. "[[Straße::" .. que.uniFilter(pargs["Straße"]) .. "]]"
	end
	if not com.isEmpty(pargs["Ort"]) then
		selector = selector .. "[[Ort::" .. que.uniFilter(pargs["Ort"]) .. "]]"
	end
	if not com.isEmpty(pargs["Urheber"]) then
		selector = selector .. "[[Urheber::" .. que.uniFilter(pargs["Urheber"]) .. "]]"
	end
	if not com.isEmpty(pargs["Quellangaben"]) then
		selector = selector .. "[[Quellangaben::" .. que.uniFilter(pargs["Quellangaben"]) .. "]]"
	end
	if not com.isEmpty(pargs["Lizenz"]) then
		selector = selector .. "[[Lizenz::" .. que.uniFilter(pargs["Lizenz"]) .. "]]"
	end
	if not com.isEmpty(pargs["Signatur"]) then
		selector = selector .. "[[Signatur::" .. que.uniFilter(pargs["Signatur"]) .. "]]"
	end
	if not com.isEmpty(pargs["attrname1"]) and not com.isEmpty(pargs["attrval1"]) then
		local selector1 = "[[" .. pargs["attrname1"] .. "::" .. que.uniFilter(pargs["attrval1"]) .. "]]"
		if not com.isEmpty(pargs["attrname2"]) and not com.isEmpty(pargs["attrval2"]) then
			local selector2 = "[[" .. pargs["attrname2"] .. "::" .. que.uniFilter(pargs["attrval2"]) .. "]]"
			if pargs["attr_op"] == "und" then
				selector = selector .. selector1 .. selector2
			else
				selector = selector .. selector1 .. " OR " .. selector .. selector2
			end
		else
			selector = selector .. selector1
		end
	end

	-- Anzahl der Ergebnisse
	n = mw.smw.ask(selector .. "|format=count")
	t = t .. "'''Anzahl der Ergebnisse: " .. n .. "'''"
	if n == 0 then
		t = t .. "<br/>" ..
			"Es konnten keine Bilder mit diesen Vorgaben gefunden werden."
	else
		if not com.isEmpty(pargs["limit"]) and n > tonumber(pargs["limit"]) then
			local n_anzeige = n - (pargs["bild1"] or 1) + 1
			if n_anzeige > tonumber(pargs["limit"]) then
				n_anzeige = pargs["limit"]
			end
			t = t .. " (davon " .. n_anzeige .. " angezeigt)"
		end

		-- Die eigentliche Ergebnis-Anzeige
		t = t ..
			"{{#ask:" .. selector ..
			"|sort=Erstellungsjahr,Seite"
		if pargs["chron_order"] == "aufsteigend" then
			t = t .. "|order=asc,asc"
		else
			t = t .. "|order=desc,asc"
		end
		if pargs["format"] == "Tabelle" then
			t = t ..
				"|?Beschreibung|?Ort|?Straße|?Erstellungstag|?Erstellungsjahr|?Urheber|?Quellangaben|?Lizenz|?Signatur" ..
				"|mainlabel=Bild" ..
				"|format=table"
		else
			t = t ..
			"|?Dateiinfo" ..
			"|link=all" ..
			"|format=gallery" ..
			"|searchlabel=" -- erstmal kein "... weitere Ergebnisse anzeigen" => to do
		end
		if not com.isEmpty(pargs["limit"]) then
			t = t .. "|limit=" .. pargs["limit"]
		end
		if not com.isEmpty(pargs["bild1"]) then
			t = t .. "|offset=" .. ((tonumber(pargs["bild1"]) or 1) - 1)
		end
		t = t .. "}}"
	end

--	mw.logObject(t, "t")
	t = frame:preprocess(t)
	return t
end

return p