Modul:Sportskategorier
Dette Lua-modul bruges på ca. 15.000 sider, og derfor vil ændringer blive bemærket af mange. Vær venlig at afprøve enhver ændring i modulets /sandkasse eller /test-undersider, eller i din egen module sandkasse. Du bør også overveje at diskutere ændringer på diskussionssiden før du implementerer dem. |
Dette modul bruges af Skabelon:Sportskategorier til finde sætte kategorier for deltagelse på sportshold i artikler om sportsudøvere. Kategorierne findes ud fra oplysninger på Wikidata. Først bruges medlem af sportshold (P54) for at finde hvilke sportshold som personen er eller har været på, dernæst bruges kategori for sportsfolk på hold (P6112) for hvert af de fundne sportshold til at finde kategorien for deltagere på holdet.
Brug
Indgangsfunktionen er p.sportskategorier
. Brug {{#invoke:Sportskategorier|sportskategorier}}
i den kaldende skabelon.
Normalt bruges ingen parametre, men alle eventuelle parametre overføres automatisk fra den kaldende skabelon. Til testning kan bruges følgende parametre:
- q: Angiver wikiemne for sportsudøveren (Qxxxxxxxx). Standard er at bruge Wikiemnet-emnet som artiklen er knyttet til.
- test: Hvis denne parameter har værdien "ja", laves en liste med links til de fundne kategorier i stedet for at placere artiklen i kategorierne.
Sporingskategori
require('Modul:No globals')
local p = {}
local categories = {}
local addTrackingCategory = function(cat)
if cat == 'More than one member category' then
categories[#categories + 1] = '[[Kategori:Sportshold har mere end en medlemskategori angivet på Wikidata]]'
end
end
p.sportskategorier = function(frame)
local args = (frame == mw.getCurrentFrame()) and frame:getParent().args or frame.args
local qid = args.q ~= '' and args.q or mw.wikibase.getEntityIdForCurrentPage()
if not qid then
return
end
local teams = mw.wikibase.getAllStatements(qid, 'P54') -- P54 is 'member of sports team'
for _, team in pairs(teams) do
if team.mainsnak.snaktype == 'value' then
local teamID = team.mainsnak.datavalue.value.id
local cats = mw.wikibase.getBestStatements(teamID, 'P6112') -- P6112 is 'category for members of a team'
local catID = nil
for _, cat in pairs(cats) do
if cat.mainsnak.snaktype == 'value' then
if catID then
-- If already set, this is a duplicate category.
addTrackingCategory('More than one member category')
end
catID = cat.mainsnak.datavalue.value.id
local catLink = mw.wikibase.getSitelink(catID)
if catLink then
categories[#categories + 1] = '[[' .. catLink .. ']]'
end
end
end
end
end
if args.test == 'ja' then
-- Line breaks between categories. Add colons to links, and discard second return value from gsub
return (string.gsub(table.concat(categories, '<br/>'), '%[%[', '[[:'))
else
return table.concat(categories)
end
end
return p