Разработка LMS на 1С-Битрикс: создание образовательной платформы

Разработка образовательной платформы (LMS) на 1С-Битрикс Вы уже используете 1С-Битрикс для магазина или корпоративного портала, и теперь нужно запустить обучение для партнёров. Отдельная LMS — это лишняя админка, ещё одна авторизация и головная боль с синхронизацией. Мы решаем это иначе: строим п
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Разработка LMS на 1С-Битрикс: создание образовательной платформы
Средний
~1-2 недели

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1460
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1019
  • Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    764
  • Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    882
  • Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    810
  • Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1166

Разработка образовательной платформы (LMS) на 1С-Битрикс

Вы уже используете 1С-Битрикс для магазина или корпоративного портала, и теперь нужно запустить обучение для партнёров. Отдельная LMS — это лишняя админка, ещё одна авторизация и головная боль с синхронизацией. Мы решаем это иначе: строим платформу прямо внутри вашего Битрикс. Единая база пользователей, общие заказы, платёжный модуль — всё работает из коробки. За 10+ лет мы реализовали 7 образовательных проектов на Битрикс и знаем все подводные камни.

Типичная ситуация: клиент уже продаёт товары через интернет-магазин на Битрикс, а теперь хочет запустить онлайн-курсы. Внедрение отдельной LMS (например, Moodle) потребовало бы дублирования пользователей, настройки SSO и переноса данных. Всё это решается штатными средствами Битрикс — инфоблоками, HL-блоками и группами пользователей. Экономия времени на интеграцию — до 40% по сравнению с внешними решениями.

Почему Битрикс подходит для LMS?

Битрикс даёт инфоблоки для хранения курсов и уроков, группы пользователей для доступа, агенты для фоновых задач и встроенные платёжные системы. Готовая LMS на Битрикс обходится в 2–3 раза дешевле внедрения отдельного Moodle, если бизнес уже использует экосистему 1С-Битрикс. Всё управляется из одной админки, а для учеников — единый личный кабинет. Дополнительно используем тегированное кэширование для страниц курсов: при изменении контента сбрасывается только кэш конкретного урока, а не всего раздела.

Архитектура хранения данных

LMS на Битрикс строится на комбинации инфоблоков и HighLoad-блоков (HL-блоки, таблицы через ORM D7).

Инфоблоки:

Инфоблок Код Назначение
Курсы lms_courses Основные сущности курсов
Уроки lms_lessons Уроки внутри курса
Тесты lms_quizzes Задания и тесты

HL-блоки (через ORM):

// Прогресс пользователя class UserProgressTable extends \Bitrix\Main\ORM\Data\DataManager { public static function getTableName(): string { return 'b_hl_lms_user_progress'; } public static function getMap(): array { return [ new IntegerField('ID', ['primary' => true, 'autocomplete' => true]), new IntegerField('USER_ID'), new IntegerField('COURSE_ID'), // ID элемента инфоблока курса new IntegerField('LESSON_ID'), // ID элемента инфоблока урока new EnumField('STATUS', ['values' => ['NOT_STARTED', 'IN_PROGRESS', 'COMPLETED']]), new IntegerField('PROGRESS_PERCENT'), // 0–100 new DatetimeField('STARTED_AT'), new DatetimeField('COMPLETED_AT'), new IntegerField('TIME_SPENT_SEC'), // Время на урок ]; } } // Записи на курс (enrollment) class CourseEnrollmentTable extends \Bitrix\Main\ORM\Data\DataManager { public static function getTableName(): string { return 'b_hl_lms_enrollment'; } public static function getMap(): array { return [ new IntegerField('ID', ['primary' => true, 'autocomplete' => true]), new IntegerField('USER_ID'), new IntegerField('COURSE_ID'), new EnumField('STATUS', ['values' => ['ACTIVE', 'COMPLETED', 'EXPIRED', 'REFUNDED']]), new DatetimeField('ENROLLED_AT'), new DatetimeField('EXPIRES_AT'), // NULL = бессрочно new FloatField('PAID_AMOUNT'), new IntegerField('ORDER_ID'), // Привязка к заказу модуля sale ]; } } 

Структура курса и уроков

Курс — элемент инфоблока lms_courses со свойствами:

Свойство Код Тип
Категория CATEGORY Список
Длительность DURATION_HOURS Число
Уровень LEVEL Список (Начинающий/Средний/Эксперт)
Тип доступа ACCESS_TYPE Список (Бесплатный/Платный/По подписке)
Группа доступа ACCESS_GROUP_ID Число (ID группы b_group)
Сертификат HAS_CERTIFICATE Флаг

Урок — элемент инфоблока lms_lessons, привязанный к курсу через свойство COURSE_ID. Порядок уроков — через SORT. Тип контента урока (LESSON_TYPE): Видео / Текст / Тест / Вебинар.

Как управляется доступ к курсу?

Доступ контролируется через группы пользователей Битрикс. Каждый курс имеет свою группу (b_group). После оплаты или записи пользователь добавляется в группу:

class EnrollmentService { public function enroll(int $userId, int $courseId): void { $course = \CIBlockElement::GetByID($courseId)->GetNext(); $groupId = (int)$course['PROPERTY_ACCESS_GROUP_ID_VALUE']; if ($groupId) { $currentGroups = \CUser::GetUserGroup($userId); if (!in_array($groupId, $currentGroups)) { $currentGroups[] = $groupId; \CUser::SetUserGroup($userId, $currentGroups); } } CourseEnrollmentTable::add([ 'USER_ID' => $userId, 'COURSE_ID' => $courseId, 'STATUS' => 'ACTIVE', 'ENROLLED_AT' => new \Bitrix\Main\Type\DateTime(), ]); } } 

