You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Moodle中学员完成教程后运行指定代码

实现Moodle教程完成时触发代码执行的方案

方案1:利用Moodle事件监听器(推荐)

Moodle内置事件触发系统,学员完成教程(如课程/活动标记完成)时会触发对应事件,可通过自定义插件监听并执行代码。

  1. 创建本地自定义插件

    • 在Moodle服务器的local/目录下新建插件目录,例如local/completiontrigger
    • 核心文件结构:
      • version.php:必填的插件版本配置文件
      • db/events.php:注册要监听的事件
      • classes/event_observer.php:编写事件处理逻辑
  2. 注册事件监听器
    在db/events.php中添加监听规则,比如监听课程完成事件\core\event\course_completed:

    $observers = [
        [
            'eventname' => '\core\event\course_completed',
            'callback' => '\local_completiontrigger\event_observer::handle_completion',
            'internal' => false,
        ],
    ];
    
  3. 编写事件处理代码
    在classes/event_observer.php中实现处理函数,写入你要运行的逻辑:

    namespace local_completiontrigger;
    
    class event_observer {
        public static function handle_completion(\core\event\base $event) {
            // 获取完成教程的学员与课程信息
            $user_id = $event->userid;
            $course_id = $event->courseid;
    
            // 这里放入你要执行的代码
            // 示例:记录完成日志
            error_log("学员ID {$user_id} 已完成课程ID {$course_id} 的教程");
        }
    }
    
  4. 安装启用插件

    • 将插件目录上传至Moodle的local/目录
    • 登录Moodle后台,进入「站点管理 → 插件 → 插件安装」,系统会自动检测并完成安装

方案2:Web服务联动(适合外部系统执行代码)

如果代码需要在外部系统运行,可通过Moodle Web服务触发:

  1. 启用Web服务

    • 进入Moodle后台「站点管理 → 高级功能」,开启「Web services」
    • 在「站点管理 → 插件 → Web服务 → 协议」中启用REST协议
    • 创建Web服务专用用户,分配查看课程完成状态的权限
  2. 设置触发逻辑

    • 开启课程/活动的完成跟踪功能,配置完成条件
    • 编写外部定时脚本,调用Moodle的Web服务API(如core_completion_get_course_completion_status)定期检查学员完成状态,检测到完成时执行目标代码

方案3:自定义定时脚本(快速临时需求)

若无需长期维护,可编写自定义脚本配合数据库查询实现:

  1. 编写PHP脚本
    在Moodle的admin/目录下新建脚本(如run_on_completion.php),需引入Moodle初始化文件:

    require_once(__DIR__ . '/../config.php');
    
    // 查询最近1小时内完成教程的学员
    $sql = "SELECT u.id AS userid, c.id AS courseid
            FROM {course_completions} cc
            JOIN {user} u ON cc.userid = u.id
            JOIN {course} c ON cc.course = c.id
            WHERE cc.timecompleted > UNIX_TIMESTAMP() - 3600";
    
    $results = $DB->get_records_sql($sql);
    
    foreach ($results as $item) {
        // 执行你的代码逻辑
        error_log("学员 {$item->userid} 完成了课程 {$item->courseid}");
    }
    
  2. 配置定时任务
    通过服务器cron定期执行脚本,比如每小时运行一次:

    0 * * * * php /path/to/moodle/admin/run_on_completion.php
    

注意事项

  • 开发插件需遵循Moodle编码规范,确保版本兼容性
  • 所有操作需严格控制权限,避免安全风险
  • 先在测试环境验证逻辑,再部署至生产环境

内容的提问来源于stack exchange,提问作者Serkan Gün

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 20:05:24