我正在使用API将文件夹模块添加到Moodle课程中:
folder_add_instance($data, null);
使用CMD运行脚本时出现以下错误:
!!! Invalid course module ID !!!
我查看了库中的folder_add_instance()函数,尝试获取上下文时发生错误:
$context = context_module::instance($cmid)//$cmid = 8
我查看了Moodle数据库中的mdl_context表,但无法理解这些值及其与我得到的错误的关系。
从数据库中删除mdl_context值会有帮助吗?或者我在这里遗失了什么?
请注意,脚本工作正常,直到我使用网络界面删除了我在Moodle上的所有课程。(我删除了包含所有课程的类别)。
答案 0 :(得分:1)
要以编程方式在Moodle中创建模块,您应该使用函数add_moduleinfo()。
查看文件夹生成器中的示例: https://github.com/moodle/moodle/blob/master/mod/forum/tests/generator/lib.php#L67
将会是这样的:
require_once($CFG->dirroot.'/course/modlib.php');
$foldername = 'YOUR NAME HERE';
$courseid = 12345;
$sectionnum = 0;
$course = get_course($courseid);
$moduleid = $DB->get_field('modules', 'id', array('name' => 'folder'));
$data = (object)array(
'name' => $foldername,
'intro' => '',
'display' => FOLDER_DISPLAY_PAGE,
'revision' => 1,
'showexpanded' => 1,
'files' => file_get_unused_draft_itemid(),
'visible' => 1,
'modulename' => 'folder',
'module' => $moduleid,
'section' => $sectionnum,
'introformat' => FORMAT_HTML,
'cmidnumber' => '',
'groupmode' => NOGROUPS,
'groupingid' => 0,
'availability' => null,
'completion' => 0,
'completionview' => 0,
'completionexpected' => 0,
'conditiongradegroup' => array(),
'conditionfieldgroup' => array(),
'conditioncompletiongroup' => array()
);
return add_moduleinfo($data, $course, $mform = null);
答案 1 :(得分:0)
Invalid course module ID
。这意味着穆迪可以找到课程模块记录,但是在获取所有课程数据时cm实际上并不存在于课程对象中。
您可以采取的解决措施是将损坏的模块重新添加到本课程的一部分中。它可能在存在的部分中,那么您还需要将cmid添加到sequence
字段中。 (只需在现有序列的末尾添加此cmid)即可。
update mdl_course_modules set section=<existingsection> where id=cmid;
update mdl_course_sections set sequence='XX,YY,ZZ,cmid' where id =<existingsection>;
然后,清除缓存后,现在应该可以再次查看该模块,例如。进行作业: