我想检索课程模块的实例
I want to retrieve the instance of a course module
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 的名称动态到 select 我想加入的实例 table,或者只是在所有可能的课程模块实例 table 上左加入,但这将永远持续下去,如果有人会停止工作放入一个新的课程模块实例。
我现在正在做以下事情:
$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 实例吗?
谢谢!!
这是我最终使用的函数,用于检索课程模块实例,它不是很漂亮,但无论如何。
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;
}
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 的名称动态到 select 我想加入的实例 table,或者只是在所有可能的课程模块实例 table 上左加入,但这将永远持续下去,如果有人会停止工作放入一个新的课程模块实例。
我现在正在做以下事情:
$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 实例吗?
谢谢!!
这是我最终使用的函数,用于检索课程模块实例,它不是很漂亮,但无论如何。
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;
}