Мне известны подобные вопросы, связанные с этим. Моя задача намного сложнее, чем что-либо, с чем css может справиться.
например, в одном из шаблонов курса вся область содержимого страницы обрабатывается тремя строками кода …
echo $OUTPUT->course_content_header();
echo $OUTPUT->main_content();
echo $OUTPUT->course_content_footer();
Предположим, вам нужно добавить некоторые важные изменения во внутреннее содержание курса. Что-то, что требует реструктуризации разметки, данных и т. Д., Что явно обрабатывается $OUTPUT->main_content()
Другие ответы прослеживают это до libs / outputrenderers.php, но если вы посмотрите на это, вы найдете это:
public function main_content() {
// This is here because it is the only place we can inject the "main" role over the entire main content area
// without requiring all theme's to manually do it, and without creating yet another thing people need to
// remember in the theme.
// This is an unfortunate hack. DO NO EVER add anything more here.
// DO NOT add classes.
// DO NOT add an id.
return '<div role="main">'.$this->unique_main_content_token.'</div>';
}
… проследить $this->unique_main_content_token
и ты тоже ничего не получишь.
Где-то во всем этом беспорядке ДОЛЖНО быть что-то, что собирает все данные и разметку. Мне не нужно просто переопределить функцию main_content () в моей дочерней теме. Все, что мне даст, это чистый лист. Мне нужно знать, как он извлекает данные для создания страницы, чтобы я мог получить доступ к таким вещам, как названия курсов, статус пользователя и т. Д. И дополнительно внедрить свои собственные модификации, где они принадлежат, а не пытаться вмешиваться в абсолютное позиционирование css или пост-загрузку js манипуляция. Я запачкаюсь, если придется, но я лучше пойму систему, прежде чем мне придется ее разбивать на кусочки.
Кто-нибудь знает, где найти именно где HTML $OUTPUT->main_content()
обрабатывается, вообще или для курсов?
Moodle работает с тем, что они называют «рендерерами». Метод main_content
это способ, которым те указывают, где основное содержание должно быть отображено в их теме.
Moodle отображает страницы, позволяя разработчику отображать все, что они хотят, после первого вызова $OUTPUT->header()
затем они должны завершить вывод $OUTPUT->footer()
, Под капотом файл макета, предоставленный themer, разделен на две части, одна часть повторяется $OUTPUT->header()
а остальные $OUTOUT->footer()
,
Так что, к сожалению, вы не сможете перехватить весь контент, кроме, возможно, если вы переопределите методы, упомянутые выше, и введете собственную буферизацию вывода. Тем не менее, по соглашению вывод должен генерироваться средствами визуализации, которые вы можете переопределить в своей теме. Независимо от решения, к которому вы стремитесь, тема, вероятно, является хорошим началом.
Кроме того, в зависимости от того, чего вы пытаетесь достичь, например, при изменении макета курса, вам может быть лучше взглянуть на другие типы плагинов, такие как «Форматы курса».
Я надеюсь, что это помогло.
Чтобы уточнить, чтобы переопределить рендер, вы ДОЛЖНЫ создать новую тему, а затем создать класс рендерера. Если вы хотите переопределить больше, чем core
рендеры, скажем, рендеры плагинов, как mod_scorm
Вы должны создать класс рендеринга с определенным именем.
Примеры:
class theme_yourtheme_core_renderer extends core_renderer {
// Overridden core renderer methods here.
}
class theme_yourtheme_mod_scorm_renderer extends mod_scorm_renderer {
// Overridden scorm renderer methods here.
}
Я предлагаю вам прочитать документацию ниже, как бы это ни сбивало с толку. Я также рекомендую вам просмотреть код других тем, которые были довольно креативны с использованием рендеров.
Других решений пока нет …