В Moodle (4.0) мне нужно вызвать
$this->output->render_from_template('core_courseformat/local/content/section/cmlist', $sectionData);
Изнутри рендерера. Цель состоит в том, чтобы отобразить обычный собственный компонент cmlist в определенном месте на странице. Но способ, которым я сейчас получаю значение $section
, похоже, не работает. Мой шаблон ничего не отображает. Я вижу из источника github, что этот шаблон ожидает данные в этом формате:
Example context (json):
{
"cms": [
{
"cmitem": {
"cmformat": {
"cmname": "<a class=\"aalink\" href=\"#\"><span class=\"instancename\">Forum example</span></a>",
"hasname": "true"
},
"id": 3,
"module": "forum",
"extraclasses": "newmessages"
}
},
{
"cmitem": {
"cmformat": {
"cmname": "<a class=\"aalink\" href=\"#\"><span class=\"instancename\">Assign example</span></a>",
"hasname": "true"
},
"id": 4,
"module": "assign",
"extraclasses": ""
}
}
],
"hascms": true,
"showmovehere": true,
"movingstr": "Moving this activity: folder example",
"cancelcopyurl": "#",
"movetosectionurl": "#",
"strmovefull": "Move 'folder example' to this location"
}
}}
Но вот вызов. Как мне получить объект в этом формате с данными, необходимыми для подачи шаблона, чтобы он мог отображать правильные элементы списка CM?
В настоящее время я пытаюсь:
$sectionData = get_fast_modinfo($course->id)->get_section_info($section);
Но, похоже, он не возвращает правильно структурированные данные.
Любая помощь приветствуется.
Вы можете использовать функцию export_for_template
класса рендеринга cmlist
.
Что-то вроде этого:
$cmlist = new \core_courseformat\output\local\content\section($format, $section);
$data->cmlist = $cmlist->export_for_template($OUTPUT);
а затем отправить данные в шаблон. Я рекомендую вам подражать поведению мудла, как он выступает здесь: https://github.com/moodle/moodle/blob/7ce003b666a66b465ce9335f430a6e4d3535a7f1/course/format/classes/output/local/content/section.php#L223