Заказчику требовалось создать на сайте полноценную систему афиш спортивных событий, аналогичную Яндекс.Афише, но с фокусом на спортивную тематику. Необходимо было:
- агрегировать все спортивные мероприятия (соревнования, турниры, мастер-классы, открытые тренировки),
- обеспечить удобный поиск и фильтрацию по видам спорта, датам, местам проведения,
- сделать персонализированные рекомендации,
- обновлять информацию.
Спроектировал сложную реляционную структуру для хранения событий:
events Основная информация о событии: название, описание, дата/время, статус
event_venues Площадки (спорткомплексы, стадионы, залы) с адресами, координатами, схемами
event_categories Виды спорта (привязка к существующему каталогу из 234 видов)
event_organizers Организаторы (спортшколы, клубы, федерации — привязка к каталогу организаций)
event_tickets Цены, типы билетов, наличие мест
event_schedule Расписание (для многодневных событий или нескольких сеансов)
event_tags Метки для умных подборок («для детей», «бесплатно», «выходные»)
2. Функционал "как в Яндекс.Афише"
Календарь событий
- Отображение событий в виде ленты, календаря, сетки
Разделы: «Сегодня», «На этой неделе», «В этом месяце», «Скоро»
Фильтры:
Вид спорта (234 категории)
Дата (диапазон, конкретный день)
Район / метро (геопривязка)
Тип события (турнир, мастер-класс, сборы, открытая тренировка)
Цена (бесплатно / платно / диапазон)
Возрастная категория
Сортировка: по дате, по популярности, по цене
Карточка события
На странице события выводится:
Название, дата, время, место проведения (с картой)
Описание, программа, участники
Цены
Блок «Организатор» (ссылка на карточку спортшколы/клуба)
3. Техническая реализация
Backend
- Кастомные контроллеры OpenCart для работы с событиями (по аналогии с модулями feed )
- Сложные SQL-запросы с оптимизацией (индексы, кэширование)
- Событийная модель (Events System) OpenCart для автоматизации :
- При создании события — уведомления подписчикам
- При приближении даты — напоминания
- Кэширование популярных запросов (Redis / файловый кэш)
- Оптимизация для высоких нагрузок
4. Автоматизация и наполнение
- Как в Яндекс.Афише, данные собираются из разных источников :
- Ручное добавление через админку (для организаторов)
- Парсинг сайтов спортивных федераций и школ
- API городских порталов и календарей
- Социальные сети (автоматический импорт анонсов из VK, Telegram)
5. SEO и продвижение
- Микроразметка Schema.org для событий (тип Event) — чтобы поисковики показывали даты и места прямо в выдаче
- Отдельный Sitemap для событий
Все турниры, соревнования, мастер-классы в одном месте. Пользователи находят события по датам, видам спорта, району, цене. Персонализированные подборки повышают вовлеченность.