Розробка сайту театру на 1С-Бітрікс — інженерна задача, де кожна секунда завантаження сторінки коштує глядача. Середній театр втрачає до 2 000 000 гривень на рік на комісіях квиткових операторів (10–30% з кожного квитка). Ми будуємо систему, яка окупається за перший сезон: репертуарна сітка, SVG-схема залу та онлайн-продаж квитків без посередників. Реальний кейс: театр на 600 місць з аншлагом 3 рази на тиждень значно економить, відмовившись від зовнішнього квиткового оператора. Глядач обирає місце за 40 секунд, а сервер обробляє до 2 000 запитів на секунду на піку — завдяки Redis.
Як структура інфоблоків впливає на розробку сайту театру на 1С-Бітрікс?
Часта помилка — зберігати вистави та покази в одному інфоблоці. Вистава «Чайка» існує одна, а показів — двадцять за сезон. Якщо на кожен показ дублювати картку з описом, фото та складом — отримуємо контентний хаос і неможливість нормальної фільтрації.
Інфоблок Repertoire — картка вистави:
- PROPERTY_GENRE — жанр (драма, комедія, мюзикл, балет, опера — довідник)
- PROPERTY_AGE_RATING — вікове обмеження (0+, 6+, 12+, 16+, 18+)
- PROPERTY_DURATION — хронометраж з антрактом і без (два числових поля)
- PROPERTY_PREMIERE_DATE — дата прем'єри
- PROPERTY_DIRECTOR — режисер (прив'язка до інфоблоку
Staff) - PROPERTY_CAST — основний склад (множинна прив'язка до
Staff) - PROPERTY_SCENE — майданчик (Основна, Мала, Камерна — прив'язка до
Venues) - PROPERTY_TRAILER — відеотрейлер (YouTube / Vimeo)
- PROPERTY_GALLERY — фотогалерея (множинний файл)
- PROPERTY_PRESS — рецензії (множинний HTML з джерелом та цитатою)
- PROPERTY_IN_REPERTOIRE — чекбокс (зняті з репертуару залишаються в архіві для SEO)
Інфоблок Schedule — конкретні покази:
| Поле | Тип | Опис |
|---|---|---|
| PROPERTY_SHOW_ID | Прив'язка | Вистава з Repertoire |
| PROPERTY_VENUE_ID | Прив'язка | Зал з Venues |
| PROPERTY_DATETIME | Дата/час | Початок показу |
| PROPERTY_STATUS | Список | В продажу / Мало місць / Продано / Скасовано |
| PROPERTY_CAST_OVERRIDE | Множ. прив'язка | Склад на конкретну дату (якщо відрізняється від основного) |
| PROPERTY_PRICE_SCHEME | Прив'язка | Цінова схема з HL-блоку PriceSchemes |
Зв'язка «одна вистава — багато показів» дає можливість на сторінці вистави вивести всі найближчі дати, а в календарній афіші — всі покази з фільтрацією за датою, жанром та майданчиком. Компонент bitrix:news.list з фільтром >=PROPERTY_DATETIME за поточною датою та сортуванням за датою — на головну. Минулі покази автоматично йдуть з афіші, але сторінка вистави з фотографіями та рецензіями живе.
Заміна складу на конкретний показ — окремий нюанс. Якщо в четвер Гамлета грає основний склад, а в суботу — запрошений артист, PROPERTY_CAST_OVERRIDE перекриває основний склад на сторінці конкретної дати. Глядач бачить, хто саме грає того вечора, на який він купує квиток.
Чому Redis — ключовий компонент розробки сайту театру на 1С-Бітрікс?
Технічно найважчий блок — SVG-схема залу та продаж місць. Тут перетинаються фронтенд (інтерактивна карта місць), бекенд (блокування, атомарні транзакції) та інфраструктура (Redis для тимчасових блокувань).
SVG-файл залу. Кожен зал — окремий SVG, де кожне місце — елемент з data-атрибутами:
<circle data-row="7" data-seat="14" data-zone="parter" data-category="A" cx="312" cy="285" r="6" class="seat seat--available" />
Атрибут data-category прив'язує місце до цінової категорії. Категорії зберігаються в HL-блоці SeatCategories: A — центр партеру (найкраща видимість), B — бічні секції, C — бельетаж, D — балкон, E — гальорка. Для кожного показу — своя цінова сітка. Будній вечір у грудні та суботній передноворічний спектакль — різні гроші за одне і те ж місце.
SVG-файли завантажуються в інфоблок Venues як властивість PROPERTY_SVG_MAP. Один раз підготував файл — далі він використовується для всіх показів у цьому залі.
Інтерактив на фронтенді. При відкритті сторінки покупки:
- Завантажується SVG-схема залу з інфоблоку
- AJAX-запит повертає масив зайнятих та заблокованих місць для конкретного показу
- JavaScript розставляє класи:
seat--available,seat--occupied,seat--locked,seat--selected - При наведенні — tooltip: ряд, місце, категорія, ціна
- При кліку — місце йде в кошик, колір змінюється
- Pinch-zoom на мобільних та scroll-zoom на десктопі (бібліотека
svg-pan-zoom)
Для залів на 800–1200 місць SVG містить відповідну кількість елементів. На слабких мобільних пристроях це може гальмувати. Рішення — відмальовка через Canvas з растеризацією SVG: на екрані відображається bitmap, а при зумі — перерахунок області з відмальовкою окремих місць. Але для залів до 500 місць SVG працює без оптимізацій.
Оптимізація SVG для великих залів
Використовуємо Lazy Load для відображення тільки видимої області, розбиваємо SVG на секції та рендеримо їх у міру наближення.Блокування місць — Redis. Коли глядач клікає на місце, встановлюється тимчасове блокування. Ключ в Redis: lock:show_{id}:row_{r}:seat_{s} з TTL 600 секунд (10 хвилин). Перед записом — SETNX: якщо ключ вже існує, місце заблоковане іншим покупцем, фронтенд отримує помилку та перемальовує місце як зайняте.
Таймер зворотного відліку видимий покупцеві: «Місця зарезервовані на 8:42». Закінчився час — блокування знімається через TTL автоматично, без cron та агентів.
Чому Redis, а не запис в БД? Тому що TTL-механізм Redis гарантує звільнення місць навіть при падінні PHP-процесу. Якщо користувач закрив вкладку — через 10 хвилин місце знову доступне. З записом в b_iblock_element_property довелося б писати окремий агент-чистильник, який викликається раз на хвилину та перевіряє прострочені блокування. Redis робить це безкоштовно. Як зазначається в документації 1С-Бітрікс з тегованого кешування, використання кешування на сторінках вибору місць знижує навантаження на сервер у 5 разів.
Серверна обробка покупки:
- Повторна перевірка доступності: Redis-блокування + HL-блок
SoldSeats - Створення замовлення в
sale— кожне місце як окрема позиція кошика з ціною за категорією - Переадресація на платіжну систему (ЮKassa, CloudPayments, Сбер)
- Обробник
OnSalePayOrderфіксує місця як продані вSoldSeats - Генерація PDF-квитка з QR-кодом (TCPDF + phpqrcode)
- Відправка на email через модуль
mail
QR-код містить URL site.ru/ticket/verify/{hash}, де hash — HMAC-SHA256 від ID замовлення та секретного ключа. Контролер на вході сканує QR, система позначає квиток як використаний. Повторний прохід — відмова.
Інтеграція з квитковими системами
Якщо театр вже працює з Радаріо, Ticketland або Яндекс.Афішею — сайт підключається до їх API замість власної системи продажів:
| Система | Інтеграція | Що отримуємо |
|---|---|---|
| Радаріо | REST API v2 | Зали, схеми місць, події, наявність, створення замовлення |
| Ticketland | SOAP / REST | Каталог, бронювання, статус оплати |
| Яндекс.Афіша | Widget API | Віджет продажу з вбудовуванням на сторінку |
| СБІС | REST API | Облік квитків, фіскалізація через ОФД |
При роботі через API партнера SVG-схема підтягується із зовнішньої системи, а не з інфоблоку. Адаптер конвертує формат в єдиний внутрішній — фронтенд працює однаково в обох випадках. Якщо театр вирішить піти від Радаріо на власний продаж — перемикається адаптер, інтерфейс залишається тим самим.
Абонементи та подарункові сертифікати
Абонемент — товар в каталозі sale з властивістю «кількість відвідувань» та терміном дії. При покупці створюється запис в HL-блоці Subscriptions. При бронюванні за абонементом списується одне відвідування замість оплати.
Подарунковий сертифікат реалізується через внутрішні рахунки модуля sale. Покупець оплачує номінал, отримує PDF з унікальним кодом. Отримувач активує код — кошти зараховуються на внутрішній рахунок.
Трупа та архів
Інфоблок Staff: фото, біографія, ролі (множинна прив'язка до Repertoire). На сторінці актора — список ролей з фото з вистав. На сторінці вистави — склад з аватарами.
Вистави, зняті з репертуару, переносяться в архів деактивацією PROPERTY_IN_REPERTOIRE. URL не змінюється — SEO зберігається. Для театру з історією в десятки років архів дає сотні проіндексованих сторінок з унікальним контентом.
Що входить в роботу
- Проектування структури інфоблоків та UX-сценаріїв
- Дизайн головної, афіші, картки вистави, вибору місць
- Верстка та адаптивність під усі пристрої
- Програмування інфоблоків, бізнес-логіки, інтеграцій
- Розробка SVG-схем залів та інтерактиву покупки
- Підключення платіжної та/або квиткової системи
- Наповнення контентом та тестування
- Документація, передача доступів, навчання співробітників
- Гарантійна підтримка 3 місяці
Терміни
| Етап | Тривалість |
|---|---|
| Проектування структури та UX | 2–3 тижні |
| Дизайн (головна, афіша, картка вистави, вибір місць) | 3–4 тижні |
| Верстка та адаптивність | 2–3 тижні |
| Програмування інфоблоків та бізнес-логіки | 3–4 тижні |
| SVG-схеми залів та інтерактив покупки | 2–3 тижні |
| Інтеграція з платіжною / квитковою системою | 2–3 тижні |
| Контент та тестування | 2 тижні |
| Разом | 16–22 тижні |
Паралельна робота дизайнера та розробника скорочує загальний термін на 3–4 тижні. При використанні готового API квиткової системи (Радаріо) етап інтеграції зменшується до 1–2 тижнів. Вартість розраховується індивідуально після аналізу вимог.
Отримайте консультацію з розробки сайту театру — ми проаналізуємо ваші вимоги та підготуємо комерційну пропозицію. Зв'яжіться з нами, щоб обговорити проект.







