如何覆盖渲染器,以便覆盖的渲染器的功能仍然可用?

时间:2014-07-16 22:54:29

标签: php plugins moodle renderer

Moodle有一个 Multichoice问题类型插件。这些问题用于 Quizes

我想要显示不同类型的多项选择题。 它们基本上都是MCQ,但以不同的方式呈现。

例如有些是*简单的MCQ'* s,而其他人则有阅读段落(学生必须阅读并从中找到答案)需要显示。然后可以在不同类型的MCQ中以不同的方式显示阅读通道。

所以我需要渲染大约4到5种不同类型的MCQ,这些MCQ只在网页上呈现它们的方式不同。

现在,以不同方式显示问题的解决方案是覆盖插件的渲染器。 但问题是:

如果我覆盖Multichoice问题类型的渲染器以显示读取通道,则将覆盖用于显示简单MCQ的渲染器。这意味着我只能用通道而不是简单的MCQ显示MCQ。

但我需要显示各种MCQ。

所以请建议我解决一些问题。


最大的担忧是:可能需要为每种类型的MCQ编写问题类型插件,然后在测验的一部分中添加它们时,要求教师(或进行测验的管理员)选择问题类型;然后老师选择问题的特定类型,然后在我们的代码中我们得到该类型并执行以下操作:

如果问题类型是简单的MCQ,则使用MCQ插件的渲染器,否则如果它是带有段落的MCQ,请使用此渲染器(我们的自定义渲染器覆盖多重插件渲染器)

我应该怎么做?


修改: - 这是一张表单的图片,它从管理员那里获取输入问题的输入,他们想要添加什么类型的问题?

也许我还需要通过识别然后覆盖显示此表单的代码,然后识别和接收来自此表单的输入的代码,然后使用该输入,将多选问题划分为我感兴趣的类型决定如何渲染输出。

enter image description here

3 个答案:

答案 0 :(得分:1)

为什么不将该逻辑放入渲染器中 - 在函数write中,if(type == originaltype)然后调用parent :: function,否则执行自定义输出。显然,您需要使用与代码中相关的任何变量(您的问题并不清楚如何区分类型)。

答案 1 :(得分:1)

通常是的,您可以扩展现有的插件:

Include_once("existingplugin.php")

Public CustomPlugin extends ExistingPlugin {
    Public override ExistingMethod() {
        //do something else
    }

    //methods not overridden do what they do. 
}

答案 2 :(得分:0)

我很晚才回复。谢谢你早先的答案。至于您关注的是区分默认类型(标准)和自定义类型,您可以使用问题类型的'标签' 的功能来区分问题。只需为需要通过渲染器覆盖的问题设置自己的自定义标记。

我检查了moodle 2.6以及&这个' Tag'功能适用于问题类型。我没有在Moodle上检查2.5和其他以前的版本,因为这个' Tag'问题类型的功能。