如何一次性隐藏单门课程中的所有主题?
批量重置课程并隐藏所有主题的命令行解决方案
单门课程:一键完成重置+隐藏所有主题
以主流LMS系统Moodle为例,你可以通过组合内置的CLI脚本,用一条复合命令完成单门课程的操作:
php admin/tool/cli/course_reset.php --courseid=你的课程ID --reset-all && php admin/tool/cli/set_section_visibility.php --courseid=你的课程ID --hidden=1
course_reset.php负责重置课程,--reset-all参数会重置课程内所有可配置的内容(包括作业、资源等)set_section_visibility.php批量设置该课程下所有主题为隐藏状态&&确保前一条命令执行成功后再执行后一条,实现"单条命令"的效果
如果是Canvas系统,可通过API组合调用实现:
# 替换<你的API令牌>和<你的Canvas域名> curl -X POST -H "Authorization: Bearer <你的API令牌>" https://<你的Canvas域名>.instructure.com/api/v1/courses/你的课程ID/reset_content && curl -X PUT -H "Authorization: Bearer <你的API令牌>" https://<你的Canvas域名>.instructure.com/api/v1/courses/你的课程ID/modules --data "module[published]=false"
批量处理所有课程
如果要一次性重置所有课程并隐藏主题,可通过循环遍历课程ID实现:
Moodle示例
for courseid in $(php admin/tool/cli/list_courses.php --ids-only); do php admin/tool/cli/course_reset.php --courseid=$courseid --reset-all && php admin/tool/cli/set_section_visibility.php --courseid=$courseid --hidden=1 done
Canvas示例
# 替换<你的API令牌>和<你的Canvas域名> for courseid in $(curl -s -H "Authorization: Bearer <你的API令牌>" https://<你的Canvas域名>.instructure.com/api/v1/courses | jq -r '.[].id'); do curl -X POST -H "Authorization: Bearer <你的API令牌>" https://<你的Canvas域名>.instructure.com/api/v1/courses/$courseid/reset_content curl -X PUT -H "Authorization: Bearer <你的API令牌>" https://<你的Canvas域名>.instructure.com/api/v1/courses/$courseid/modules --data "module[published]=false" done
注意事项
- 执行前务必备份数据库,避免不可逆的数据丢失
- 确保你拥有服务器命令行权限,且CLI脚本/API端点的路径、参数与你的系统版本匹配
- 部分LMS可能需要额外配置API权限或CLI参数,建议先在测试课程上验证命令效果
内容的提问来源于stack exchange,提问作者adobro
相关产品推荐
相关产品推荐

