Cinema Website Development on 1C-Bitrix
A cinema website solves one task — sell a ticket for a specific session. Everything else (beautiful posters, film descriptions, trailers) serves this goal. The technical complexity lies in the schedule, which updates weekly, and in schemes of several halls with different seat configurations. On 1C-Bitrix this is built from iblock and sale modules with integration of external APIs.
Session Schedule: Data Structure and TMDB
A cinema schedule is a three-dimensional matrix: film × hall × time. Storage is organized in two infoblock modules.
Films infoblock. Film card:
- PROPERTY_TMDB_ID — identifier in The Movie Database
- PROPERTY_TITLE_ORIGINAL — original title
- PROPERTY_GENRES — genres (multiple reference book)
- PROPERTY_DURATION — runtime in minutes
- PROPERTY_AGE_RATING — age rating (0+, 6+, 12+, 16+, 18+)
- PROPERTY_FORMAT — show formats (2D, 3D, IMAX, Dolby Atmos — multiple)
- PROPERTY_RELEASE_DATE — release date
- PROPERTY_TRAILER_URL — trailer link (YouTube)
- PROPERTY_POSTER — poster (file)
- PROPERTY_BACKDROP — background image for page header
Key point — automatic card population from TMDB API. Manager enters only TMDB_ID, Bitrix agent (run via CAgent::AddAgent) on element creation executes GET request to api.themoviedb.org/3/movie/{id} and populates: description, genres, runtime, poster, backdrop, cast. Poster and backdrop are downloaded from image.tmdb.org and saved locally — external CDN dependency eliminated.
Data update runs daily via agent: rating changes, descriptions, added trailers are checked. TMDB requests are cached in Bitrix\Main\Data\Cache with TTL 86400 seconds.
Sessions infoblock. Each session is a separate element:
| Property | Type | Description |
|---|---|---|
| PROPERTY_FILM_ID | Link | Film from Films |
| PROPERTY_HALL_ID | Link | Hall from Halls |
| PROPERTY_DATETIME | Date/time | Session start |
| PROPERTY_FORMAT | List | 2D / 3D / IMAX |
| PROPERTY_LANGUAGE | List | Original / Dubbed / Subtitled |
| PROPERTY_PRICES | JSON | Prices by zones: {"zone_a": 12, "zone_b": 10, "zone_c": 8} |
| PROPERTY_STATUS | List | On sale / Few seats / Sold out / Cancelled |
Weekly schedule loads in batch. Manager fills Excel template (film, hall, date, time, format), uploads via custom admin interface. Parser on PhpSpreadsheet creates infoblock elements, validating each row: does film exist, don't sessions overlap in same hall (checked by runtime + 30 min cleanup).
Schedule display. On homepage — grid "films × time" for today and tomorrow. bitrix:news.list component with grouping by films, inside — session buttons with price and format. Filter by date, genre, format — via AJAX without page reload.
On film page — full schedule for current and next week in table format by days. On hall page — all sessions in that hall.
Ticket Sales: Multiple Halls, Different Schemes, Zone Pricing
Each cinema hall is a separate SVG schema. A multiplex with 5–8 halls means 5–8 different SVG files with different row counts, seat counts, and configurations (standard seats, VIP sofas, wheelchair spaces, love seats).
SVG structure. Seats are grouped by zones via data-zone attribute:
- zone_a — center rows (optimal view)
- zone_b — side and rear rows
- zone_c — front rows (closer to screen)
- zone_vip — VIP section (enlarged seats, tables)
Price is tied to zone, not individual seat. This simplifies management: instead of setting price for each of 200 seats — 4 zone prices per session. Prices are stored in session's JSON property PROPERTY_PRICES.
Interactive diagram. Technical implementation similar to theatre, but with nuances:
- Different seat types display with different icons (regular seat, VIP sofa, wheelchair space)
- Screen renders in SVG as landmark — user understands where they'll sit relative to screen
- Zone highlighting on hover — entire zone highlights on hover, showing category price
- Mobile: diagram scales, on tap — zoom to section showing individual seats
Blocking and payment. Selected seats block in Redis for 8 minutes (standard for cinemas — purchase faster than theatre). On order creation:
- Seat validation (not sold, not blocked by other)
- Order creation in
salewith items: film + session + seat - Online payment via ЮKassa / CloudPayments / СБП
- Electronic ticket generation with QR code
- Email sending and optionally push via Telegram Bot API
QR contains encrypted string with order ID, seat number, and checksum. Terminal at hall entrance scans QR and marks ticket as used. Repeat entry attempt — denied.
Integration with Cinema Management Systems
Most cinema chains work with automated management systems. Website connects for schedule and sales synchronization.
| System | Protocol | Capabilities |
|---|---|---|
| Kinoplan | REST API | Schedule, sales, booking, fiscalization |
| Vista Cinema | SOAP / REST | Sessions, halls, prices, seat status, transactions |
| KSEA (Unified Subscription System) | XML-RPC | Subscriptions, gift cards, bonuses |
| Ticketon | REST API | Sales widget, status webhooks |
When integrated with Kinoplan, Bitrix site acts as frontend, sales backend on Kinoplan side. Sync agent runs every 5 minutes: fetches current schedule, seat statuses, new films. On purchase through site, order transfers to Kinoplan API, returns transaction ID for receipt.
For independent cinemas without external system, all sales logic works inside Bitrix. In this case, receipt fiscalization via cash register module — integration with ATOL, OrangeData, or payment provider's cloud register.
Bar Menu with Pre-order to Session
Additional cinema revenue — food and beverage sales. At ticket purchase stage, an "Add to order" step is added:
- Popcorn (small / medium / large)
- Drinks (cola, juice, water)
- Combo sets (popcorn + drink with discount)
- Nachos, hot dogs, snacks
Bar menu items stored in BarMenu infoblock with prices and photos. On adding to order — additional items in sale cart. After payment, bar receives order via internal webhook: order number, composition, session time. Order is ready on customer arrival.
Stock levels sync with 1C:Trade Management via standard exchange module. If popcorn runs out — position auto-deactivates on site.
Loyalty Card
Cinema loyalty program realized via internal accounts of sale module:
- Bonus accrual after visit (5–10% of check amount)
- Bonus deduction on next purchase (up to 50% ticket cost)
- Birthday — doubled bonuses for week (handler checks UF-field
UF_BIRTHDAY) - Cumulative levels: Viewer → Movie Fan → Film Critic (thresholds set in HL-block
LoyaltyLevels)
Identification by phone number. No physical card needed: on purchase client enters phone, system finds account and shows balance. Personal account login — via SMS code (main module with custom auth handler via messageservice provider).
Technical Timeline
| Stage | Timeline |
|---|---|
| Planning and prototype | 2 weeks |
| Design (responsive, hall schemas) | 3–4 weeks |
| Markup | 2–3 weeks |
| Development (infoblock, schedule, TMDB) | 3–4 weeks |
| SVG hall schemas and seat sales | 2–3 weeks |
| Integration (payment, register, Kinoplan) | 2–4 weeks |
| Bar menu and loyalty system | 1–2 weeks |
| Testing and population | 2 weeks |
| Total | 17–24 weeks |
When integrating with existing cinema system (Kinoplan, Vista), schedule and sales stages partially overlap, shortening total timeline by 2–3 weeks.







