1

我正在使用 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 值会有帮助吗?或者我在这里遗漏了什么?

请注意,脚本运行良好,直到我使用 Web 界面删除了 Moodle 上的所有课程。(我删除了包含所有课程的类别)。

4

2 回答 2

1

Invalid course module ID. 这意味着moodle可以找到课程模块记录,但在获取所有课程数据时,课程对象中实际上并不存在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>;

然后在您清除缓存后,您现在应该能够再次查看该模块,例如。作业:

https://moodle.com/mod/assign/view.php?id=cmid

于 2020-11-18T01:08:32.030 回答
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);
于 2015-11-20T03:15:04.270 回答