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

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

-- Module:Infobox/Team
-- 팀 인포박스 + 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 shortname    = getArg( args, 'shortname', '약칭' )
	local founded      = getArg( args, 'founded', '창단' )
	local region       = getArg( args, 'region', '연고지' )
	local owner        = getArg( args, 'owner', '대표', '구단주' )
	local coach        = getArg( args, 'coach', '코치' )
	local captain      = getArg( args, 'captain', '팀장' )
	local roster       = getArg( args, 'roster', '로스터' )
	local totalprize   = getArg( args, 'totalprize', '총상금' )
	local links        = getArg( args, 'links', '외부 링크' )
	local championships = getArg( args, 'championships', '우승' )
	local image        = getArg( args, 'image', '이미지', '로고' )

	-- ===== 인포박스 렌더링 =====
	local infobox = InfoboxNeue:new()

	if image then
		infobox:renderImage( image )
	end

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

	-- 팀 정보 섹션
	local infoItems = {}

	table.insert( infoItems, infobox:renderItem( '창단', founded ) )
	table.insert( infoItems, infobox:renderItem( '약칭', shortname ) )
	table.insert( infoItems, infobox:renderItem( '연고지', region ) )
	table.insert( infoItems, infobox:renderItem( {
		label = '대표',
		data = owner,
		colspan = 2,
	} ) )
	table.insert( infoItems, infobox:renderItem( {
		label = '코치',
		data = coach,
		colspan = 2,
	} ) )
	table.insert( infoItems, infobox:renderItem( {
		label = '팀장',
		data = captain,
		colspan = 2,
	} ) )
	table.insert( infoItems, infobox:renderItem( {
		label = '로스터',
		data = roster,
		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

	local infoboxHtml = infobox:renderInfobox( nil, name )

	-- ===== SEO 설정 =====
	local seoTitle = name .. ' - 이터널리턴 팀'

	local kwItems = { '이터널리턴', 'Eternal Return', name }
	if shortname then table.insert( kwItems, shortname ) end
	table.insert( kwItems, '팀' )
	table.insert( kwItems, '프로팀' )
	table.insert( kwItems, '이스포츠' )

	-- 로스터에서 선수명 키워드 추출
	if roster then
		for playerName in mw.ustring.gmatch( roster, '%[%[([^%]|]+)' ) do
			local trimmed = mw.text.trim( playerName )
			if trimmed ~= '' then
				table.insert( kwItems, trimmed )
			end
		end
	end

	-- 중복 제거
	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 shortname then desc = desc .. ' (' .. shortname .. ')' 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