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