Шаблон:Кубковая сетка

Материал из Наро-Фоминский Футбол
Перейти к навигации Перейти к поиску

Кубковая сетка — шаблон для турнирной сетки кубкового (олимпийского) турнира: плей-офф с соединительными линиями, необязательный матч за третье место и сводная таблица матчей под сеткой. Логика — в Модуль:Кубковая сетка, оформление — в Шаблон:Кубковая сетка/styles.css (TemplateStyles). Требуются расширения Scribunto, ParserFunctions и TemplateStyles.

Главные свойства:

  • любое число этапов (по умолчанию до 7, то есть с 1/64 финала) — определяется автоматически по номерам матчей;
  • матчи добавляются по одному, в любом порядке; незаполненные слоты остаются пустыми рамками;
  • победители сами переходят в следующий этап, проигравшие полуфиналов — в матч за третье место;
  • сводная таблица строится только из матчей с данными;
  • незнакомые шаблону поля не ломают вызов — их можно использовать при доработке модуля.

Быстрый старт

{{Кубковая сетка
| s1m1_team1 = Франция  | s1m1_score1 = 1
| s1m1_team2 = Бельгия  | s1m1_score2 = 0
| s1m2_team1 = Хорватия | s1m2_score1 = 2
| s1m2_team2 = Англия   | s1m2_score2 = 1 | s1m2_aet = да
| s2m1_score1 = 4 | s2m1_score2 = 2 | s2m1_date = 2018-07-15 | s2m1_city = [[Москва]]
}}

Получится сетка из двух этапов («Полуфиналы», «Финал»); команды финала подставятся из полуфиналов, под сеткой появится сводная таблица.

Нумерация матчей

Каждое поле матча записывается как sKmJ_поле: K — номер этапа (1 — первый этап сетки), J — номер матча в этапе сверху вниз.

 этап 1        этап 2        этап 3
 s1m1 ──┐
        ├── s2m1 ──┐
 s1m2 ──┘          │
                   ├── s3m1        (финал)
 s1m3 ──┐          │
        ├── s2m2 ──┘
 s1m4 ──┘
  • Матчи 2J−1 и 2J этапа K сходятся в матч J этапа K+1: победитель верхнего становится командой 1, нижнего — командой 2.
  • Число этапов N — наименьшее, при котором помещаются все заданные матчи (на этапе K с M матчами нужно N ≥ K + ⌈log₂M⌉). Его можно задать явно параметром stages.
  • Названия этапов по умолчанию считаются от финала: «Финал», «Полуфиналы», «Четвертьфиналы», «1/8 финала», «1/16 финала»… Поэтому сетка «с 1/8» и сетка «с 1/4» подписываются правильно без настройки.
  • Свободный проход (bye) — скрыть слот параметром sKmJ_hide = да и указать команду сразу в матче следующего этапа.

Глобальные параметры

Параметр Назначение Значения По умолчанию
title Заголовок над сеткой текст / викитекст —
stages Число этапов (если нужно больше, чем следует из номеров матчей, например чтобы показать пустую сетку) 1…7 авто
bracket Показывать сетку да / нет да
summary Показывать сводную таблицу да / нет да
summary_title Подпись (caption) сводной таблицы текст —
summary_stage Вывести в таблице только перечисленные разделы: номера этапов и/или ключи доп. матчей 1, 2,3, 3,third,4 все
summary_sort Сортировать матчи раздела по дате и времени (если у всех дата в формате ГГГГ-ММ-ДД); «нет» — порядок сетки да / нет да
autofill Подставлять победителей в следующий этап и проигравших полуфиналов в матч за 3-е место да / нет да
hide_empty Скрывать совсем пустые слоты (без команд, счёта, даты) да / нет нет
third Матч за третье место: «да» — показать всегда, «нет» — скрыть всегда, пусто — показать, если есть данные third_* да / нет авто
flagsize Размер флагов-файлов 23x15px, 20px 23x15px
flagtemplate Шаблон флагов: короткий код флага передаётся ему первым параметром Флагификация —
theme Тема оформления: класс .cb--theme-имя и страница Шаблон:Кубковая сетка/theme-имя.css, если есть compact —
class Дополнительный CSS-класс корневого блока my-cup —
styles Своя таблица стилей (TemplateStyles), подключается после основных Шаблон:Кубок России/styles.css —
data Взять параметры из Модуль:Кубковая сетка/данные/имя; параметры вызова переопределяют их ЧМ-2018 —
debug Показать список нераспознанных параметров (опечатки) да / нет нет

