【问题标题】:How to override a renderer such that the functionality of the overridden renderer also remains available?如何覆盖渲染器以使被覆盖的渲染器的功能也仍然可用?
【发布时间】:2014-07-16 22:54:29
【问题描述】:

Moodle 有一个多选题型插件。这些问题用于测验

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

例如有些是*simple MCQ'*s,而另一些则有与之相关的阅读文章(学生必须阅读并从中找到答案)需要显示。然后阅读文章可以在更多不同类型的 MCQ 中以不同的方式显示。

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

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

如果我覆盖 Multichoice 问题类型的渲染器以显示阅读文章,则用于显示简单 MCQ 的渲染器将被覆盖。这意味着我只能显示带有段落的 MCQ,而不再显示简单的 MCQ。

但我需要显示各种 MCQ。

所以请给我一些解决方法。


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

如果题型是simple MCQ,则使用MCQ插件的渲染器,否则如果是带有段落的MCQ,则使用此渲染器(我们的自定义渲染器覆盖了多选插件渲染器)

我应该怎么做?


编辑:- 这是一张表格的图片,它从正在向测验中添加问题的管理员那里获取输入,他们想要添加什么类型的问题?

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

【问题讨论】:

  • 面对你的恐惧!你在正确的道路上!谷歌“多态性”。
  • @Juventus18 非常感谢。我刚刚浏览了这篇文章——非常有帮助。关于面对恐惧,这是一个后续问题:我们可以通过基于已经存在的插件(在这种情况下为多选问题类型插件)来编写插件,就像我们通过添加'来扩展已经存在的主题一样新主题中的新'功能,其余所有功能都在我们的新主题扩展的现有主题上扩展?

标签: php plugins moodle renderer


【解决方案1】:

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

【讨论】:

  • 首先,谢谢。其次,你说得对,我的问题没有阐明如何区分类型 - 那是因为我不清楚。需要从用户那里获得一些关于他们想要添加到测验中的 MCQ 类型的输入。为此,我可能需要在管理员选择他们想要添加到测验的问题类型的表单中添加这些类型(我将其图片添加到问题中以使其清楚)为此我需要覆盖部分显示表单的测验渲染器,然后是接受该输入的部分,然后以某种方式将该输入作为要执行的类型 if(type==st)...
【解决方案2】:

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

Include_once("existingplugin.php")

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

    //methods not overridden do what they do. 
}

【讨论】:

  • 谢谢你,这个! existingplugin.php 是哪个文件?是渲染器吗?如果是renderer,那么它本质上意味着我们只是覆盖了renderer,但是我们可以在我们的自定义主题中这样做而不是扩展插件?我在想的是:(1)找到渲染问题中发布的表单的渲染器,然后为我们想要添加的更多类型的 MCQ 添加更多单选按钮。 (2) 找到从这个表单中获取输入的代码 (3) 在我们主题的渲染器中获取该输入(它已经覆盖了插件的渲染器 (4) 并使用它来决定输出。
  • 请告诉我我是否还在正确的道路上?谢谢。
【解决方案3】:

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

我从 moodle 2.6 开始检查,并且此“标签”功能可用于问题类型。我没有在 Moodle 上检查 2.5 和其他以前的版本,以了解问题类型的“标签”功能的可用性。

【讨论】:

    最近更新 更多