Modül:Futbol takımı kadrosu
Görünüm
Kullanımı
[kaynağı düzenle]Örnek
[kaynağı düzenle]{{#switch:{{{1}}}
|{{#invoke:Futbol takımı kadrosu|kadro
|takım_adı=Beşiktaş (futbol takımı)
|başlık=Beşiktaş JK
|kenarrengi=Silver
|metinrengi=white
|zeminrengi=black
|şablon_adı=Beşiktaş (futbol takımı) kadrosu
|teknik_direktör=[[Ole Gunnar Solskjær|Solskjær]]
|güncelleme=10 Şubat 2025
|type={{{1|2}}}
|numara_2={ad=[[Jonas Svensson]],pozisyon=DF,ülke=NOR}
|numara_20={ad=[[Necip Uysal]],pozisyon=MF,ülke=TUR,kaptan=1}
|numara_34={ad=[[Mert Günok]],pozisyon=GK,ülke=TUR,kaptan=2}
|numara_77={ad=[[Gökhan Gönül]],pozisyon=DF,ülke=NOR,kiralık=[[Fenerbahçe (futbol takımı)|Fenerbahçe]]'den}
|numara_6={ad=[[Josef de Souza]],pozisyon=MF,ülke=BRA,soyad=de Souza}
|numara_bilinmeyen={
{ad=[[Kartal Kayra Yılmaz]],pozisyon=MF,ülke=TUR},
{ad=[[El-Musrati]],pozisyon=MF,ülke=LBY}
}
}}
}}
Sonuç: Şablon:Futbol takımı kadrosu Şablon:Güncellendi Şablon:Futbol takımı kadrosu-başlangıç Şablon:Futbol takımı kadrosu-oyuncu Şablon:Futbol takımı kadrosu-oyuncu Şablon:Futbol takımı kadrosu-oyuncu Şablon:Futbol takımı kadrosu-oyuncu Şablon:Futbol takımı kadrosu-orta Şablon:Futbol takımı kadrosu-oyuncu Şablon:Futbol takımı kadrosu-oyuncu Şablon:Futbol takımı kadrosu-oyuncu Şablon:Futbol takımı kadrosu-son
Parametreler
[kaynağı düzenle]|takım_adı=
|başlık=
|kenarrengi=
|metinrengi=
|zeminrengi=
|şablon_adı=
|teknik_direktör=
|güncelleme=
|notgizle=
|type={{{1|2}}}
|numara_?={ad=,pozisyon=,ülke=,kiralık=(opsiyonel),kaptan=(1,2,3... opsiyonel)}
|numara_bilinmeyen={
{ad=,pozisyon=,ülke=}
}
local p = {}
function p.kadro(frame)
local Args = frame.args
local ii_start = tonumber(Args['highest_pos']) or 1
local N_players = ii_start - 1
local t = {}
local player_list = {}
local last_names_count = {} -- To track duplicate last names
local unknown_players = {}
-- Read team details
local team_name = Args['team_name'] or Args['takım_adı']
local title = Args['title'] or Args['başlık'] or team_name or ''
local back_color = Args['back_color'] or Args['zeminrengi'] or ''
local text_color = Args['text_color'] or Args['metinrengi'] or ''
local side_color = Args['side_color'] or Args['kenarrengi'] or ''
local temp_name = Args['temp_name'] or Args['şablon_adı'] or (team_name and (team_name .. ' kadrosu') or '') or ''
local coach_name = Args['coach_name'] or Args['teknik_direktör'] or ''
local update = Args['update'] or Args['güncelleme']
local typetemp = tonumber(Args['type']) or tonumber(Args['tip']) or 0
local hideNote=Args['notgizle'] or Args['hideNote'] or ''
if title ~= '' then
title=mw.ustring.match(title, "^([^%(]*)")
end
local function new_playerFormatParse(param_value,number)
-- Check if it's in the new format by looking for patterns like name=
if type(param_value) == "string" and (param_value:find("name=") or param_value:find("ad=")) then
-- Parse the parameter string to extract components
local name = param_value:match("name=([^,}]+)") or param_value:match("ad=([^,}]+)")
local position = param_value:match("position=([^,}]+)") or param_value:match("pozisyon=([^,}]+)")
local country = param_value:match("country=([^,}]+)") or param_value:match("ülke=([^,}]+)")
local loan = param_value:match("loan=([^,}]+)") or param_value:match("kiralık=([^,}]+)")
local use_fullname = param_value:match("fullname=([^,}]+)") or param_value:match("tamad=([^,}]+)")
local display_fullname=param_value:match("lastname=([^,}]+)") or param_value:match("soyad=([^,}]+)")
local captain=param_value:match("kaptan=([^,}]+)") or param_value:match("captain=([^,}]+)")
N_players = N_players + 1
player_list[N_players] = {
number = number,
name = name or "",
lname = "",
country = country or "",
position = position or "",
loan = loan,
use_fullname = use_fullname == "true" or use_fullname == "yes" or use_fullname == "evet",
captain=captain,
display_fullname=display_fullname or ""
}
end
end
-- Process players using both formats
for i = 0, 120 do -- Assuming 120 as a large enough limit for players
-- Check for new format: number_i={name=...,position=...,country=...}
if (Args['number_' .. i] or Args['numara_' .. i]) and not (Args['name_' .. i] or Args['ad_' .. i]) then
local param_value = Args['number_' .. i] or Args['numara_' .. i]
new_playerFormatParse(param_value,i)
-- Check for old format: name_i, position_i, country_i, etc.
elseif Args['name_' .. i] or Args['ad_' .. i] then
N_players = N_players + 1
player_list[N_players] = {
number = Args['number_' .. i] or Args['no_'..i] or Args['numara_'..i] or i,
name = Args['name_' .. i] or Args['ad_'..i] or "",
lname = Args['lname_' .. i] or Args['soyad_'..i] or "",
country = Args['country_' .. i] or Args['nat_'..i] or Args['ülke_'..i] or "",
position = Args['position_' .. i] or Args['pos_'..i] or Args['pozisyon_'..i] or "",
loan = Args['loan_' .. i] or Args['kiralık_'..i],
use_fullname = Args['fullname_' .. i] == "true" or Args['fullname_' .. i] == "yes" or
Args['tamad_' .. i] == "evet" or Args['tamad_' .. i] == "true"
}
end
end
local u_players = Args['numara_bilinmeyen'] or Args['unknown_players']
if u_players then
for item in mw.text.gsplit(u_players, "},") do
table.insert(unknown_players, item .. "}")
end
end
for _, param_value in ipairs(unknown_players) do
new_playerFormatParse(param_value, '-')
end
-- Function to get first name initial
local function get_first_initial(name)
-- Remove wiki markup brackets if present
local clean_name = name:gsub("%[%[", ""):gsub("%]%]", "")
-- Handle pipe in wiki links
local pipe_pos = clean_name:find("|")
if pipe_pos then
clean_name = clean_name:sub(1, pipe_pos - 1)
end
-- Split the name and get the first initial
local first_word = clean_name:match("(%S+)")
if first_word then
return first_word:sub(1, 1) .. "."
end
return ""
end
-- Function to get full player name without wiki brackets
local function get_full_name(name)
-- Remove wiki markup brackets if present
local clean_name = name:gsub("%[%[", ""):gsub("%]%]", "")
-- Handle pipe in wiki links
local pipe_pos = clean_name:find("|")
if pipe_pos then
clean_name = clean_name:sub(1, pipe_pos - 1)
end
return clean_name
end
local function get_lastname(name)
local names = {}
local final_name
if name:find("%(") then
local position = name:find("%(")
local before_parenthesis = name:sub(1, position - 1):match("^%s*(.-)%s*$")
local sub_names = {}
for sub_name in before_parenthesis:gmatch("%S+") do
table.insert(sub_names, sub_name)
end
final_name = sub_names[#sub_names] or sub_names[1]
else
for name2 in name:gmatch("%S+") do
table.insert(names, name2)
end
final_name = names[#names]
end
final_name = final_name:gsub("%[%[", ""):gsub("%]%]","")
return (final_name)
end
local function get_player_name(name)
local pipe_position = name:find("|")
local final_name
if pipe_position then
final_name = name:sub(1, pipe_position - 1)
else
final_name = name
end
final_name = final_name:gsub("%[%[", ""):gsub("%]%]", "")
return(final_name)
end
-- First pass: Count occurrences of each last name
for _, player in ipairs(player_list) do
local last_name = get_lastname(player.name)
last_names_count[last_name] = (last_names_count[last_name] or 0) + 1
end
local function insert_player(player)
local ret = '{{Futbol takımı kadrosu-oyuncu|no=' .. player.number .. '|pos=' .. player.position .. '|nat=' .. player.country .. '|name=' .. player.name ..(player.captain ~= nil and '|other=\'\'\''..(player.captain~="1" and player.captain..'. ' or '')..'[[Dosya:Kaptan logo.svg|13px|'..(player.captain)..'. Kaptan]]\'\'\'' or '')
if player.loan ~= nil then
ret = ret .. ' <small>(' .. player.loan.. ' kiralık)</small>'
end
ret = ret .. '}}\n'
return ret
end
local page = mw.title.getCurrentTitle()
-- ilk parametre boşsa varsayılan görünümü getir
if typetemp == 2 then
if page.namespace == 0 then
typetemp = 0
end
end
if typetemp == 0 or typetemp == 2 then
table.insert(t, '{{Futbol takımı kadrosu|başlık='..title..'|takımadı=' .. team_name .. '|zeminrengi=' .. back_color .. '|metinrengi=' .. text_color .. '|kenarrengi=' .. side_color .. '|ad=' .. temp_name .. '\n|liste=\n')
for _, player in ipairs(player_list) do
local final_name = player.name:gsub("%[%[", ""):gsub("%]%]","")
local last_name = get_lastname(player.name)
local display_name
-- Check if we should use full name
if player.use_fullname then
display_name = get_full_name(player.name)
else
-- If there are multiple players with the same last name, use first initial
if last_names_count[last_name] > 1 then
display_name = get_first_initial(player.name) .. " " .. last_name
else
display_name = last_name
end
end
if player.display_fullname~="" then
display_name=player.display_fullname
end
-- bağlantı verilemiş ise
if final_name == player.name then
table.insert(t, '{{Futbol takımı kadrosu2-oyuncu|no=' .. player.number .. '|name=' .. display_name .. (player.captain ~= nil and ' (\'\'\'[[Dosya:Kaptan logo.svg|13px|'..(player.captain~="1" and player.captain..'. ' or '')..'Kaptan]]\'\'\')' or '') .. '}}\n')
else
table.insert(t, '{{Futbol takımı kadrosu2-oyuncu|no=' .. player.number .. '|name=[[' ..get_player_name(player.name)..'|'.. display_name .. ']]'..(player.captain ~= nil and ' (\'\'\''..(player.captain~="1" and player.captain..'. ' or '')..'[[Dosya:Kaptan logo.svg|13px|'..(player.captain~=1 and player.captain or '')..'. Kaptan]]\'\'\')' or '')..'}}\n')
end
end
table.insert(t, '{{Futbol takımı kadrosu2-teknik direktör|name=' .. coach_name .. '}}\n')
table.insert(t, '</div>}}\n')
end
if typetemp == 1 or typetemp == 2 then
table.insert(t,'{{güncellendi|' .. update .. '}}\n')
table.insert(t, '{{Futbol takımı kadrosu-başlangıç'..(hideNote~='' and '|notgizle=evet'or '')..'}}\n')
for ii = ii_start,math.ceil( N_players / 2 ) do
table.insert(t, insert_player(player_list[ii]))
end
table.insert(t, '{{Futbol takımı kadrosu-orta}}\n')
for ii = math.ceil( N_players / 2 ) + 1, N_players do
table.insert(t, insert_player(player_list[ii]))
end
table.insert(t, '{{Futbol takımı kadrosu-son}}\n')
end
return mw.text.trim(frame:preprocess(table.concat(t)))
end
return p