【问题标题】:Creating Moodle plugin创建 Moodle 插件
【发布时间】:2016-10-01 21:10:00
【问题描述】:

我想控制哪些用户在测试中执行的操作(点击答案、完成测试等)?有可能吗?

我想,这个任务需要创建插件吗?我对吗? 亲爱的社区,你能帮我一些材料 - 如何开发插件?也许可以推荐一些网站或文章?因为现在我不明白这个过程。

例如,我知道插件需要安装在 Moodle 中?但是在安装之前在哪里创建插件?在moodle中也?但是如何在 Moodle 插件中创建导出到安装包?

对我来说非常重要的问题 - 如何使用插件创建安装包,其他用户可以安装它。

很抱歉有很多问题,感谢您的帮助。

【问题讨论】:

    标签: php moodle


    【解决方案1】:

    这些是开发者文档 - https://docs.moodle.org/dev/Main_Page

    取决于您需要开发哪个插件 - https://docs.moodle.org/dev/Plugin_types

    如果它是课程的一部分,那么您将需要开发一个活动模块 - https://docs.moodle.org/dev/Activity_modules

    如果没有,那么您可能需要一个本地插件 - https://docs.moodle.org/dev/Local_plugins

    更新:

    使用本地插件并响应其中一个测验事件。

    https://docs.moodle.org/dev/Event_2#Event_observers

    这是一个概述:

    创建一个本地插件 - https://docs.moodle.org/dev/Local_plugins

    然后在local/yourpluginname/db/events/php 有类似的东西

    defined('MOODLE_INTERNAL') || die();
    
    $observers = array(
        array(
            'eventname' => '\mod_quiz\event\attempt_submitted',
            'includefile' => '/local/yourpluginname/locallib.php',
            'callback' => 'local_yourpluginname_attempt_submitted',
            'internal' => false
         ),
    );
    

    这将在用户提交测验时响应attempt_submitted 事件。我猜这是您需要使用的事件。如果没有,那么这里还有其他人/mod/quiz/classes/event/

    然后在/local/yourpluginname/locallib.php 有类似的东西

    /**
     * Handle the quiz_attempt_submitted event.
     *
     * @global moodle_database $DB
     * @param mod_quiz\event\attempt_submitted $event
     * @return boolean
     */
    function local_yourpluginname_attempt_submitted(mod_quiz\event\attempt_submitted $event) {
        global $DB;
    
        $course  = $DB->get_record('course', array('id' => $event->courseid));
        $attempt = $event->get_record_snapshot('quiz_attempts', $event->objectid);
        $quiz    = $event->get_record_snapshot('quiz', $attempt->quiz);
        $cm      = get_coursemodule_from_id('quiz', $event->get_context()->instanceid, $event->courseid);
    
        if (!($course && $quiz && $cm && $attempt)) {
            // Something has been deleted since the event was raised. Therefore, the
            // event is no longer relevant.
            return true;
        }
    
        // Your code here to send the data to an external server.
    
        return true;
    }
    

    这应该让你开始。

    【讨论】:

    • 谢谢,我想创建插件,控制用户在测验中的操作,并立即将其发送到外部服务器。是活动插件吗?创建后如何导出插件?就说是.zip吧?
    • 我不知道您所说的“控制用户操作”是什么意思 - 您想在用户提交测验时将数据发送到外部服务器吗?
    • 是的,或者在测验中选择问题的答案......类似的东西
    • 非常感谢,还有一个问题 - 如何导出此插件以安装在其他服务器上?只是压缩它?
    • 是的,把所有的代码放在 local/yourpluginname 并压缩。或者使用一些花哨的 git 东西 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多