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

プログラムで 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 に答える