Доступ к страницам курса проверяется аналогично: если записи в CourseEnrollmentTable нет или статус не ACTIVE — происходит редирект на страницу покупки.

Отслеживание прогресса

Прогресс фиксируется при нескольких условиях в зависимости от типа урока:

  • Видео: трекинг через событие timeupdate плеера, отметка «просмотрено» при прохождении 80% видео.
  • Текст: отметка при прокрутке до конца страницы (IntersectionObserver на последний абзац).
  • Тест: при успешной сдаче (балл ≥ проходному порогу).
// AJAX-эндпоинт фиксации прогресса // POST /local/ajax/lms_progress.php $lessonId = (int)$_POST['lesson_id']; $courseId = (int)$_POST['course_id']; $userId = $USER->GetID(); $percent = min(100, (int)$_POST['percent']); $existing = UserProgressTable::getList([ 'filter' => ['USER_ID' => $userId, 'LESSON_ID' => $lessonId], ])->fetch(); if ($existing) { if ($percent > $existing['PROGRESS_PERCENT']) { UserProgressTable::update($existing['ID'], [ 'PROGRESS_PERCENT' => $percent, 'STATUS' => $percent >= 100 ? 'COMPLETED' : 'IN_PROGRESS', 'COMPLETED_AT' => $percent >= 100 ? new \Bitrix\Main\Type\DateTime() : null, ]); } } else { UserProgressTable::add([ 'USER_ID' => $userId, 'COURSE_ID' => $courseId, 'LESSON_ID' => $lessonId, 'STATUS' => $percent >= 100 ? 'COMPLETED' : 'IN_PROGRESS', 'PROGRESS_PERCENT' => $percent, 'STARTED_AT' => new \Bitrix\Main\Type\DateTime(), 'COMPLETED_AT' => $percent >= 100 ? new \Bitrix\Main\Type\DateTime() : null, ]); } 

Тестирование и квизы

Вопросы теста — элементы инфоблока lms_quizzes со свойствами: тип вопроса (одиночный выбор, множественный, текстовый ответ), варианты ответов (JSON в свойстве-строке), правильный ответ, вес вопроса.

Результаты тестирования — HL-блок b_hl_lms_quiz_attempt:

CREATE TABLE b_hl_lms_quiz_attempt ( ID SERIAL PRIMARY KEY, USER_ID INTEGER, QUIZ_ID INTEGER, SCORE INTEGER, -- набранные баллы MAX_SCORE INTEGER, -- максимум PASSED BOOLEAN, ANSWERS_JSON TEXT, -- JSON с ответами пользователя CREATED_AT TIMESTAMP ); 

Сертификаты

При завершении курса (все уроки COMPLETED) — генерация PDF-сертификата через библиотеку FPDF или TCPDF:

class CertificateGenerator { public function generate(int $userId, int $courseId): string { $user = \CUser::GetByID($userId)->Fetch(); $course = \CIBlockElement::GetByID($courseId)->GetNext(); $pdf = new \TCPDF(); $pdf->AddPage('L'); // Landscape $pdf->setImageScale(1.25); // Фоновое изображение сертификата $pdf->Image('/local/templates/lms/img/certificate_bg.jpg', 0, 0, 297, 210); // ФИО $pdf->SetFont('dejavusans', 'B', 32); $pdf->SetXY(50, 90); $pdf->Cell(200, 20, $user['LAST_NAME'] . ' ' . $user['NAME'], 0, 0, 'C'); // Название курса $pdf->SetFont('dejavusans', '', 18); $pdf->SetXY(50, 120); $pdf->Cell(200, 10, $course['NAME'], 0, 0, 'C'); $filename = 'certificate_' . $userId . '_' . $courseId . '.pdf'; $path = '/upload/certificates/' . $filename; $pdf->Output($_SERVER['DOCUMENT_ROOT'] . $path, 'F'); return $path; } } 

Процесс работы

  1. Аналитика и проектирование — согласовываем структуру курсов, типы контента, схему доступа.
  2. Разработка компонентов — создаём компоненты 2.0 для списка курсов, детальной страницы, прогресса.
  3. Интеграция — подключаем платёжные системы (ЮKassa, Сбер) и обмен с 1С через [CommerceML](https://wiki.1c-bitrix.ru/ (коммерческая информация)/CommerceML).
  4. Тестирование — проверяем сценарии покупки, записи, прохождения уроков и генерации сертификатов.
  5. Деплой и обучение — выкатываем на боевой сервер, обучаем администраторов (2–3 часа).

Что входит в работу

При заказе разработки LMS под ключ мы выполняем:

  • аналитика и проектирование схемы данных (инфоблоки, HL-блоки);
  • разработка компонентов 2.0 (список курсов, детальная, прогресс);
  • интеграция с платежными системами и 1С;
  • тестирование и исправление ошибок;
  • передача исходного кода, документации и доступов;
  • обучение администраторов.

Сроки разработки

Вариант Состав Срок
Базовая LMS Курсы, уроки, прогресс, доступ по группам 15–20 дней
С тестами и сертификатами + Квизы, генерация PDF 20–30 дней
Полная платформа + Оплата, подписки, аналитика, вебинары 35–50 дней

Хотите обсудить проект? Свяжитесь с нами — мы оценим вашу задачу и предложим оптимальное решение. Закажите разработку LMS — и получите готовое решение в оговорённые сроки.