覆盖插件渲染器心情


Overriding plugin renderer moodle

我有运行 Moodle 2.9.3+ 的网站,我正在尝试自定义一个现有插件的渲染器,所以我发现了这个:

如何覆盖渲染器,以便被覆盖的渲染器的功能也保持可用?

我在主题core_renderer.php中添加了以下内容

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

但是当我尝试做

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

它运行,但不加载修改后的函数。我还需要做其他事情吗?当我将代码直接更改为插件时,修改后的函数正在运行没有问题,但不是这样。我将非常感谢任何可能的提示。

谢谢

您需要做两件事才能让主题渲染器覆盖核心渲染器:

  1. 您需要编辑主题的配置.php添加行:$THEME->渲染器工厂 = 'theme_overridden_renderer_factory';
  2. 你需要将渲染器类命名为"theme_NAMEOFTHEME_format_topcoll_renderer"(并扩展"format_topcoll_renderer",就像你所做的那样)。

该theme_overridden_renderer_factory通过扩展实例化渲染器的过程来查找与名称"theme_NAMEOFTHEME_NAMEOFRENDERER"匹配的类 - 只要该类存在,就应该使用它(否则使用原始渲染器)。

有关更多详细信息,请参阅 https://docs.moodle.org/dev/Overriding_a_renderer。

嗯,你确定脚本包含中没有错误吗?如果您在 ini 设置中关闭了error_reporting,您将看不到 PHP 可能正在提高的E_WARNING。将其设置为 on,或改用require_once()。请参阅对此SO帖子的已接受回复,以了解差异:要求,包含和require_once之间的区别?