Разработка сайта онлайн-школы на 1С-Битрикс
Онлайн-школа на Битрикс — это не LMS в чистом виде. Moodle или iSpring лучше справляются с прохождением курсов, тестами и аналитикой обучения. Но когда задача — продавать курсы, управлять доступом после оплаты, сегментировать аудиторию и запускать маркетинговые кампании, Битрикс с модулем sale оказывается сильной платформой. LMS-часть либо строится как кастомный модуль, либо подключается внешняя система через API.
Разберём подробно продажу курсов и контроль доступа — это архитектурное ядро проекта.
Продажа курсов и контроль доступа к контенту
Ключевая механика: пользователь оплачивает курс на сайте и получает доступ к его материалам. Звучит просто, но реализация зависит от бизнес-модели. Разовая покупка, подписка, пакеты курсов, корпоративный доступ — каждый вариант требует своей архитектуры.
Каталог курсов
Инфоблок Courses с торговым каталогом (подключён модуль catalog). Разделы — направления обучения (программирование, дизайн, маркетинг, языки). Свойства элемента:
| Свойство | Тип | Назначение |
|---|---|---|
LEVEL |
Список | Начальный / средний / продвинутый |
FORMAT |
Список | Видеокурс / вебинар / текст / смешанный |
DURATION_HOURS |
Число | Общая длительность в часах |
LESSONS_COUNT |
Число | Количество уроков |
TEACHER_ID |
Привязка E |
Преподаватель (инфоблок Teachers) |
PREVIEW_LESSONS |
Множественная привязка E |
Бесплатные уроки для превью |
CERTIFICATE |
Логический | Выдаётся ли сертификат |
START_DATE |
Дата | Дата старта (для потоковых курсов) |
ACCESS_DAYS |
Число | Срок доступа после покупки (0 = бессрочно) |
USER_GROUP_ID |
Число | ID группы пользователей для доступа |
Цена курса — стандартное свойство торгового каталога (b_catalog_price). Для курсов с вариантами (базовый / с проверкой ДЗ / с менторством) используются торговые предложения (SKU) — элементы вложенного инфоблока с разными ценами и набором включённых возможностей.
Механизм контроля доступа
Есть три подхода, каждый со своими компромиссами:
Вариант 1: Группы пользователей. При оплате заказа пользователь добавляется в группу, привязанную к курсу. Контент курса (страницы, файлы) защищён правами доступа этой группы. Это штатный механизм Битрикс, работает на уровне модуля main.
Реализация: обработчик события OnSaleOrderPaid. При переходе заказа в статус «Оплачен» скрипт получает список товаров, для каждого товара-курса — значение свойства USER_GROUP_ID, и добавляет пользователя в соответствующую группу через CUser::SetUserGroup().
// Псевдокод обработчика
$order = \Bitrix\Sale\Order::load($orderId);
foreach ($order->getBasket() as $item) {
$courseId = $item->getProductId();
$groupId = getGroupIdByCourse($courseId);
addUserToGroup($order->getUserId(), $groupId);
}
Проблема этого подхода — масштабируемость. При 200 курсах — 200 групп пользователей. Управление становится громоздким. Кроме того, если нужен срочный доступ (курс на 90 дней), требуется cron-задача, которая ежедневно проверяет сроки и исключает пользователей из групп.
Вариант 2: Свойство заказа / отдельная таблица доступов. Создаётся Highload-блок CourseAccess:
| Поле | Тип | Назначение |
|---|---|---|
UF_USER_ID |
Число | ID пользователя |
UF_COURSE_ID |
Число | ID курса |
UF_ORDER_ID |
Число | ID заказа |
UF_DATE_FROM |
Дата/время | Начало доступа |
UF_DATE_TO |
Дата/время | Окончание доступа (null = бессрочно) |
UF_STATUS |
Список | active / expired / revoked |
При оплате — создаётся запись в CourseAccess. При отображении контента курса — проверка наличия активной записи для текущего пользователя. Cron-агент ежедневно обновляет UF_STATUS для записей с истёкшим UF_DATE_TO.
Этот вариант гибче: легко реализовать ограниченный доступ, заморозку, продление, корпоративные лицензии (несколько пользователей на один заказ).
Вариант 3: Гибрид. Группы пользователей для базового разграничения (зарегистрированный / купивший хотя бы один курс / подписчик), Highload-блок для точечного контроля по конкретным курсам. Это оптимальный подход для школ с 20+ курсами.
Платёжные системы
Модуль sale поддерживает стандартные платёжные системы: ЮKassa (бывш. Яндекс.Касса), Робокасса, CloudPayments, Stripe. Для онлайн-школы критичны:
- Рекуррентные платежи — для подписочной модели. ЮKassa и CloudPayments поддерживают через сохранение токена карты
-
Чеки по 54-ФЗ — автоматическая фискализация через ОФД. В Битрикс настраивается через обработчик платёжной системы: параметры
PS_IS_CASHи интеграция с АТОЛ, OrangeData или облачную кассу от платёжного агрегатора - Возвраты — автоматический возврат через API платёжной системы при отмене заказа
Промокоды
Модуль sale имеет штатный механизм купонов и правил корзины. Промокод — это купон (b_sale_discount_coupon), привязанный к правилу скидки (b_sale_discount). Типы купонов: одноразовый, многоразовый, на одного пользователя.
Для реферальной программы — кастомный модуль. Схема: пользователь получает уникальный реферальный код (хранится в UF_REFERRAL_CODE профиля). Приглашённый пользователь при регистрации указывает код. При покупке курса приглашённым — реферер получает бонус (запись в Highload-блоке ReferralBonuses): скидку на следующую покупку или начисление на внутренний счёт (sale.account).
Каталог курсов: отображение и навигация
Компонент catalog.section выводит курсы с фильтрацией:
- По направлению (раздел инфоблока)
- По уровню сложности
- По формату (видео / вебинар / текст)
- По преподавателю
- По наличию сертификата
- По цене (диапазон)
Карточка курса содержит: название, краткое описание, преподаватель (фото + имя), длительность, количество уроков, рейтинг (средняя оценка от прошедших курс), цена, кнопка «Купить» или «Начать бесплатно» (для курсов с бесплатными вводными уроками).
Детальная страница — компонент catalog.element с кастомным шаблоном: программа курса (список уроков с пометкой «бесплатный» / «платный»), описание, об авторе, отзывы выпускников, блок покупки.
LMS-функционал
Собственная LMS на Битрикс — это кастомный модуль. Штатных инструментов нет. Основные сущности:
Уроки — инфоблок Lessons, привязанный к курсу. Свойства: порядковый номер, тип контента (видео/текст/тест), видео-URL (Vimeo, Kinescope — для защиты от скачивания), текстовый контент (в детальном описании), длительность, материалы для скачивания.
Прогресс прохождения — Highload-блок UserProgress: UF_USER_ID, UF_LESSON_ID, UF_STATUS (not_started / in_progress / completed), UF_COMPLETED_AT, UF_SCORE (для тестов). Прогресс обновляется AJAX-запросом: при просмотре видео до конца, при прохождении теста, при нажатии «Урок пройден».
Тесты — Highload-блок TestQuestions: UF_LESSON_ID, UF_QUESTION_TEXT, UF_ANSWERS (JSON-массив вариантов), UF_CORRECT_ANSWER, UF_TYPE (single_choice / multiple_choice / text_input). Результаты тестов — в UserProgress с детализацией в отдельном HL-блоке TestResults.
Сертификаты — генерация PDF по шаблону при завершении курса (все уроки в статусе completed, тесты пройдены с минимальным баллом). Шаблон — mPDF с подстановкой ФИО, названия курса, даты, уникального номера. Номер сертификата — для верификации на сайте по прямой ссылке.
Альтернатива: интеграция с Moodle
Если LMS-функционал критичен и требуется глубокая аналитика обучения, разумнее интегрировать Битрикс с Moodle через Moodle Web Services API. Битрикс отвечает за витрину, продажу и маркетинг, Moodle — за обучение. При оплате курса на Битрикс — API-запрос к Moodle для записи пользователя на курс (core_enrol_get_enrolled_users, enrol_manual_enrol_users).
Аналогично — интеграция с GetCourse через их API для школ, уже работающих на этой платформе, но нуждающихся в более гибкой витрине.
Вебинарная комната
Битрикс не содержит собственного вебинарного модуля. Интеграция с внешними сервисами:
-
Zoom — через Zoom API (OAuth 2.0). Создание вебинара:
POST /v2/users/{userId}/webinars. Регистрация участника:POST /v2/webinars/{webinarId}/registrants. Ссылка для входа выдаётся после оплаты или по записи - Телемост / VK Звонки — для российских школ, избегающих зарубежных сервисов
Расписание вебинаров — инфоблок Webinars: дата/время, тема, преподаватель, ссылка на комнату (заполняется автоматически при создании через API), запись вебинара (ссылка на видео, доступна после завершения).
Рассылки по сегментам
Модуль sender в Битрикс поддерживает сегментацию получателей. Сегменты для онлайн-школы:
- Купившие курс X, но не начавшие прохождение (мотивационное письмо)
- Прошедшие 50% курса (напоминание продолжить)
- Завершившие курс (предложение следующего уровня — upsell)
- Зарегистрированные, но не купившие (welcome-цепочка → предложение бесплатного мини-курса)
- Неактивные 30+ дней (реактивация)
Сегменты строятся через SQL-запросы к Highload-блокам CourseAccess и UserProgress. Каждый сегмент — connector в модуле sender, реализуемый как PHP-класс, наследующий \Bitrix\Sender\Connector\Base.
Сроки реализации
| Масштаб | Описание | Срок |
|---|---|---|
| Монокурс / мини-школа | 1-5 курсов, продажа через sale, базовый ЛК, видеоуроки на Vimeo |
6-8 недель |
| Средняя онлайн-школа | 10-30 курсов, подписочная модель, тесты, сертификаты, вебинары, рассылки | 14-20 недель |
| Крупная платформа | 50+ курсов, интеграция с Moodle, реферальная программа, корпоративные лицензии, мобильное приложение (API) | 24-32 недели |
Основное время уходит на LMS-функционал. Если интегрироваться с Moodle или GetCourse вместо разработки с нуля — сроки сокращаются на 4-8 недель.







