如何通过命令行设置Moodle课程自定义字段?查询遇阻求助
问题解答
1. 核心问题:用错了工具,不是组件名的问题
php admin/cli/cfg.php这个命令仅用于管理Moodle核心配置表(config_table)中的系统设置,完全不涉及自定义字段的查询或修改。自定义字段存储在customfield_field、customfield_category等专门的数据库表中,和cfg.php的作用范围无关,所以不管换什么组件名,都不会有输出。
2. 查看所有Moodle组件名的方法
直接查询Moodle数据库的components表即可,执行SQL语句:
SELECT name FROM components;
3. 命令行管理课程自定义字段的正确方式
查询已存在的课程自定义字段
课程自定义字段对应的组件是core_course(core_customfield是自定义字段框架的组件,而非课程字段所属组件),直接查数据库:
SELECT id, name, shortname FROM customfield_field WHERE component = 'core_course' AND area = 'course';
命令行创建/修改自定义字段
Moodle没有自带的CLI工具处理自定义字段操作,你需要编写自定义PHP脚本,调用core_customfield的API。示例逻辑:
<?php require_once(__DIR__ . '/config.php'); require_once($CFG->libdir . '/customfield/classes/manager.php'); // 获取课程自定义字段管理器 $manager = customfield_manager::get_instance('core_course', 'course'); // 示例:创建一个必填的文本类型自定义字段 $category = $manager->get_default_category(); $field = new stdClass(); $field->categoryid = $category->id; $field->name = '课程编号'; $field->shortname = 'coursecode'; $field->type = 'text'; $field->configdata = json_encode(['required' => 1]); $manager->create_field($field);
将脚本放在Moodle根目录,执行php your_script.php即可。
内容的提问来源于stack exchange,提问作者J. Unkrass
相关产品推荐
相关产品推荐

