You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Moodle 4.0自定义:如何获取课程图片并在项目课程卡片中展示

解决Moodle 4.0中项目课程卡片展示课程图片的问题

Moodle的课程封面图不是直接存在数据库表中,而是存储在moodledata目录的文件存储区,数据库的files表仅保存文件的元数据(比如文件ID、所属上下文、路径哈希等),直接查数据库找不到图片本身,得用Moodle的核心API来获取。

正确获取课程图片的方法

别硬查数据库,用Moodle内置函数,能兼容权限控制和默认图片 fallback 逻辑:

  • 先通过课程ID获取完整课程对象:
    $course = get_course($courseid);
    
  • 调用course_get_image()直接获取图片的可访问URL,课程无自定义图片时会自动返回默认图:
    $courseimageurl = course_get_image($course);
    
  • 学员数量可以用count_enrolled_users()函数获取:
    $enrolledcount = count_enrolled_users(context_course::instance($courseid));
    

卡片渲染示例代码

假设你从My programs插件拿到了项目下的课程ID数组,用PHP渲染卡片的代码可以这么写:

// 假设$program_courses是项目关联的课程ID集合
foreach ($program_courses as $courseid) {
    $course = get_course($courseid);
    $course_img = course_get_image($course);
    $student_count = count_enrolled_users(context_course::instance($courseid));
    ?>
    <div class="course-card">
        <img src="<?= $course_img ?>" alt="<?= format_string($course->fullname) ?>">
        <h4><?= format_string($course->fullname) ?></h4>
        <span>学员数:<?= $student_count ?></span>
    </div>
    <?php
}

为什么“我的课程”页面能正常显示图片?

“我的课程”的卡片视图(比如core_course_renderer中的course_box方法)就是用course_get_image这类核心函数实现的——它没有直接操作数据库,而是调用Moodle封装好的API处理文件获取、权限验证等逻辑,所以能稳定显示图片。

内容的提问来源于stack exchange,提问作者lostInSpace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 09:00:39