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

如何在自定义最新公告模块中获取论坛帖子图片URL?

问题

我正在为仪表盘自定义一款最新公告模块变体,希望将论坛帖子以附带图片的卡片形式展示其中。我发现需要在blocks/news_items/blocks_news_items.php文件的$text变量中添加HTML代码。同时我注意到,论坛帖子的图片URL会作为渲染上下文传递到mod/forum/templates/forum_discussion_post.mustache模板文件中,相关代码如下:

{{#urls.image}}
<a href="{{urls.group}}" role="button" aria-label='{{#str}} memberofgroup, group, {{name}}{{/str}}'>
<img
class="rounded-circle w-100"
src="{{{.}}}"
alt="{{#str}} pictureof, core, {{name}} {{/str}}"
aria-hidden="true"
title="{{#str}} pictureof, core, {{name}} {{/str}}"
>
</a>
{{/urls.image}}

但我追踪文件后仍不清楚该URL如何传递到模板中,请问如何从blocks/news_items/blocks_news_items.php文件中获取该图片URL?


解决方法

1. 定位图片数据来源

从模板里的memberofgroup文本可以判断,urls.image是帖子所属群组的头像URL。先在新闻模块的PHP文件里找到拉取论坛帖子数据的代码(通常是$DB查询或调用论坛API),拿到帖子的groupid字段。

2. 生成群组头像URL

利用系统内置函数,通过帖子的groupid生成可访问的头像地址:

// 假设$post是获取到的论坛帖子记录对象
$imageurl = '';
if (!empty($post->groupid)) {
    $group = groups_get_group($post->groupid);
    if ($group) {
        // 生成群组头像的URL
        $imageurl = moodle_url::make_pluginfile_url(
            $group->contextid,
            'group',
            'icon',
            null,
            '/',
            'f1' // 固定标识群组头像的文件路径
        )->out(false);
    }
}

3. 嵌入图片到公告卡片HTML

拿到$imageurl后,直接在构建$text变量时插入图片标签:

// 构建带图片的卡片HTML
$text = '<div class="news-item-card">';
if (!empty($imageurl)) {
    $text .= sprintf(
        '<img src="%s" alt="%s" class="card-image rounded-circle">',
        $imageurl,
        get_string('pictureof', 'core', $group->name) // 复用系统翻译文本
    );
}
$text .= '<div class="card-content">' . format_text($post->message) . '</div></div>';

4. 参考论坛模板的上下文逻辑

如果需要更精准的实现,可以查看mod/forum/renderer.php里的render_forum_discussion_post方法——这里就是把群组URL、头像URL组装到urls数组传递给模板的地方,完全可以复用其中的URL生成逻辑到新闻模块中。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 13:10:28