Модуль:CategoryForProfession

Используется в шаблонах о персоналиях.

Функции

эдер

Используется только одна функция — mainFunction. Она добавляет в статью категории профессий по алфавиту, и профессий по странам. Сами профессии, гражданства и академические степени берёт на викиданных.

Для использования данного модуля напишите: {{#invoke:CategoryForProfession|mainFunction}}

Функции данного модуля не предназначены для прямого вызова из шаблонов карточек или других модулей.

В параметре аңгылал чок= можно указать через точку с запятой перечень категорий которые нужно исключить.


local p = {}

local ListOfProfessions = mw.loadData('Модуль:ListOfProfessions')
local ListOfCountries = mw.loadData('Модуль:ListOfCountries')

local ProfessionsCategoryByAlphabet = {}
for k, v in pairs(ListOfProfessions) do
	ProfessionsCategoryByAlphabet[k] = '[[Аңгылал:Алфавиттээн ' .. v .. ']]'
end

local ProfessionsCategoriesByCountry = {}
local QQQ = {}
for i, j in pairs(ListOfCountries) do
	QQQ = {}
	for k, v in pairs(ListOfProfessions) do
		QQQ[k] = '[[Аңгылал:' .. v ..' ' .. j ..']]'
	end
	ProfessionsCategoriesByCountry[i] = QQQ
end

local function MakeGeneralCategories(professionsList, dict)
	local res = ''
	for i, prof in pairs(professionsList) do
		local cat=nil
		if(prof.mainsnak.datavalue) then -- если значение свойства "значение неизвестно", то datavalue nil
			id = 'Q' .. prof.mainsnak.datavalue.value['numeric-id']
			cat = dict[id];
		end
		if cat ~= nil then
			res = res .. cat;	
		end
	end
    return res
end

local function MakeCountriesCategories(countriesList, professionsList)
	local res = ''
	for i, cant in pairs(countriesList) do
		if cant.mainsnak.datavalue ~= nil then
			id = 'Q' .. cant.mainsnak.datavalue.value['numeric-id']
			local professionsCategories = ProfessionsCategoriesByCountry[id];
			if professionsCategories ~= nil then
				res = res .. MakeGeneralCategories(professionsList, professionsCategories);
			end
		end
	end
    return res
end

function p.mainFunction(frame)
	local result = ''
	local entity = mw.wikibase.getEntityObject()
	if entity ~= nil and entity.claims ~= nil then
		if entity.claims[ 'P106' ] ~= nil then
			professions = entity.claims[ 'P106' ]
			result = result .. MakeGeneralCategories(professions, ProfessionsCategoryByAlphabet)
			if entity.claims[ 'P27' ] ~= nil then
				countries = entity.claims[ 'P27' ]
				result = result .. MakeCountriesCategories(countries, professions)
			end
		end
		local args = {}
		if frame == mw.getCurrentFrame() then
			if frame.args['аңгылал чок'] == nil then
				frame = frame:getParent();
			end
			if frame ~= nil then
				args = frame.args;
			end
		else
			args = frame
		end
		-- исключаем ненужные категории указанные в параметре через точку с запятой
    	local excude = args['аңгылал чок'];
    	if excude ~= nil and excude ~= '' then
    		exclude = mw.text.split(excude, '%s*;%s*' )
			for i, v in ipairs(exclude) do 
				local cat = mw.ustring.gsub( v, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" ); -- маскируем спецсимволы
				result = mw.ustring.gsub(result, '%[%[Аңгылал:' .. cat .. '%]%]', '');	
			end
    	end;
	end
	return result
end

return p