Moodle技术咨询:获取用户课程分数及设置分数阈值的简便方法
解决方案建议
一、获取课程总分与用户得分(替代遍历活动/完成状态接口)
直接使用Moodle的core_grades_get_course_grades API,该接口无需依赖课程完成标准,能直接返回课程的最高可得分及用户的实际得分:
- 调用参数:必填
courseid(课程ID)和userid(用户ID) - 返回数据解析:在
usergrades数组中,rawgrade为用户的课程总得分,maxgrade为课程的最高可得分 - 计算百分比公式:
(rawgrade / maxgrade) * 100(注意处理maxgrade为0的异常情况)
示例调用逻辑(伪代码):
response = moodle_api_call('core_grades_get_course_grades', { 'courseid': 123, 'userid': 456 }) user_grade = response['usergrades'][0]['rawgrade'] max_grade = response['usergrades'][0]['maxgrade'] percentage = (user_grade / max_grade) * 100 if max_grade != 0 else 0
二、设置与获取分数百分比阈值
Moodle原生无专门的阈值存储API,可通过自定义字段实现,步骤如下:
- 先在Moodle后台(站点管理→自定义字段→课程字段)添加一个自定义字段,类型设为"数值",字段名比如"分数百分比阈值",设置对应可见和编辑权限
- 获取阈值:调用
core_customfield_get_instance_data,参数contextlevel设为50(课程上下文),instanceid为课程ID,fieldid为自定义字段ID,返回的value即为阈值 - 设置阈值:调用
core_customfield_update_instance_data,参数同上,传入新的value值即可更新
示例获取阈值伪代码:
response = moodle_api_call('core_customfield_get_instance_data', { 'contextlevel': 50, 'instanceid': 123, 'fieldid': 789 }) threshold = float(response['instances'][0]['value'])
示例设置阈值伪代码:
moodle_api_call('core_customfield_update_instance_data', { 'contextlevel': 50, 'instanceid': 123, 'fieldid': 789, 'value': '80.0' })
三、注意事项
- 调用上述API需要对应权限:比如获取成绩需要
moodle/grade:viewall或moodle/grade:view权限,修改自定义字段需要moodle/customfield:update权限 - 若课程未设置总分(
maxgrade为0),需做特殊处理,避免除以0错误 - 自定义字段需提前在后台创建,无法通过API动态创建(需管理员操作一次)
内容的提问来源于stack exchange,提问作者Aenye_Cerbin
相关产品推荐
相关产品推荐

