Модуль:Wikidata/iwikiQ
Данный модуль получает список интервик произвольной странцы по её идентификатору на Тептар данных.
Функции[править код]
iwiki[править код]
{{#invoke:Wikidata/iwikiQ|iwiki|Q12345|f=[[:$1:$2]]|s=", "|lang=}}
- Результат: Ошибка работы со страницей Тептар-данных Q12345 (Модуль:Wikidata/iwikiQ:21: attempt to index field 'wikibase' (a nil value))
Первый параметр или id
- id объекта Тептар данных, lang
или второй (необязательно) - язык интерТептар (эти параметры, если отсутствуют, могут браться из вызвавшего шаблона). Если есть параметр lang, выводится название статьи на данном языке без префикса (для подавления действия параметра вызвавшего шаблона введите в invoke пустой параметр lang).
Если параметр lang не задан или пуст, выводится список интервик. Каждый пункт списка форматируется по строке из параметра f
, по умолчанию : [[:$1:$2|({{#language:$1|ru}})]]
. При этом $1 будет заменяться на код языка, а $2 - на название страницы. Обратите внимание, что функции парсера надо передавать в тэге <nowiki>, иначе они сработают один раз и вряд ли правильно. Разделитель формируется параметром s
, по молчанию пустая строка. Если параметр s
содержит в начале или в конце пробелы, заключите его в " парные кавычки "
; если в начале или в конце стоят кавычки, ""продублируйте""
их.
local M={}
function M.iwiki(f)-- Интервики для указанного языка и указанной страницы (только с ВД)
local parent = f:getParent()
local lang = f.args.lang or f.args[2] or parent.args.lang or parent.args[2]
if lang == "" then
lang = nil
end
local id = f.args.id or f.args[1] or parent.args.id or parent.args[1]
local function try()
if lang then
return mw.wikibase.getEntityObject(id).sitelinks[lang..'wiki'].title
else-- список интервик
local r={}
local fg = f.args.f
if fg then
fg = mw.text.unstripNoWiki(fg)
else
fg = ": [[:$1:$2|({{#language:$1|ru}})]]"
end
for k,v in pairs( mw.wikibase.getEntityObject(id).sitelinks or {} ) do
if k:sub(-4)=="wiki" then
table.insert( r, mw.message.newRawMessage(fg):rawParams(k:sub(1,-5),v.title):plain() )
end
end
table.sort(r)
return f:preprocess( table.concat(r, (f.args.s or "\n"):gsub('^"(.*)"$',"%1"),nil) )
end
end
local r, result = pcall(try);
if r then
return result
else
return '<strong class="error">Ошибка работы со страницей Тептар-данных '..(id or mw.wikibase.getEntityIdForCurrentPage())..' ('..result..')</strong>';
end
end
return M