Driving school website development using 1C-Bitrix

Our company is engaged in the development, support and maintenance of Bitrix and Bitrix24 solutions of any complexity. From simple one-page sites to complex online stores, CRM systems with 1C and telephony integration. The experience of developers is confirmed by certificates from the vendor.
Our competencies:
Development stages
Latest works
  • image_website-b2b-advance_0.png
    B2B ADVANCE company website development
    1175
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Website development for FIXPER company
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Development based on Bitrix, Bitrix24, 1C for the company Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Development based on 1C Enterprise for MIRSANBEL
    747
  • image_crm_dolbimby_434_0.webp
    Website development on CRM Bitrix24 for DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Development based on Bitrix24 for the company TECHNOTORGKOMPLEKS
    976

Driving School Website Development on 1C-Bitrix

A driving school website is not just a showcase with a phone number and address. It is a working tool that handles student enrollment, manages instructor schedules, and relieves administrators from routine phone calls. On 1C-Bitrix, such a project is built using information blocks, Highload blocks, and custom components without needing third-party services.

Course Catalog: Information Block Structure

The foundation of the catalog is the "Courses" information block with the "Training" type. Each element corresponds to one training program. Element properties:

  • Category (list): A, A1, B, B1, C, CE, D, DE — according to driver's license classification
  • Duration (number): total number of days in the program
  • Theory Hours (number): academic hours of theoretical part
  • Practical Hours (number): hours of driving with an instructor
  • Format (list): in-person, distance, blended
  • Branches (element binding): connection to the "Branches" information block

Information block sections repeat the categories — this creates SEO pages like /kursy/kategoriya-b/ with automatic filtering. Each section has its own SEO template set through section properties: title, description, og:image.

The bitrix:catalog.section.list component displays a category tree on the homepage, while bitrix:news.list shows course cards within each section. Format filtering is implemented using bitrix:catalog.smart.filter with AJAX reload without page redrawing.

Online Enrollment: Highload Block and Free Space Logic

Student enrollment in a course is not just a web form. You need to show available groups, start dates, number of free spaces, and binding to a specific branch.

The "Groups" Highload block contains the following fields:

Field Type Purpose
UF_COURSE_ID Element binding Link to course from information block
UF_BRANCH_ID Element binding Branch
UF_DATE_START Date Class start date
UF_DATE_END Date Planned end date
UF_MAX_STUDENTS Number Maximum students in group
UF_CURRENT_COUNT Number Current number enrolled
UF_STATUS List Enrollment open / closed / completed
UF_SCHEDULE String Days and time (MON-WED-FRI 18:00)

A Highload block is used instead of a regular information block for performance: with 15+ branches and dozens of groups simultaneously, queries through ORM D7 work many times faster.

The enrollment form works in cascade: student selects category → branch → sees only groups with "Enrollment open" status and UF_CURRENT_COUNT < UF_MAX_STUDENTS. After submitting the application, a handler on the OnAfterHLBlockElementAdd event increments the counter, and if the group is full, automatically switches the status.

Class Schedule

The schedule is implemented using two information blocks: "Theory Schedule" and "Driving Schedule".

Theory is linked to a group: fixed days and times, the same for all students in the group. Displayed as a table in the personal account and on the group page.

Driving is individual. The "Driving Slots" information block contains binding to instructor, date, start and end times, status (free / booked / completed). A student in their personal account can see available slots from their instructor and book them via AJAX request to a custom controller.

Student Personal Account

The personal account is built on the bitrix:main.profile component with a custom template and additional tabs:

  • My Course — group information, instructor, dates
  • Schedule — theory (general table) + driving (personal slots)
  • Progress — number of theory classes completed, driving hours, internal test results
  • Grades — mock exam results
  • Documents — contract, payment receipts (files from user properties)

Authorization uses the standard main module with SMS confirmation via sms.ru or a connected SMSC gateway.

Online Traffic Rules Tests: Deep-Dive

Testing traffic rules is the key function that brings students back to the site daily. Standard Bitrix modules (surveys, web forms) are not suitable for this: no timer, no randomization, no topic breakdown with statistics.

Question Storage Architecture

The "Traffic Rules Questions" information block with sections by topic: "Road Intersections", "Road Signs", "Traffic Signals", "First Aid", etc. (40 topics total according to the State Motor Traffic Safety Inspection exam structure).

Element properties:

  • Question Text — detailed element description (with image support via visual editor)
  • Image — road situation picture (file-type property)
  • Option 1–5 — string properties for answers
  • Correct Answer — number (option number)
  • Explanation — text property with correct answer breakdown and link to traffic rules section
  • Difficulty — list (easy / medium / hard)
  • Ticket — number (official exam ticket number, 1-40)
  • Position in Ticket — number (question position, 1-20)

Custom Testing Component

The atlas:pdd.test component works in three modes:

Exam Mode — 20 questions from various topics, 20 minutes per ticket. The component selects questions using CIBlockElement::GetList with ticket number filter or creates a random set using RAND() in SORT. The timer is implemented on the client side (JavaScript countdown), but control time is fixed on the server in the session — when the page reloads, the timer continues from the same point.

By Topic Mode — student selects a topic and receives all section questions in random order. No time limit. After each answer, an explanation is shown.

Marathon Mode — all 800 questions in sequence. Progress is saved in a Highload block so it can be resumed from any device after authorization.

Saving and Statistics

The results of each attempt are recorded in the "Test Results" Highload block:

Field Type Content
UF_USER_ID Number User ID
UF_MODE List Exam / topic / marathon
UF_TOPIC_ID Number Section ID (for topic mode)
UF_TICKET_NUM Number Ticket number (for exam mode)
UF_CORRECT Number Number of correct answers
UF_TOTAL Number Total questions
UF_TIME_SPENT Number Time spent in seconds
UF_ANSWERS String JSON with details for each question
UF_CREATED DateTime When test was passed

Based on this data, the personal account builds analytics: percentage of correct answers by topic, dynamics over the past week, weak topics (where percentage is below 80%). Chart.js is used for visualization, data is loaded via AJAX request to a D7 controller.

Answer Mechanics

The frontend sends an AJAX request with the question ID and the selected option number. The controller checks the answer on the server (the correct answer number is never sent to the client before answering) and returns the result: correct/incorrect, explanation text, link to traffic rules section. This prevents cheating through DevTools — answers are verified only on the server.

To protect against statistics manipulation, a debounce check is implemented: if less than 2 seconds passed between answers, the result is not counted (bot or autoclicker).

Graduate Reviews

The "Reviews" information block with mandatory pre-moderation (WF_STATUS_ID). Properties: name, photo, category (category they passed), text, rating (1-5), course completion date. Reviews with binding to the corresponding category are displayed on the course page using bitrix:news.list with property filtering.

Additionally, a review collection widget is implemented: students receive an email with a form link 7 days after completing the course. Sending is done via bitrix:iblock.element.add.form with a custom template.

Work Stages

Stage Content Timeline
Analysis Course structure, branch map, testing requirements 5–7 days
Design Prototypes, information block structure, ER-schema for Highload blocks 5–7 days
UI Design UI-kit, mockups of key pages, responsive design 10–14 days
Development & Integration Component templates, course catalog, online enrollment 15–20 days
Testing Component Development of atlas:pdd.test, question database population 10–14 days
Personal Account Profile, schedule, progress, analytics 7–10 days
Testing & Launch QA, load testing of tests, production migration 5–7 days

Total Timeline — 8–11 weeks, provided the traffic rules question database is supplied by the client in structured format (Excel/CSV). If manual entry of 800 questions with images is required — add 2–3 weeks for content.