Модификация страницы списка курсов (mysite/course/index.php)

Модификация страницы списка курсов (mysite/course/index.php)

от John Doe -
Количество ответов: 2

Доброго дня,

возникла задача изменить представление списка курсов для роли "Управляющий", добавив в каждый div .coursebox несколько дополнительных элементов (кнопок-ссылок) с параметрами, зависящими от id курса. Как это лучше сделать?

Глобально, вижу варианты решения используя или php, или js.

Попытавшись разобраться с плагинами мне не удалось найти ничего готового, реализующего мои задачи.
Прежде всего, я не вполне понимаю тип необходимого мне плагина. Должен ли этот плагин быть темой, либо каким-то другим типом? Если темой - то следует ли мне редактировать уже имеющуюся тему оформления (собрали свою, основанную на klass), либо возможно создать отдельную мелкий плагин-тему и использовать их совместно?
Кроме того, мне не удалось найти доступного гайда по последовательности рендера страницы, а попытки разобраться в исходном коде упираются в его гигантское количество (2M+ LOC, однако). Разобраться, как именно "собирается" интересующая меня страница не удалось. В документации тоже заблудился. Буду признателен за ссылки на релевантную информацию.

Самым очевидным для себя вариантом я вижу добавление JS-кода в тему оформления, который будет добавлять необходимые кнопки, но будет ли это лучшим вариантом?


В ответ на John Doe

Re: Модификация страницы списка курсов (mysite/course/index.php)

от Станислав Сивинский -

Касательно вывода списка курсов посмотрите файл course/renderer.php

И в теме klass файл klass/renderers/course_renderer.php

Вообще Moodle веселая система))) Не нужно ждать от Moodle уровня NodeJS или Wordpress (хотя и она сегодня выглядит страшновато).

Касательно рендера. Moodle иногда применяет технологию html_writer)) Для вывода HTML тегов, а где-то вообще чистоганом html теги в теле документа вперемешку с логикой)). ИМХО удобнее тот же самый moustache. Хотя и он тоже юзается. Как средство для создания темплейтов.

Ссылки ниже мб Вам помогут.

https://docs.moodle.org/dev/Output_renderers

https://docs.moodle.org/dev/Output_API

А вообще Вам лучше уточнить версию вашего Moodle. Т.к. с каждой версии правила игры порой меняются))


В ответ на John Doe

Re: Модификация страницы списка курсов (mysite/course/index.php)

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
Является ли JS подходящем решением или нет, решать вам, в зависимости от специфики Вашей задачи. Если вы уверены, что сможете описать всё на клиентской логике на JS, то почему бы нет.


Вы можете создать новую тему, используя klass в качестве базовой. Тогда придётся описать лишь незначительные изменения относительно неё, а остальное подтянется оттуда. Читать тут  - https://docs.moodle.org/dev/Creating_a_theme - $THEME->parents

Таким образом вы сможете добавить в тему и JS, пользуясь командой requirejs в шаблоне.

Что касается вывода - здесь всё непросто. Когда вызывается $OUTPUT->render('чтото'), то вызывается код из библиотеки lib/outptrenderers с соответствующим именем.

Также можно взять обработчик конкретного модуля, $output = $PAGE->get_renderer('имямодуля');, тогда будут вызываться методы из файла renderer.php из папки соответствующего модуля.


К несчастью, плагина именно для замены вывода списка курсов пока нет, хотя такие предложения на трекере были. Сейчас за вывод списка курсов отвечает код из ядра. Если хотите изменить его средствами PHP, то придётся копировать этот код из ядра в вашу тему, отключать вывод системного списка курсов и выводить его уже средствами темы. 

Но у вас серьёзный пробел в постановке задачи. В moodle роли могут назначаться в разных контекстах. Для того, чтобы изменить вид главной страницы в зависимости от роли, вам потребуется назначать роль управляющим в контексте всей системы. Вы не сможете проверить на главной странице, является ли пользователь управляющим, если роль назначена в другом контексте