【问题标题】:Moodle - Invalid course module IDMoodle - 无效的课程模块 ID
【发布时间】:2020-11-18 09:08:32
【问题描述】:

我正在使用 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 上的所有课程。(我删除了包含所有课程的类别)。

【问题讨论】:

    标签: moodle moodle-api


    【解决方案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);
    

    【讨论】:

      【解决方案2】:

      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

      【讨论】:

        猜你喜欢
        • 2022-11-15
        • 1970-01-01
        • 1970-01-01
        • 2021-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多