CourseControllerData.js
Данный класс создан для более удобной работы с данными курса в elearning виджетах.
Причины добавления
Заголовок раздела «Причины добавления»- Разделение данных по страницам - Данные курса общие для всех страниц курса. То есть если один и тот же квиз будет вставлен на две страницы курса, то у него будет общий прогресс, если не добавить разделение сохранения данных по страницам. CourseControllerData как раз добавляет разбиение сохраненных данных по страницам
- Обновление переменных-объектов в курсе - С помощью api курса есть возможность только целиком определить значение переменной, что не подходит для сохранение данных отдельного виджета для отдельной страницы, так как прогресс всех frameset виджетов хранится в
framesetпеременной, а quiz виджеты вquizпеременной. Данный класс решает эту проблему, изменяя только состояние одного виджета в общем объекте с данными
Структура данных
Заголовок раздела «Структура данных»Данные курса хранятся в виде JSON объекта. В поле variables хранятся кастомные данные курса, в них входят frameset и quiz данные с разделением по страницам.
{"variables": { "frameset": { "5815": { "7c3c7f5": {...}, }, "5830": { "c37cdd1": {...}, } }, "quiz": { "5815": { "d0c43d9": {...}, "b7amf8f": {...} }, "5830": { "cbd13c7": {...}, } }}}Примеры созданы для структуры данных выше
constructor(dataId, pageId= null)
Заголовок раздела «constructor(dataId, pageId= null)»Для создания контроллера требуется передать два параметра:
- dataId - имя переменной, в которой будут храниться данные. Сейчас используются
framesetдля всех frameset виджетов иquizдля всех виджетов-банков вопросов - pageId - id страницы для которой будет сохраняться состояние. Если не передан Id страницы, то он берется из конфига Elementor’а
new CourseControllerData('quiz', '5815') // Создание контроллера для управления данными квизов на странице 5815getData(id)
Заголовок раздела «getData(id)»По id данных получает состояние. Так как CourseControllerData используется для сохранения данных виджетов, то id данных - это id виджета
const dataController = new CourseControllerData('quiz', '5815');const data = data->getData('cbd13c7') // Получение данных квиза с id cbd13c7 на странице 5815setData(id, value)
Заголовок раздела «setData(id, value)»По id сохраняет актуальное состояние. Так как CourseControllerData используется для сохранения данных виджетов, то id данных - это id виджета, а value - это данные из WidgetBase::getDataForSaving
const dataController = new CourseControllerData('quiz', '5815');const data = data->setData('cbd13c7', {...}) // Обновление данных квиза с id cbd13c7 на странице 5815Применение
Заголовок раздела «Применение»CourseControllerData используется как часть класса WidgetBase для сохранения и получения данных виджета. В каждом elearning виджете есть свойство framesData, которое инициализируется в конструкторе виджета.
Данные в конструктор CourseControllerData передаются на основе данных виджета:
- dataId - У частей виджета типа
WidgetTypeесть статическое свойствоcourseControllerDataName, которое равноframesetдляFrameSetиquizдляQuestionBank. Это свойство и передается на место dataId - pageId - У каждого виджета в настройках указан id текущей страницы, который и передается в конструктор
Получение данных происходит в методе WidgetBase::getData(widgetId = null, dataContainer = null) - метод по умолчанию получает данные текущего виджета и основывается на методе CourseControllerData::get. Опционально можно перед