Розробка сайту автошколи на 1С-Бітрікс
Сайт автошколи — це не вітрина з номером телефону та адресою. Це робочий інструмент, який забезпечує запис учнів, керує розкладом інструкторів та звільняє адміністраторів від рутинних дзвінків. На 1С-Бітрікс такий проект будується на поєднанні інформаційних блоків, Highload-блоків та кастомних компонентів без необхідності підключати сторонні сервіси.
Каталог курсів: структура інформаційного блоку
Основу каталогу становить інформаційний блок «Курси» з типом «Навчання». Кожен елемент відповідає одній програмі навчання. Властивості елемента:
- Категорія (список): A, A1, B, B1, C, CE, D, DE — за класифікацією водійських прав
- Тривалість (число): загальна кількість днів програми
- Години теорії (число): академічні години теоретичної частини
- Години практики (число): години їзди з інструктором
- Формат (список): очний, дистанційний, змішаний
- Філіали (прив'язка до елементів): зв'язок з інформаційним блоком «Філіали»
Розділи інформаційного блоку повторюють категорії — це створює SEO-сторінки вигляду /kursy/kategoriya-b/ з автоматичною фільтрацією. Для кожного розділу встановлюється власний SEO-шаблон через властивості розділу: title, description, og:image.
Компонент bitrix:catalog.section.list виводить дерево категорій на головній сторінці, а bitrix:news.list — карточки курсів всередині розділу. Фільтрація за форматом реалізується через bitrix:catalog.smart.filter з AJAX-перезавантаженням без перерисовки сторінки.
Онлайн-запис: Highload-блок та логіка вільних місць
Запис учня на курс — це не просто веб-форма. Потрібно показати доступні групи, дати початку, кількість вільних місць та прив'язку до конкретного філіалу.
Highload-блок «Групи» містить такі поля:
| Поле | Тип | Призначення |
|---|---|---|
| UF_COURSE_ID | Прив'язка до елемента | Зв'язок з курсом з інформаційного блоку |
| UF_BRANCH_ID | Прив'язка до елемента | Філіал |
| UF_DATE_START | Дата | Дата початку занять |
| UF_DATE_END | Дата | Планова дата закінчення |
| UF_MAX_STUDENTS | Число | Максимум учнів у групі |
| UF_CURRENT_COUNT | Число | Поточна кількість записаних |
| UF_STATUS | Список | Набір відкритий / закритий / завершена |
| UF_SCHEDULE | Рядок | Дні тижня та час (ПН-СР-ПТ 18:00) |
Highload-блок вибирається замість звичайного інформаційного блоку для продуктивності: при 15+ філіалах та десятках груп одночасно вибір через ORM D7 працює в рази швидше.
Форма запису працює каскадно: учень вибирає категорію → філіал → бачить тільки групи зі статусом «Набір відкритий» та UF_CURRENT_COUNT < UF_MAX_STUDENTS. Після відправки заявки обробник на подіях OnAfterHLBlockElementAdd збільшує лічильник і, якщо група заповнена, автоматично змінює статус.
Розклад занять
Розклад реалізується двома інформаційними блоками: «Розклад теорії» та «Розклад їзди».
Теорія прив'язана до групи: фіксовані дні та час, однакові для всіх учнів групи. Відображається таблицею в особистому кабінеті та на сторінці групи.
Їзда — індивідуальна. Інформаційний блок «Слоти їзди» містить прив'язку до інструктора, дату, час початку та закінчення, статус (вільна / забронирована / проведена). Учень у своєму особистому кабінеті бачить доступні слоти свого інструктора та бронює їх через AJAX-запит до кастомного контролера.
Особистий кабінет учня
Особистий кабінет будується на компоненті bitrix:main.profile з кастомним шаблоном та додатковими вкладками:
- Мій курс — інформація про групу, інструктора, дати
- Розклад — теорія (загальна таблиця) + їзда (персональні слоти)
- Прогрес — кількість пройдених занять теорії, годин їзди, результати внутрішніх тестів
- Оцінки — результати пробних іспитів
- Документи — договір, квитанції про оплату (файли з властивостей користувача)
Авторизація — стандартний модуль main з SMS-підтвердженням через sms.ru або підключений SMSC-шлюз.
Онлайн-тести ПДР: детальний розгляд
Тестування ПДР — ключова функція, заради якої учні повертаються на сайт щодня. Стандартні модулі Бітрікс (опитування, веб-форми) для цього не підходять: немає таймера, немає рандомізації, немає розподілу за темами з підрахунком статистики.
Архітектура зберігання питань
Інформаційний блок «Питання ПДР» з розділами за темами: «Проїзд перехресть», «Дорожні знаки», «Сигнали світлофора», «Перша допомога» тощо (всього 40 тем за структурою іспиту Державтоінспекції).
Властивості елемента:
- Текст питання — детальний опис елемента (з підтримкою зображень через візуальний редактор)
- Зображення — картинка дорожної ситуації (властивість типу «Файл»)
- Варіант 1–5 — рядкові властивості для відповідей
- Правильна відповідь — число (номер варіанта)
- Пояснення — текстова властивість з розбором правильної відповіді та посиланням на пункт ПДР
- Складність — список (легкий / середній / складний)
- Квиток — число (номер офіційного екзаменаційного квитка, 1-40)
- Номер у квитку — число (позиція питання, 1-20)
Кастомний компонент тестування
Компонент atlas:pdd.test працює в трьох режимах:
Режим «Іспит» — 20 питань із різних тем, 20 хвилин на весь квиток. Компонент вибирає питання методом CIBlockElement::GetList з фільтром за номером квитка або формує випадковий набір через RAND() у SORT. Таймер реалізований на клієнті (JavaScript, countdown), але контрольний час фіксується на сервері в сесії — при перезавантаженні сторінки таймер продовжує з того ж моменту.
Режим «За темами» — учень вибирає тему, отримує всі питання розділу в випадковому порядку. Обмежень за часом немає. Після кожної відповіді показується пояснення.
Режим «Марафон» — всі 800 питань поспіль. Прогрес зберігається в Highload-блоці, щоб його можна було продовжити з будь-якого пристрою після авторизації.
Збереження та статистика
Результати кожної спроби записуються в Highload-блок «Результати тестів»:
| Поле | Тип | Вміст |
|---|---|---|
| UF_USER_ID | Число | ID користувача |
| UF_MODE | Список | Іспит / тема / марафон |
| UF_TOPIC_ID | Число | ID розділу (для режиму «За темами») |
| UF_TICKET_NUM | Число | Номер квитка (для режиму «Іспит») |
| UF_CORRECT | Число | Кількість правильних відповідей |
| UF_TOTAL | Число | Загальна кількість питань |
| UF_TIME_SPENT | Число | Витрачений час у секундах |
| UF_ANSWERS | Рядок | JSON з деталізацією по кожному питанню |
| UF_CREATED | Дата/час | Коли пройдено тест |
На основі цих даних у особистому кабінеті будується аналітика: відсоток правильних відповідей за темами, динаміка за останній тиждень, слабкі теми (де відсоток нижче 80%). Для візуалізації використовується Chart.js, дані завантажуються AJAX-запитом до контролера D7.
Механіка відповіді
Фронтенд відправляє AJAX-запит з ID питання та номером вибраного варіанта. Контролер перевіряє відповідь на сервері (номер правильного варіанта ніколи не відправляється клієнту до відповіді) та повертає результат: правильно/неправильно, текст пояснення, посилання на пункт ПДР. Це виключає підглядування через DevTools — відповіді перевіряються тільки на сервері.
Для захисту від накрутки статистики введена debounce-перевірка: якщо між відповідями пройшло менше 2 секунд, результат не зараховується (бот або автокліківер).
Відгуки випускників
Інформаційний блок «Відгуки» з обов'язковою премодерацією (WF_STATUS_ID). Властивості: ім'я, фото, категорія (на яку здавав), текст, оцінка (1-5), дата закінчення навчання. На сторінці курсу виводяться тільки відгуки з прив'язкою до відповідної категорії через bitrix:news.list з фільтром за властивістю.
Крім того, реалізований віджет збору відгуків: учню через 7 днів після завершення курсу приходить email зі посиланням на форму. Відправка здійснюється через bitrix:iblock.element.add.form з кастомним шаблоном.
Етапи робіт
| Етап | Вміст | Термін |
|---|---|---|
| Аналітика | Структура курсів, карта філіалів, вимоги до тестування | 5–7 днів |
| Проектування | Прототипи, структура інформаційних блоків, ER-схема Highload-блоків | 5–7 днів |
| Дизайн | UI-kit, макети ключових сторінок, адаптивний дизайн | 10–14 днів |
| Розробка та інтеграція | Шаблони компонентів, каталог курсів, онлайн-запис | 15–20 днів |
| Компонент тестування | Розробка atlas:pdd.test, заповнення бази питань |
10–14 днів |
| Особистий кабінет | Профіль, розклад, прогрес, аналітика | 7–10 днів |
| Тестування та запуск | QA, навантажувальне тестування тестів, перенос на продакшен | 5–7 днів |
Загальний термін — 8–11 тижнів за умови, що база питань ПДР надана замовником у структурованому вигляді (Excel/CSV). Якщо потрібне ручне введення 800 питань із зображеннями — закладіть додатково 2–3 тижні на контент.







