覆盖插件渲染器 moodle
Overriding plugin renderer moodle
我有站点 运行 Moodle 2.9.3+,我试图自定义一个现有插件的渲染器,所以我发现了这个:
How to override a renderer such that the functionality of the overridden renderer also remains available?
我在我的主题 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) {
...
}
}
它运行了,但它没有加载修改后的函数。我还需要做其他事情吗?修改后的功能是 运行 当我直接将代码更改到插件中时没有问题,但不是这样。我将不胜感激任何可能的提示。
谢谢
嗯,你确定脚本包含没有错误吗?如果您在 ini 设置中关闭了 error_reporting
,您将看不到 E_WARNING
PHP 可能正在提高。将其设置为开,或改用 require_once()
。有关差异,请参阅对此 SO post 的已接受回复:Difference between require, include and require_once?
您需要做两件事来让主题渲染器覆盖核心渲染器:
- 您需要编辑主题的 config.php 以添加行:$THEME->rendererfactory = 'theme_overridden_renderer_factory';
- 您需要将渲染器命名为 class 'theme_NAMEOFTHEME_format_topcoll_renderer'(并像您所做的那样扩展 'format_topcoll_renderer')。
theme_overridden_renderer_factory 的工作原理是扩展实例化渲染器的过程,以查找与名称 'theme_NAMEOFTHEME_NAMEOFRENDERER' 匹配的 class - 只要 class 存在,那么应该使用它(否则使用原始渲染器)。
有关详细信息,请参阅 https://docs.moodle.org/dev/Overriding_a_renderer。
我有站点 运行 Moodle 2.9.3+,我试图自定义一个现有插件的渲染器,所以我发现了这个:
How to override a renderer such that the functionality of the overridden renderer also remains available?
我在我的主题 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) {
...
}
}
它运行了,但它没有加载修改后的函数。我还需要做其他事情吗?修改后的功能是 运行 当我直接将代码更改到插件中时没有问题,但不是这样。我将不胜感激任何可能的提示。
谢谢
嗯,你确定脚本包含没有错误吗?如果您在 ini 设置中关闭了 error_reporting
,您将看不到 E_WARNING
PHP 可能正在提高。将其设置为开,或改用 require_once()
。有关差异,请参阅对此 SO post 的已接受回复:Difference between require, include and require_once?
您需要做两件事来让主题渲染器覆盖核心渲染器:
- 您需要编辑主题的 config.php 以添加行:$THEME->rendererfactory = 'theme_overridden_renderer_factory';
- 您需要将渲染器命名为 class 'theme_NAMEOFTHEME_format_topcoll_renderer'(并像您所做的那样扩展 'format_topcoll_renderer')。
theme_overridden_renderer_factory 的工作原理是扩展实例化渲染器的过程,以查找与名称 'theme_NAMEOFTHEME_NAMEOFRENDERER' 匹配的 class - 只要 class 存在,那么应该使用它(否则使用原始渲染器)。
有关详细信息,请参阅 https://docs.moodle.org/dev/Overriding_a_renderer。