모듈:Infobox/Team
이터널 리턴 이스포츠 위키
다른 명령
이 모듈에 대한 설명문서는 모듈: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