Moodle课程摘要中的图片无法显示的解决方案
发布时间 - 2026-02-02 00:00:00 点击率:次在moodle自定义页面中直接使用echo format_text($course->summary);会导致课程摘要中的图片无法正常显示,仅呈现文件名及小图标(如“image.jpg”旁带默认缩略图)。这是因为$course->summary存储的是富文本内容,其中图片引用的是相对路径或未解析的pluginfile.php链接,而当前上下文缺乏必要的文件访问权限与路径重写机制。
要正确渲染含图片的课程摘要,推荐以下两种专业、安全且符合Moodle最佳实践的方法:
✅ 方法一:使用课程渲染器(推荐)
Moodle 3.2+ 提供了内置的 coursecat_helper 渲染器,它会自动处理文件URL重写、HTML过滤与上下文适配:
global $CFG; require_once($CFG->dirroot . '/course/renderer.php'); $renderer = new \core_course\output\coursecat_helper(); // 注意:新版应使用命名空间类 $summary = $renderer->get_course_formatted_summary($course, FORMAT_HTML, ['overflowdiv' => true]); echo $summary;
⚠️ 注意:coursecat_helper 在较新版本中已迁移至 \core_course\output\coursecat_helper 命名空间,请根据你的Moodle版本(≥3.9建议用此路径)调整。若使用旧版(如3.5–3.8),可保留 new coursecat_helper(),但需确保已引入对应类文件。
✅ 方法二:手动重写插件文件URL(灵活可控)
适用于需精细控制格式或集成到非标准上下文(如AJAX响应、API输出)的场景:
$context = context_course::instance($course->id);
$summary = file_rewrite_pluginfile_urls(
$course->summary,
'pluginfile.php',
$context->id,
'course',
'summary',
null // itemid 为 
null 表示课程级别摘要(无需指定具体附件ID)
);
echo format_text($summary, FORMAT_HTML, ['context' => $context]);? 关键说明:
- file_rewrite_pluginfile_urls() 将 替换为完整可访问的 pluginfile.php?file=... URL;
- 必须传入正确的 context(课程上下文),否则权限校验失败,图片仍不可见;
- 后续调用 format_text() 时显式传入 ['context' => $context],确保HTML过滤器能正确解析媒体资源。
? 总结与注意事项
- ❌ 避免直接 echo format_text($course->summary) —— 缺失上下文与URL重写,图片必然失效;
- ✅ 优先选用渲染器方案(get_course_formatted_summary),它已封装安全过滤、响应式适配与多格式支持;
- ?️ 所有文件操作必须基于有效 context,切勿硬编码或复用其他模块的上下文;
- ? 开发调试时,可临时启用 debugging(E_ALL, DEBUG_DEVELOPER) 并检查浏览器开发者工具的Network标签,确认图片请求是否返回404或303重定向失败。
通过上述任一方式,即可在自定义页面中完整、安全、响应式地呈现含图片的课程摘要内容。
# php
# html
# ajax
# 编码
# 浏览器
# 工具
# overflow
# echo
# 命名空间
# 封装
# 重写
# 的是
# 自定义
# 渲染器
# 两种
# 适用于
# 可在
# 它会
# 这是因为
# 新版本
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
如何在橙子建站上传落地页?操作指南详解
🚀拖拽式CMS建站能否实现高效与个性化并存?
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
Swift中swift中的switch 语句
七夕网站制作视频,七夕大促活动怎么报名?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
Laravel怎么使用artisan命令缓存配置和视图
如何确认建站备案号应放置的具体位置?
手机网站制作与建设方案,手机网站如何建设?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
大连网站制作公司哪家好一点,大连买房网站哪个好?
如何快速生成凡客建站的专业级图册?
Laravel如何配置任务调度?(Cron Job示例)
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
如何续费美橙建站之星域名及服务?
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
高端建站如何打造兼具美学与转化的品牌官网?
Laravel如何创建自定义Facades?(详细步骤)
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
WEB开发之注册页面验证码倒计时代码的实现
米侠浏览器网页图片不显示怎么办 米侠图片加载修复
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
如何在IIS中配置站点IP、端口及主机头?
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
如何在香港免费服务器上快速搭建网站?
js代码实现下拉菜单【推荐】
如何在阿里云香港服务器快速搭建网站?
如何在服务器上配置二级域名建站?
QQ浏览器网页版登录入口 个人中心在线进入
微信公众帐号开发教程之图文消息全攻略
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】
百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭
js实现点击每个li节点,都弹出其文本值及修改
Laravel如何为API生成Swagger或OpenAPI文档
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
如何用免费手机建站系统零基础打造专业网站?
香港服务器租用费用高吗?如何避免常见误区?
如何自定义建站之星网站的导航菜单样式?
javascript基本数据类型及类型检测常用方法小结
JavaScript如何实现音频处理_Web Audio API如何工作?
Laravel中间件如何使用_Laravel自定义中间件实现权限控制


