Шаблон:Кубковая сетка
Кубковая сетка — шаблон для турнирной сетки кубкового (олимпийского) турнира: плей-офф с соединительными линиями, необязательный матч за третье место и сводная таблица матчей под сеткой. Логика — в Модуль:Кубковая сетка, оформление — в Шаблон:Кубковая сетка/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 = да дополнительно перечисляются нераспознанные параметры.