使用织梦自带的 GetFirstImg 函数(最推荐)
这是织梦官方内置的函数,专门用于这个目的,使用起来最简单、最稳定。

函数说明
通常在文章列表模板( 场景:在文章列表页显示每篇文章的第一张图作为缩略图 打开你的列表模板文件 代码解释: 场景:在文章内容页获取第一张图 在 如果你觉得 示例函数代码: 现在你可以在任何模板中调用这个新函数了。 示例:在列表模板中使用 代码解释: 这种方法最直接,但不够灵活,且如果织梦官方更新了函数逻辑,可能会产生冲突。仅作了解,不建议在生产环境中使用。 在模板文件中使用 缺点: 最终建议:GetFirstImg($body):接收文章正文内容($body)作为参数,返回第一张图片的完整 <img>
使用场景
list_article.htm)或文章内容页模板(article_article.htm)中使用。使用示例
list_article.htm,找到循环文章内容的地方(通常是 [field:body/] 或类似标签所在的位置),用以下代码替换:{dede:list pagesize='10'}
<li>
<!-- 获取第一张图片并显示 -->
[field:body function='GetFirstImg(@me)'/]
<!-- 如果需要只显示图片地址,而不是整个img标签,可以这样做 -->
<!-- [field:body function='preg_replace('/.*?src="(.*?)".*?/i', '\\1', GetFirstImg(@me))'/] -->
<a href="[field:arcurl/]">[field:title/]</a>
<p>[field:description function='cn_substr(@me, 100)'/]...</p>
</li>
{/dede:list}

[field:body function='GetFirstImg(@me)'/]:这是核心用法。
@me:代表当前字段的原始值,在这里就是文章的 body 字段内容。function='GetFirstImg()':调用 GetFirstImg 函数,并将 @me(即文章正文)作为参数传递进去。<img src='/uploads/2025/10/01/1.jpg' alt='' width='100' height='100' /> 这样的完整HTML标签。article_article.htm 模板中,如果你想获取正文第一张图,可以这样用:<!-- 在文章内容上方或任意位置显示第一张图 -->
{dede:field.body function='GetFirstImg(@me)'/}
<!-- 文章正文内容 -->
{dede:field.body/}
使用自定义函数(更灵活)
GetFirstImg 函数不够用(比如你想自定义默认图片、获取图片地址但不带 <img> 标签等),你可以自己写一个函数。步骤:创建自定义函数
include/helpers/extend.helper.php 文件,这个文件是专门用来存放自定义扩展函数的。?> 之前,添加你自己的函数代码。
/**
* 获取文章正文中的第一张图片地址
* @param string $body 文章内容
* @param string $default 默认图片地址(如果找不到图片则返回此)
* @return string 图片地址
*/
function GetFirstImgUrl($body, $default = '/images/default.jpg')
{
// 如果body为空,直接返回默认图
if (empty($body)) {
return $default;
}
// 匹配 <img> 标签的正则表达式
// 匹配 src 属性,并捕获其值
$pattern = "/<img\s[^>]*?src=['\"](.*?)['\"][^>]*?>/i";
if (preg_match($pattern, $body, $matches)) {
// 如果找到匹配,返回第一个捕获组(即图片地址)
return $matches[1];
} else {
// 如果没找到图片,返回默认图
return $default;
}
}
在模板中使用
{dede:list pagesize='10'}
<li>
<!-- 调用自定义函数,并传入默认图片地址 -->
<img src="[field:body function='GetFirstImgUrl(@me, "/images/no_pic.jpg")'/]" alt="[field:title/]" />
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:list}
GetFirstImgUrl(@me, "/images/no_pic.jpg"):调用我们刚刚创建的函数。@me:依然是文章正文。"/images/no_pic.jpg":作为第二个参数传入,是找不到图片时显示的默认图片地址。
直接使用正则表达式(不推荐,但了解无妨)
preg_replace 来直接提取。{dede:list pagesize='10'}
<li>
<!-- 使用正则表达式直接替换,只保留第一张图片的src -->
[field:body function='preg_replace("/.*?<img\s[^>]*?src=[\'|\"](.*?)[\'|\"].*?>/i", "\\1", @me)'/]
<!-- 如果想得到整个img标签,可以这样写 -->
<!-- [field:body function='preg_replace("/^.*?<img\s[^>]*?src=[\'|\"](.*?)[\'|\"].*?>.*$/i", "<img src=\"\\1\" />", @me)'/] -->
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:list}
GetFirstImg 的实现,导致你的正则表达式失效。
总结与推荐
方法
优点
缺点
推荐度
GetFirstImg 函数官方内置,稳定可靠,使用简单
功能相对固定,自定义能力稍弱
⭐⭐⭐⭐⭐ (首选)
自定义函数
灵活强大,可自定义默认图、返回格式等
需要手动修改文件,对新手稍复杂
⭐⭐⭐⭐ (进阶首选)
正则表达式
直接,不依赖函数
代码复杂,不易维护,不推荐
⭐ (仅作了解)
