覆盖插件渲染器moodle

时间:2016-02-03 19:35:33

标签: php 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");

但是当我试图做的时候

@FixedLengthRecord(header = FahRecordHeader.class, 
                   footer = FahRecordFooter.class, 
                   hasHeader = true, 
                   hasFooter = true)

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

由于

2 个答案:

答案 0 :(得分:3)

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

  1. 您需要编辑主题的config.php以添加以下行:$ THEME-> rendererfactory ='theme_overridden_​​renderer_factory';
  2. 您需要为渲染器类命名'theme_NAMEOFTHEME_format_topcoll_renderer'(并像您一样扩展'format_topcoll_renderer')。
  3. theme_overridden_​​renderer_factory通过扩展实例化渲染器以查找与名称'theme_NAMEOFTHEME_NAMEOFRENDERER'匹配的类的过程来工作 - 只要该类存在,就应该使用它(否则使用原始渲染器)。

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

答案 1 :(得分:1)

嗯,你确定脚本包含中没有错误吗?如果您在ini设置中关闭error_reporting,则不会看到E_WARNING PHP可能会提升。将此项设置为开,或使用require_once()代替。有关差异,请参阅此SO帖子的已接受回复:Difference between require, include and require_once?