A cinema website has one job — sell tickets for shows. Posters, trailers, descriptions — all serve the conversion from browsing to purchase. The technical challenge isn't content (you can pull that from TMDB automatically), but the schedule, which reshuffles every week, and the multiplex seating charts, where each hall has its own seat configuration, zones, and price categories. We build cinema sites on 1C-Bitrix that handle these tasks without constant developer involvement.
On the Bitrix platform, the project relies on two information blocks (Films and Sessions), the sale module for selling, The Movie Database integration for auto-populating cards, and a connection to the cinema management system. Project cost is calculated individually.
Using two information blocks for cinema site development on 1C-Bitrix
A cinema schedule is a three-dimensional matrix: film × hall × time. Trying to cram everything into one info block ends in a mess by the second month of operation. Two info blocks — the only working solution.
Info block Films — film card:
- PROPERTY_TMDB_ID — identifier in The Movie Database (key field)
- PROPERTY_TITLE_ORIGINAL — original title
- PROPERTY_GENRES — genres (multiple reference)
- PROPERTY_DURATION — runtime in minutes
- PROPERTY_AGE_RATING — age rating (0+, 6+, 12+, 16+, 18+)
- PROPERTY_FORMAT — screening 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 header
Manager enters only TMDB_ID. A Bitrix agent (CAgent::AddAgent) on element creation makes a GET request to api.themoviedb.org/3/movie/{id}?language=ru-RU and fills in: description, genres, runtime, poster, backdrop, cast. Poster and backdrop are downloaded from image.tmdb.org and saved locally — no external CDN dependency at runtime. Info blocks v2.0 documentation provides high-performance storage for unstructured data.
Data update — once daily by agent: checks rating changes, new trailers. Queries to TMDB are cached via Bitrix\Main\Data\Cache with TTL 86400 seconds. TMDB API limit is 40 requests per 10 seconds on the free tier. For a cinema with 15–30 films in release, that's plenty.
Info block Sessions — each screening as an element:
| Property | Type | Description |
|---|---|---|
| PROPERTY_FILM_ID | Link | Film from Films |
| PROPERTY_HALL_ID | Link | Hall from Halls |
| PROPERTY_DATETIME | Date/Time | Screening start |
| PROPERTY_FORMAT | List | 2D / 3D / IMAX |
| PROPERTY_LANGUAGE | List | Dubbing / Original / Subtitles |
| PROPERTY_PRICES | JSON | Prices by zone: {"zone_a": 450, "zone_b": 350, "zone_c": 280, "zone_vip": 700} |
| PROPERTY_STATUS | List | Selling / Few seats / Sold out / Canceled |
Updating the schedule: Managers fill an Excel template: film, hall, date, time, format, language. Uploads via a custom admin interface. A parser based on PhpSpreadsheet creates Sessions elements, validating each row: does the film exist in the database? Does the screening overlap with another in the same hall? Overlap check — film runtime + 30 minutes for cleaning and ads. If "Avatar 2" runs 192 minutes and the next screening in the same hall is set 200 minutes later, validation throws an error.
Display on the site. On the main page — a grid of "films × time" for today and tomorrow. The bitrix:news.list component with grouping by film, inside — buttons for screenings with price and format. Filter by date, genre, format — AJAX without reload. On the film page — full schedule for the current and next week, table by day.
Interactive seat selection
A multiplex with 5–8 halls means 5–8 different SVG files. An IMAX hall with 350 seats and a cozy 80-seat hall have completely different geometry. Regular seats, VIP sofas, love seats, wheelchair spaces — each type is drawn with its own icon.
Zone pricing. Price is tied to a zone, not an individual seat. Instead of setting a price for each of 300 seats — 4–5 zone prices per screening. Zone prices range from 280 to 700 rubles per seat.
-
zone_a— central rows with optimal view -
zone_b— side and back rows -
zone_c— front rows (closer to screen) -
zone_vip— VIP section (wide seats, tables, increased spacing)
Zones are set in SVG via the data-zone attribute. Prices are stored in the screening's JSON property PROPERTY_PRICES. The administrator changes the price for a specific screening — no editing of SVG.
Interactive chart. The screen is drawn in SVG as a reference — the buyer understands where they will sit. On hover over a zone — entire zone highlights with price. On tap on a seat — added to cart with animation. Mobile version: on tap on hall area — zoom to section with individual seats shown. The svg-pan-zoom library for scaling.
Seat locking — Redis with TTL 480 seconds (8 minutes — buying a cinema ticket is faster than theatre). Using SETNX with key lock:session_{id}:row_{r}:seat_{s}. Timer expiration — automatic release. On a project for a 6-hall multiplex, we reduced the average ticket purchase time from 45 seconds to 12 seconds by caching SVG schemas and optimizing Redis lock checks.
Checkout process:
- Validate seats (not sold, not locked)
- Create order in sale: film + screening + seat as cart items
- Online payment — YooKassa / CloudPayments / SBP
- Generate electronic ticket with QR code
- Send via email and optionally push via Telegram Bot API
QR contains an encrypted string: order ID, seat number, HMAC-SHA256 checksum. The terminal at hall entrance scans the QR and marks the ticket. Second scan — denied. For cinema chains, QR must be unique across the entire chain, not just one cinema — serial number includes venue code.
How is the schedule synchronized with cinema systems?
Chain cinemas work with automated systems. The site connects to them for schedule and sales sync:
| System | Protocol | Data Provided |
|---|---|---|
| Kinoplan | REST API | Schedule, sales, booking, fiscalization, halls and charts |
| Vista Cinema | SOAP / REST | Screenings, prices, seat status, transactions |
| KSEA | XML-RPC | Subscriptions, gift cards, bonuses |
| Ticketon | REST API | Sales widget, status webhooks |
When working with Kinoplan, the Bitrix site acts as a frontend, while the sales backend is on Kinoplan's side. A sync agent runs every 5 minutes: fetches schedule, seat statuses, new films. When a purchase is made via the site, the order is sent to Kinoplan's API, and a transaction ID comes back for the fiscal receipt.
For independent cinemas without an external system, all logic lives inside Bitrix. Fiscalization of the receipt — via the online cash register module: integration with Atol, OrangeData, or the cloud cash register of the payment provider (YooKassa can send receipts to OFD itself).
Bar menu with pre-order for the screening
At the ticket purchase stage, a step "Add to order" appears: popcorn (three sizes), drinks, combo packs, snacks. Items are stored in the BarMenu info block with prices and photos. When added — additional items in the sale cart.
After payment, the bar receives the order via an internal webhook: composition, order number, screening time. By the time the viewer arrives, the order is ready. Stock balances sync with 1C:Trade Management via the standard exchange module — if popcorn runs out, the item is deactivated on the site.
Combo packs are implemented via sale cart rules: "large popcorn + large cola = 15% discount." The administrator creates a combo in the visual discount constructor without developer involvement.
How does the loyalty program work?
Bonus system — via internal accounts of the sale module:
- Accrue 5–10% of the receipt amount after visit
- Spend up to 50% of the next ticket cost
- Birthday — double bonuses within a week (handler checks
UF_BIRTHDAY) - Accumulative tiers: Viewer → Cinemaphile → Critic (thresholds in HL block LoyaltyLevels)
View loyalty tiers
- Viewer: 0-500 points - Cinemaphile: 501-2000 points - Critic: 2001+ pointsIdentification — by phone number. Login in personal account via SMS code: main module with custom handler through messageservice.
Deliverables
- Project documentation: info block architecture, seating charts, integration descriptions
- Source code of the site on 1C-Bitrix with comments (Git repository)
- Administration and content management instructions
- Training managers on schedule and sales management
- Technical support for 3 months after launch
Our cinema website development on 1C-Bitrix includes online ticket sales with zone pricing and TMDB integration for automatic movie data. Our team of Bitrix developers has over 5 years of experience and has completed more than 20 cinema projects. We guarantee compatibility with Bitrix updates and provide 3 months of free support.
Technical timeline
| Stage | Duration |
|---|---|
| Design and prototype | 2 weeks |
| Design (responsive, seating charts) | 3–4 weeks |
| Layout | 2–3 weeks |
| Development (info blocks, schedule, TMDB) | 3–4 weeks |
| SVG seating charts and seat sales | 2–3 weeks |
| Integration (payment system, online cash register, Kinoplan) | 2–4 weeks |
| Bar menu and bonus system | 1–2 weeks |
| Testing and content filling | 2 weeks |
| Total | 17–24 weeks |
When integrating with Kinoplan or Vista, the schedule and seat sales stages partially overlap — reducing the timeline by 2–3 weeks. For a small single-screen cinema without external systems, the project fits into 10–12 weeks. Cost is calculated after requirements analysis: number of halls, presence of cinema system, integration scope.
Contact us for a consultation. We'll help you choose the optimal solution for your cinema.







