代码之家  ›  专栏  ›  技术社区  ›  Brandon

覆盖插件渲染器moodle

  •  1
  • Brandon  · 技术社区  · 9 年前

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

    How to override a renderer such that the functionality of the overridden renderer also remains available?

    我在core_render中添加了以下内容。我的主题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) {
    ...
      }
    }
    

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

    谢谢

    2 回复  |  直到 8 年前
        1
  •  4
  •   davosmith    9 年前

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

    1. 您需要编辑主题的配置。php添加行:$THEME->renderfactory='theme_overriden_render_factory';
    2. 您需要将渲染器类命名为“theme_NAMEOFTHEME_format_topcoll_render”(并扩展“format_topcoll_lender”,正如您所做的那样)。

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

    看见 https://docs.moodle.org/dev/Overriding_a_renderer 了解更多详细信息。

        2
  •  1
  •   Community CDub    8 年前

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