Разработка сайта кинотеатра на 1С-Битрикс
Сайт кинотеатра решает одну задачу — продать билет на сеанс. Постеры, трейлеры, описания фильмов — всё это обслуживает конверсию из просмотра в покупку. Техническая сложность не в контенте (его можно забрать из TMDB автоматически), а в расписании, которое перестраивается каждую неделю, и в схемах залов мультиплекса, где у каждого зала своя конфигурация мест, зон и ценовых категорий.
На 1С-Битрикс проект строится на двух инфоблоках (фильмы и сеансы), модуле sale для продажи, интеграции с TMDB для автозаполнения карточек и связке с кинотеатральной системой управления.
Расписание сеансов и автозаполнение из TMDB
Расписание кинотеатра — трёхмерная матрица: фильм × зал × время. Попытка впихнуть всё в один инфоблок заканчивается кашей на втором месяце эксплуатации. Два инфоблока — единственный рабочий вариант.
Инфоблок Films — карточка фильма:
- PROPERTY_TMDB_ID — идентификатор в The Movie Database (ключевое поле)
- PROPERTY_TITLE_ORIGINAL — оригинальное название
- PROPERTY_GENRES — жанры (множественный справочник)
- PROPERTY_DURATION — хронометраж в минутах
- PROPERTY_AGE_RATING — возрастной рейтинг (0+, 6+, 12+, 16+, 18+)
- PROPERTY_FORMAT — форматы показа (2D, 3D, IMAX, Dolby Atmos — множественный)
- PROPERTY_RELEASE_DATE — дата выхода в прокат
- PROPERTY_TRAILER_URL — ссылка на трейлер (YouTube)
- PROPERTY_POSTER — постер (файл)
- PROPERTY_BACKDROP — фоновое изображение для шапки
Менеджер вводит только TMDB_ID. Агент Битрикс (CAgent::AddAgent) при создании элемента делает GET-запрос к api.themoviedb.org/3/movie/{id}?language=ru-RU и заполняет: описание, жанры, хронометраж, постер, backdrop, актёрский состав. Постер и backdrop скачиваются с image.tmdb.org и сохраняются локально — никакой зависимости от внешнего CDN в рантайме.
Обновление данных — раз в сутки агентом: проверяются изменения рейтингов, новые трейлеры. Кэширование запросов к TMDB через Bitrix\Main\Data\Cache с TTL 86400 секунд. У TMDB API лимит — 40 запросов в 10 секунд на бесплатном тарифе. Для кинотеатра с 15–30 фильмами в прокате этого с запасом.
Инфоблок Sessions — каждый сеанс как элемент:
| Свойство | Тип | Описание |
|---|---|---|
| PROPERTY_FILM_ID | Привязка | Фильм из Films |
| PROPERTY_HALL_ID | Привязка | Зал из Halls |
| PROPERTY_DATETIME | Дата/время | Начало сеанса |
| PROPERTY_FORMAT | Список | 2D / 3D / IMAX |
| PROPERTY_LANGUAGE | Список | Дубляж / Оригинал / Субтитры |
| PROPERTY_PRICES | JSON | Цены по зонам: {"zone_a": 450, "zone_b": 350, "zone_c": 280, "zone_vip": 700} |
| PROPERTY_STATUS | Список | Продажа / Мало мест / Продано / Отменён |
Пакетная загрузка расписания. Менеджер заполняет Excel-шаблон: фильм, зал, дата, время, формат, язык. Загружает через кастомный административный интерфейс. Парсер на PhpSpreadsheet создаёт элементы Sessions, валидируя каждую строку: существует ли фильм в базе, не пересекается ли сеанс с другим в том же зале. Проверка пересечения — по хронометражу фильма + 30 минут на уборку и рекламу. Если «Аватар 2» идёт 192 минуты, а следующий сеанс в том же зале поставлен через 200 минут — валидация выбросит ошибку.
Отображение на сайте. На главной — сетка «фильмы × время» на сегодня и завтра. Компонент bitrix:news.list с группировкой по фильмам, внутри — кнопки сеансов с ценой и форматом. Фильтр по дате, жанру, формату — AJAX без перезагрузки. На странице фильма — полное расписание на текущую и следующую неделю, таблица по дням.
Схемы залов и продажа мест
Мультиплекс на 5–8 залов — это 5–8 разных SVG-файлов. Зал IMAX на 350 мест и камерный зал на 80 — совершенно разная геометрия. Обычные кресла, VIP-диваны, love seats, места для инвалидных колясок — каждый тип отрисовывается своей иконкой.
Зональное ценообразование. Цена привязана к зоне, а не к отдельному месту. Вместо задания цены для каждого из 300 мест — 4–5 зональных цен на сеанс:
- zone_a — центральные ряды оптимального обзора
- zone_b — боковые и задние ряды
- zone_c — первые ряды (ближе к экрану)
- zone_vip — VIP-секция (широкие кресла, столики, увеличенное расстояние)
Зоны задаются в SVG через атрибут data-zone. Цены хранятся в JSON-свойстве сеанса PROPERTY_PRICES. Администратор меняет цену на конкретный сеанс — без правки SVG.
Интерактивная схема. Экран отрисовывается в SVG как ориентир — покупатель понимает, где будет сидеть. При наведении на зону — подсветка всей зоны с ценой. При тапе на место — добавление в корзину с анимацией. Мобильная версия: при тапе на область зала — зум на секцию с отображением отдельных мест. Библиотека svg-pan-zoom для масштабирования.
Блокировка мест — Redis с TTL 480 секунд (8 минут — покупка билета в кинотеатре быстрее, чем в театре). Механизм SETNX с ключом lock:session_{id}:row_{r}:seat_{s}. Истечение таймера — автоматическое освобождение.
Оформление покупки:
- Валидация мест (не проданы, не заблокированы)
- Создание заказа в
sale: фильм + сеанс + место как позиции корзины - Онлайн-оплата — ЮKassa / CloudPayments / СБП
- Генерация электронного билета с QR-кодом
- Отправка на email и опционально push через Telegram Bot API
QR содержит зашифрованную строку: ID заказа, номер места, контрольная сумма HMAC-SHA256. Терминал на входе в зал считывает QR и отмечает билет. Повторный проход — отказ. Для сетей кинотеатров QR должен быть уникальным в рамках всей сети, а не одного кинотеатра — серийный номер включает код площадки.
Интеграция с Киноплан и другими системами
Сетевые кинотеатры работают с автоматизированными системами. Сайт подключается к ним для синхронизации расписания и продаж:
| Система | Протокол | Что даёт |
|---|---|---|
| Киноплан | REST API | Расписание, продажа, бронь, фискализация, залы и схемы |
| Vista Cinema | SOAP / REST | Сеансы, цены, статус мест, транзакции |
| КСЭА | XML-RPC | Абонементы, подарочные карты, бонусы |
| Ticketon | REST API | Виджет продажи, webhook статусов |
При работе с Киноплан сайт Битрикс выступает фронтендом, а бэкенд продажи — на стороне Киноплана. Агент синхронизации запускается каждые 5 минут: забирает расписание, статусы мест, новые фильмы. При покупке через сайт — заказ передаётся в API Киноплан, оттуда приходит ID транзакции для фискального чека.
Для независимых кинотеатров без внешней системы вся логика живёт внутри Битрикс. Фискализация чека — через модуль онлайн-кассы: интеграция с АТОЛ, OrangeData или облачная касса платёжного провайдера (ЮKassa умеет сама отправлять чеки в ОФД).
Бар-меню с предзаказом к сеансу
На этапе покупки билета появляется шаг «Добавить к заказу»: попкорн (три размера), напитки, комбо-наборы, снеки. Позиции хранятся в инфоблоке BarMenu с ценами и фото. При добавлении — дополнительные позиции в корзине sale.
После оплаты бар получает заказ через внутренний webhook: состав, номер заказа, время сеанса. К приходу зрителя заказ собран. Товарные остатки синхронизируются с 1С:Управление торговлей через стандартный модуль обмена — если попкорн закончился, позиция деактивируется на сайте.
Комбо-наборы реализуются через правила корзины sale: «попкорн большой + кола большая = скидка 15%». Администратор создаёт комбо в визуальном конструкторе скидок без участия разработчика.
Программа лояльности
Бонусная система — через внутренние счета модуля sale:
- Начисление 5–10% от суммы чека после посещения
- Списание до 50% стоимости следующего билета
- День рождения — удвоенные бонусы в течение недели (обработчик проверяет
UF_BIRTHDAY) - Накопительные уровни: Зритель → Киноман → Кинокритик (пороги в HL-блоке
LoyaltyLevels)
Идентификация — по номеру телефона. Авторизация в личном кабинете через SMS-код: модуль main с кастомным обработчиком через messageservice.
Технические сроки
| Этап | Срок |
|---|---|
| Проектирование и прототип | 2 недели |
| Дизайн (адаптив, схемы залов) | 3–4 недели |
| Вёрстка | 2–3 недели |
| Разработка (инфоблоки, расписание, TMDB) | 3–4 недели |
| SVG-схемы залов и продажа мест | 2–3 недели |
| Интеграция (платёжная система, онлайн-касса, Киноплан) | 2–4 недели |
| Бар-меню и бонусная система | 1–2 недели |
| Тестирование и наполнение | 2 недели |
| Итого | 17–24 недели |
При интеграции с Киноплан или Vista этапы расписания и продажи мест частично перекрываются — сокращение на 2–3 недели. Для небольшого однозального кинотеатра без внешних систем проект укладывается в 10–12 недель. Стоимость рассчитывается после анализа требований: количество залов, наличие кинотеатральной системы, объём интеграций.







