Можете ли вы изменить содержимое $ OUTPUT-> main_content () в moodle?

Мне известны подобные вопросы, связанные с этим. Моя задача намного сложнее, чем что-либо, с чем 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() обрабатывается, вообще или для курсов?

1

Решение

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.
}

Я предлагаю вам прочитать документацию ниже, как бы это ни сбивало с толку. Я также рекомендую вам просмотреть код других тем, которые были довольно креативны с использованием рендеров.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector