我有运行 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) {
...
}
}
它运行,但不加载修改后的函数。我还需要做其他事情吗?当我将代码直接更改为插件时,修改后的函数正在运行没有问题,但不是这样。我将非常感谢任何可能的提示。
谢谢
您需要做两件事才能让主题渲染器覆盖核心渲染器:
- 您需要编辑主题的配置.php添加行:$THEME->渲染器工厂 = 'theme_overridden_renderer_factory';
- 你需要将渲染器类命名为"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之间的区别?