Переопределение плагинов-рендерингов плагинов

У меня есть сайт, на котором работает Moodle 2.9.3+, и я пытался настроить рендеринг одного существующего плагина, поэтому я нашел это:

Как переопределить средство визуализации так, чтобы функциональность переопределенного рендеринга также оставалась доступной?

Я добавил следующее в core_renderer.php моей темы

include_once ($ CFG-> dirroot. "/course/format/topcoll/renderer.php");

но когда я попытался сделать

class topcoll_local_renderer extends format_topcoll_renderer { protected function section_header($section, $course, $onsectionpage, $sectionreturn = null) { ... } } 

он работает, но не загружает измененную функцию. Нужно ли мне что-то делать? измененная функция работает без проблем, когда я изменяю код непосредственно в плагин, но не так. Я был бы очень признателен за любые возможные намеки.

благодаря

Вам нужно сделать две вещи, чтобы заставить средство визуализации темы переопределить основной рендеринг:

  1. Вам нужно отредактировать config.php темы, чтобы добавить строку: $ THEME-> rendererfactory = 'theme_overridden_renderer_factory';
  2. Вам нужно назвать класс renderer 'theme_NAMEOFTHEME_format_topcoll_renderer' (и продлить 'format_topcoll_renderer', как вы это сделали).

Функция theme_overridden_renderer_factory работает, расширяя процесс создания экземпляра рендерера для поиска класса, который соответствует имени «theme_NAMEOFTHEME_NAMEOFRENDERER» – пока этот класс существует, тогда он должен использоваться (в противном случае используется оригинальный рендерер).

Дополнительную информацию см. В https://docs.moodle.org/dev/Overriding_a_renderer .

Хм, вы уверены, что в включении скрипта нет ошибки? Если у вас error_reporting в ваших ini-настройках, вы не увидите, что E_WARNING PHP может быть E_WARNING . Установите это для включения или используйте require_once() . См. Принятый ответ на этот пост SO для различий: разница между require, include и require_once?