Логические параметры понимают да/нет, yes/no, 1/0, вкл/выкл.

Параметры этапа

Параметр Назначение Пример
sK_name Название этапа (в сетке и в сводке) s1_name = 1/4 финала
sK_summary «нет» — не выводить этап в сводной таблице s1_summary = нет
sK_class CSS-класс заголовка и матчей этапа s4_class = cb-final

Параметры матча

Все поля пишутся с префиксом sKmJ_ (или third_ для матча за третье место). Любое поле необязательно.

Поле Назначение Пример значения
team1, team2 Команды: викитекст или код из реестра (см. ниже). Пусто — подставится из предыдущего этапа FRA, [[Сборная Франции по футболу|Франция]]
flag1, flag2 Флаг/эмблема: имя файла, код из реестра, готовый викитекст или код для flagtemplate. Если не задан, берётся флаг команды из реестра Flag of France.svg, FRA
score1, score2 Счёт (с учётом доп. времени). Можно и нечисловой — тогда укажите winner 2, +
pen1, pen2 Серия пенальти; в сетке выводится как «1 (4)», у победителя — приписка «(пен.)» 4
aet Матч завершился в дополнительное время: приписка «(доп. вр.)» у победителя и в сводке да
winner Победитель явно (перекрывает расчёт по счёту и пенальти): для техн. побед, жребия, неполных данных 1, 2
date Дата: ГГГГ-ММ-ДД превращается в «30 июня» (сетка) и «30 июня 2018» (сводка); любой другой текст — как есть 2018-06-30
time Время начала (только сводка) 17:00 MSK (UTC+3)
city Город (подпись в сетке и сводка) [[Казань]]
stadium Стадион (сводка; в сетку — если нет города) «[[Казань Арена]]»
place Место для подписи в сетке, если нужно иначе, чем в сводке [[Москва]] ([[Лужники (стадион)|Лужники]])
caption Подпись над матчем в сетке целиком (заменяет «дата — место») Переигровка
attendance Зрители; число форматируется по правилам языка вики 42873
referee Главный судья [[Фагани, Алиреза|Алиреза Фагани]]
referee_flag Флаг судьи (как flag1) IRN
goals1, goals2 Авторы голов (сводка), строки через <br> Павар 57′<br>Мбаппе 64′, 68′
shootout1, shootout2 Бьющие серии пенальти — отдельная строка «Пенальти» в сводке Иньеста ✔<br>Коке ✘
report Отчёт о матче: URL превращается в ссылку «(отчёт)», викитекст — как есть https://www.fifa.com/…
status Статус: scheduled/запланирован, live/идёт, finished/завершён, postponed/перенесён, cancelled/отменён. По умолчанию «завершён», если есть счёт, иначе «запланирован». Даёт класс cb-status-… и подпись в сводке live
home Хозяин поля — класс cb-team--home у строки команды (маркер оформляется в CSS) 1
note Примечание курсивом в последней колонке сводки Матч перенесён из-за погоды
summary Принудительно включить/исключить матч из сводки да / нет
hide Скрыть слот (свободный проход): место сохраняется, линии не рисуются да
class CSS-класс матча (и строки сводки) cb-derby

Русские синонимы полей: команда1/2, флаг1/2, счёт1/2 (счет1/2), пен1/2, дата, время, город, стадион, зрители, судья, отчёт, статус, победитель, доп; для этапа — название. Например, s1m1_счёт1 = 2 равносильно s1m1_score1 = 2.

Матч за третье место

Поля те же, что у матча, с префиксом third_, плюс:

Параметр Назначение Пример
third_title Название блока и раздела сводки Матч за бронзу (по умолчанию «Матч за третье место»)
third_position inside — в колонке финала на уровне нижнего полуфинала (как в классических сетках; только при 4 и более этапах); below — под сеткой по умолчанию inside при ≥ 4 этапах, иначе below

Блок появляется, если задано хотя бы одно поле third_* (кроме title/position/class/hide/summary) или third = да; third = нет скрывает его полностью, вместе с разделом сводки. Команды, если не заданы, подставляются из проигравших полуфиналов.

Реестр команд и флагов

Чтобы не повторять ссылку и флаг в каждом матче, задайте их один раз по коду:

| team_FRA = [[Сборная Франции по футболу|Франция]] | flag_FRA = Flag of France.svg
| team_CRO = [[Сборная Хорватии по футболу|Хорватия]] | flag_CRO = Flag of Croatia.svg
| s1m1_team1 = FRA | s1m1_team2 = CRO | s1m1_referee_flag = IRN

Коды — любые латинские буквы/цифры. Флаг без команды (flag_IRN) удобен для флагов судей. Для шаблона флагов задайте flagtemplate — тогда код без записи в реестре передаётся этому шаблону.

Сводная таблица

  • Разделы идут по этапам; матч за третье место — перед финалом.
  • Строка появляется, только если известны обе команды (явно или через автозаполнение) и есть хотя бы что-то из: счёт, дата, время, стадион, город. Поле summary матча перекрывает это правило.
  • Раздел без строк не выводится; если строк нет вовсе — таблицы нет.
  • Внутри раздела матчи сортируются по дате и времени (summary_sort = нет — порядок сетки).
  • Колонки: дата/время · команда 1 и голы · счёт, доп. время, пенальти, отчёт, статус · команда 2 и голы · стадион, зрители, судья, примечание. Серия пенальти с бьющими — отдельной строкой.
  • Разбить сводку по разделам статьи: один вызов с summary = нет для сетки и под каждым разделом — вызов с bracket = нет | summary_stage = 1 и т. д. Чтобы не дублировать данные, храните их в модуле данных (data=).

Оформление

  • Основные стили — Шаблон:Кубковая сетка/styles.css; цвета тёмной темы — Шаблон:Кубковая сетка/tokens.css (подключается, если существует).
  • Тема theme=имя: создайте Шаблон:Кубковая сетка/theme-имя.css с селекторами .cb--theme-имя …. Пример — Шаблон:Кубковая сетка/theme-compact.css.
  • Основные классы: .cb-head (заголовок этапа), .cb-item (матч), .cb-caption (подпись), .cb-team (строка команды; модификаторы --winner, --loser, --home, --tbd, --auto), .cb-name, .cb-score, .cb-conn (линии), .cb-extra--third, .cb-status-статус, table.cb-summary.
  • Важно: высота подписи (1.6em) и нижний отступ матча (0.4em) участвуют в расчёте положения линий. Меняете их — пересчитайте смещение по формуле из styles.css (раздел 3).

Примеры

Полные примеры на данных чемпионата мира 2018 года (1/8 финала → финал с матчем за третье место; сетка с четвертьфинала без матча за третье место; турнир в процессе; нерегулярная сетка со свободными проходами) — на странице Шаблон:Кубковая сетка/Примеры.

Минимальный пример с матчем за третье место:

{{Кубковая сетка
| s1_name = 1/2 финала
| s1m1_team1 = Франция  | s1m1_team2 = Бельгия | s1m1_score1 = 1 | s1m1_score2 = 0
| s1m2_team1 = Хорватия | s1m2_team2 = Англия  | s1m2_score1 = 2 | s1m2_score2 = 1 | s1m2_aet = да
| s2m1_score1 = 4 | s2m1_score2 = 2
| third_score1 = 2 | third_score2 = 0 | third_date = 2018-07-14
}}

Ошибки и предупреждения

Под сеткой выводятся сообщения (класс error), если матч не помещается в сетку (номер слишком велик для числа этапов), stages вне диапазона или не загрузился модуль данных. С debug = да дополнительно перечисляются нераспознанные параметры.