我想检索课程模块

时间:2016-08-11 14:40:12

标签: php mysql moodle moodle-api

TL;博士;试图通过mysql或官方moodle api通过课程模块获取课程模块实例。我的解决方案最终看起来很糟糕,所以我想提出一些建议。

嗨Moodle人

我正在尝试为mdl_course_modules中的每一行检索相应的课程模块实例,此上下文中的实例将是来自mdl_quiz,mdl_wiki或其他一些course_modules实例的单行。

我尝试了一些事情,我期望工作的是:

function get_all_course_modules($course_id) {
   global $DB;
   $course = $DB->get_record('course', array('id' => $course_id));
   $mod_info = get_fast_modinfo($course);
}

我无法从$ mod_info获取课程模块实例。

所以我试着做一些自定义的mysql,

SELECT course.id, course.fullname, cm.course, cm.section, m.name 
 FROM mdl_course AS course 
 JOIN mdl_course_modules AS cm ON cm.course = course.id
 JOIN mdl_modules AS m ON m.id = cm.module 
 JOIN CONCAT('mdl_', m.name) AS module_type ON ...somethingsomething
 WHERE course.id = 2;

sql还没完成,我偶然发现我之前并不知道所有不同的课程模块,这意味着我必须动态地使用course_module的名称来选择我想要的实例表加入,或只是LEFT JOIN所有可能的课程模块实例表,但这将永远,如果有人投入新的课程模块实例,将停止工作。

现在我正在做以下事情:

 $result = array();
$course_mods = get_course_mods($course_id);

if($course_mods) {
    foreach($course_mods as $course_mod) {
        $DB->get_records_sql('some sql that selects the instance');
    }
}

return $result;

这最后一段代码最终会起作用,我将能够从$ course_mod变量动态创建查询,例如$ course_mod-> instance,$ course_mod-> mod_name等。

但我认为这似乎很难。有没有人以更简单的方式获得course_module实例?

谢谢!

1 个答案:

答案 0 :(得分:0)

这是我最终使用的功能,检索课程模块实例,它不是那么漂亮,但无论如何。

function get_all_course_modules($course_id) {
global $DB;
$course_mods = get_course_mods($course_id);
$result = array();
if($course_mods) {
    foreach($course_mods as $course_mod) {
        $course_mod->course_module_instance = $DB->get_record($course_mod->modname, array('id' =>$course_mod->instance ));
        $result[$course_mod->id] = $course_mod;
    }
}
return $result;
}