Модуль:MatchTable

Материал из ЧТМ
Перейти к навигации Перейти к поиску
Документация Документация

Модуль-оболочка для вывода таблиц матчей. Главное назначение — отрисовывать таблицы по указанию мощного модуля TournamentResults, но может генерировать таблички и в чистом виде, если их заполнять вручную, поскольку из-за архитектурных особенностей прямого выхода на базу данных не имеет.

Параметры

Функция group

Рисует таблицы групповых раундов, автоматически подсчитывая количество участвовавших команд и очки.

  • number_of_rounds = Количество кругов, один или два.
  • compact = yes Если параметр задан, то в таблице не отображаются колонки «И», «В», «Н» и «П».
  • team1, team2 и т. д. — трёхбуквенные коды участвовавших команд.
  • score1_2 — счёт матча с участием указанных команд. Принимает также ссылки вида [[Матч|0:0]], корректно учитывая счёт в результатах
  • bold1, bold2 и т. д. — выделение жирным шрифтом нужных команд.
  • color1, color2 и т. д. — цвета ячеек указанных команд.

Функция playoff

Более простая функция, поскольку здесь не нужно ничего подсчитывать.

  • s1_team1 =, s1_team2 = участники первого противостояния.
  • s2_team1 =, s2_team2 = участники второго противостояния.
  • и т. д.
  • s1_score =, s2_score = счёт первого матча, счёт второго матча.
  • s2_bold2 = выделение жирным шрифтом нужной команды на нужной строке.
  • s1_color2 = выделение цветом нужной команды на нужной строке.

Функция _rating

Нужна для отрисовывания сворачиваемых таблиц рейтингов мест в группах, но напрямую не вызывается, поскольку для её составления нужен доступ к БД. Является внутренней функцией модуля TournamentResults.

Примеры использования

{{#invoke:MatchTable|playoff
|s1_team1 = ДОМ |s1_team2 = ЧАД |s1_score = 2:1(ET) |s1_color1 = lightgreen |s1_color2 = lightsalmon
|s2_team1 = АБХ |s2_team2 = АВИ |s2_score = [[Финал ЧТМ-2014|5:1]] |s2_color1 = |s2_color2 = 
}}
{{#invoke:MatchTable|group
| number_of_rounds = 1
| compact = yes
|team1 = БАГ |color1 = lightgreen | bold1 = yes
|team2 = СКН |color2 = lightsalmon
|team3 = АВИ |color3 = lightsalmon
|team4 = ГАЛ |color4 = lightsalmon

|score1_2 = [[Финал ЧТМ-2014|5:1]]
|score1_3 = 4:0
|score1_4 = 3:2
|score2_3 = 5:1
|score2_4 = 4:1
|score3_4 = 0:0
}}

Пожалуйста, добавляйте категории на страницу документации.

-- =======================================
-- Модуль:MatchTable
-- Оболочка для вывода таблиц матчей
-- =======================================
local p = {}

-- Подключаем твою базу данных команд
local teamsData = require('Модуль:Data/Teams')

-- Вспомогательная функция: очищает параметр от пробелов.
-- Если параметр пустой, возвращает nil (удобно для проверок).
local function cleanParam(param)
    if param then
        local trimmed = mw.text.trim(param)
        if trimmed ~= '' then
            return trimmed
        end
    end
    return nil
end

-- Функция для вывода таблицы плей-офф
function p.playoff(frame)
    -- Получаем аргументы из шаблона (или напрямую из #invoke для тестов)
    local args = frame:getParent().args
    if next(args) == nil then
        args = frame.args
    end

    -- Создаём каркас таблицы с помощью mw.html
    local tbl = mw.html.create('table')
        :attr('border', '1')
        :attr('cellspacing', '1')
        :attr('cellpadding', '1')
        :addClass('article-table')
        :css('width', '500px')

    -- Определяем количество строк
    local row_count = tonumber(cleanParam(args.number_of_strings))
    
    -- Если number_of_strings не задан, считаем автоматически по наличию sX_team1
    if not row_count then
        row_count = 0
        while cleanParam(args['s' .. (row_count + 1) .. '_team1']) do
            row_count = row_count + 1
        end
    end

    -- Генерируем строки таблицы
    for i = 1, row_count do
        -- Считываем параметры строки
        local t1_code = cleanParam(args['s' .. i .. '_team1']) or '?'
        local t2_code = cleanParam(args['s' .. i .. '_team2']) or '?'
        local score = cleanParam(args['s' .. i .. '_score']) or '—'
        local color1 = cleanParam(args['s' .. i .. '_color1'])
        local color2 = cleanParam(args['s' .. i .. '_color2'])

        -- Получаем короткие имена команд из базы
        local t1_name = teamsData.getName(t1_code, 'short')
        local t2_name = teamsData.getName(t2_code, 'short')

        -- Добавляем строку (<tr>)
        local tr = tbl:tag('tr')

        -- 1. Ячейка: Флаг первой команды
        local td_t1_img = tr:tag('td')
            :attr('align', 'center')
            :css('white-space', 'nowrap')
            :wikitext(string.format('[[Файл:%s.jpg|50x100px]]', t1_name))
        if color1 then td_t1_img:css('background-color', color1) end

        -- 2. Ячейка: Название первой команды
        local td_t1_name = tr:tag('td')
            :attr('align', 'center')
            :css('white-space', 'nowrap')
            :wikitext(string.format('[[%s]]', t1_name))
        if color1 then td_t1_name:css('background-color', color1) end

        -- 3. Ячейка: Счёт матча (всегда без цвета)
        tr:tag('td')
            :attr('align', 'center')
            :wikitext(score)

        -- 4. Ячейка: Название второй команды
        local td_t2_name = tr:tag('td')
            :attr('align', 'center')
            :css('white-space', 'nowrap')
            :wikitext(string.format('[[%s]]', t2_name))
        if color2 then td_t2_name:css('background-color', color2) end

        -- 5. Ячейка: Флаг второй команды
        local td_t2_img = tr:tag('td')
            :attr('align', 'center')
            :css('white-space', 'nowrap')
            :wikitext(string.format('[[Файл:%s.jpg|50x100px]]', t2_name))
        if color2 then td_t2_img:css('background-color', color2) end
    end

    -- Возвращаем готовый HTML-код таблицы
    return tostring(tbl)
end

return p