Разработка сайта автошколы на 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-шлюз.
Онлайн-тесты ПДД: deep-dive
Тестирование ПДД — ключевая функция, ради которой ученики возвращаются на сайт ежедневно. Стандартные модули Битрикс (опросы, веб-формы) для этого не подходят: нет таймера, нет рандомизации, нет разбивки по темам с подсчётом статистики.
Архитектура хранения вопросов
Инфоблок «Вопросы ПДД» с разделами по темам: «Проезд перекрёстков», «Дорожные знаки», «Сигналы светофора», «Первая помощь» и т.д. (всего 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 — ответы проверяются только серверно.
Для защиты от накрутки статистики введена дебаунс-проверка: если между ответами прошло менее 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 недели на контент.







