메뉴 여닫기
436
320
90
23K
이터널 리턴 이스포츠 위키
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

이 모듈에 대한 설명문서는 모듈:Infobox/Player/설명문서에서 만들 수 있습니다

-- Module:Infobox/Player
-- 선수 인포박스 + SEO 메타태그 통합 모듈

local p = {}
local InfoboxNeue = require( 'Module:InfoboxNeue' )

local function getArg( args, ... )
	for _, key in ipairs( { ... } ) do
		local val = args[key]
		if val and val ~= '' then
			return mw.text.trim( val )
		end
	end
	return nil
end

function p.main( frame )
	local args = frame:getParent().args

	-- 파라미터 추출
	local name       = getArg( args, 'name', '선수명' ) or mw.title.getCurrentTitle().text
	local realname   = getArg( args, 'realname', '본명' )
	local birthday   = getArg( args, 'birthday', '출생' )
	local ingame     = getArg( args, 'ingame', '인게임' )
	local links      = getArg( args, 'links', '외부 링크' )
	local team       = getArg( args, 'team', '소속' )
	local characters = getArg( args, 'characters', '주 실험체' )
	local totalprize    = getArg( args, 'totalprize', '총상금' )
	local image         = getArg( args, 'image', '이미지' )
	local championships = getArg( args, 'championships', '우승' )
	local mvp           = getArg( args, 'mvp', 'MVP' )
	local finals        = getArg( args, 'finals', '파이널' )
	-- ===== 인포박스 렌더링 =====
	local infobox = InfoboxNeue:new()

	-- 이미지
	if image then
		infobox:renderImage( image )
	end

	-- 헤더
	infobox:renderHeader( {
		title = name,
		subtitle = realname,
	} )

	-- 기본 정보 섹션
	local infoItems = {}

	table.insert( infoItems, infobox:renderItem( '본명', realname ) )
	table.insert( infoItems, infobox:renderItem( '출생', birthday ) )
	table.insert( infoItems, infobox:renderItem( {
		label = '인게임',
		data = ingame,
		colspan = 2,
	} ) )
	table.insert( infoItems, infobox:renderItem( {
		label = '소속',
		data = team,
		colspan = 2,
	} ) )
	table.insert( infoItems, infobox:renderItem( {
		label = '주 실험체',
		data = characters,
		colspan = 2,
	} ) )
	table.insert( infoItems, infobox:renderItem( {
		label = '총상금',
		data = totalprize or frame:expandTemplate{ title = 'TotalPrize' },
		colspan = 2,
	} ) )
	table.insert( infoItems, infobox:renderItem( {
		label = '외부 링크',
		data = links,
		colspan = 2,
	} ) )

	infobox:renderSection( {
		title = '선수 정보',
		col = 2,
		content = infoItems,
	} )

	-- 우승 섹션
	if championships then
		infobox:renderSection( {
			title = '우승',
			col = 1,
			content = { infobox:renderItem( { data = championships, colspan = 2 } ) },
		} )
	end

	-- MVP 섹션
	if mvp then
		infobox:renderSection( {
			title = 'MVP',
			col = 1,
			content = { infobox:renderItem( { data = mvp, colspan = 2 } ) },
		} )
	end

	-- 파이널 진출 섹션
	if finals then
		infobox:renderSection( {
			title = '파이널 진출',
			col = 1,
			content = { infobox:renderItem( { data = finals, colspan = 2 } ) },
		} )
	end

	local infoboxHtml = infobox:renderInfobox( nil, name )

	-- ===== SEO 설정 =====
	local seoTitle
	if realname then
		seoTitle = name .. ' (' .. realname .. ') - 이터널리턴 선수'
	else
		seoTitle = name .. ' - 이터널리턴 선수'
	end

	local kwItems = { '이터널리턴', 'Eternal Return', name }
	if realname then table.insert( kwItems, realname ) end

	-- 소속 팀에서 링크 구문 제거하여 키워드 추출
	if team then
		for teamName in mw.ustring.gmatch( team, '%[%[([^%]|]+)' ) do
			local trimmed = mw.text.trim( teamName )
			if trimmed ~= '' then
				table.insert( kwItems, trimmed )
			end
		end
	end

	table.insert( kwItems, '선수' )
	table.insert( kwItems, '프로게이머' )
	table.insert( kwItems, '이스포츠' )

	-- 중복 제거
	local seen = {}
	local keywords = {}
	for _, item in ipairs( kwItems ) do
		if item ~= '' and not seen[item] then
			seen[item] = true
			table.insert( keywords, item )
		end
	end

	local desc = name
	if realname then desc = desc .. ' (' .. realname .. ')' end
	desc = desc .. ' 이터널리턴 선수 프로필, 대회 성적, 통계 정보.'

	mw.ext.seo.set( {
		title = seoTitle,
		title_mode = 'replace',
		keywords = table.concat( keywords, ', ' ),
		description = desc,
		locale = 'ko_KR',
		type = 'article',
	} )

	return infoboxHtml
end

return p