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": {...},
}
}
}
}
API
Примеры созданы для структуры данных выше
constructor(dataId, pageId= null)
Для создания контроллера требуется передать два параметра:
- dataId - имя переменной, в которой будут храниться данные. Сейчас используются
framesetдля всех frameset виджетов иquizдля всех виджетов-банков вопросов - pageId - id страницы для которой будет сохраняться состояние. Если не передан Id страницы, то он берется из конфига Elementor'а
new CourseControllerData('quiz', '5815') // Создание контроллера для управления данными квизов на странице 5815
getData(id)
По id данных получает состояние. Так как CourseControllerData используется для сохранения данных виджетов, то id данных - это id виджета
const dataController = new CourseControllerData('quiz', '5815');
const data = data->getData('cbd13c7') // Получение данных квиза с id cbd13c7 на странице 5815
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. Опционально можно перед