核心概念
在织梦系统中,文章的缩略图信息主要存储在两个地方:

litpic字段:这是文章附加表(如dede_addonarticle)里的一个字段,专门用来存储上传的缩略图路径,如果你在后台发布文章时,通过“上传图片”或“远程图片”功能选择了缩略图,那么路径就会保存在这里。body字段:这是文章正文内容,如果文章正文中包含了<img>标签,我们也可以从正文中提取第一张图片作为缩略图。
根据你的需求,可以选择不同的方法。
直接调用 litpic 字段(最推荐)
这是最标准、最可靠的方法,适用于你已经为每篇文章上传或指定了缩略图的情况。
在列表页(如 arclist 标签)中调用
arclist 是织梦用于调用文章列表的万能标签,它可以直接获取 litpic 的值。
基本语法:

{dede:arclist row='10' titlelen='30'}
<li>
<a href="[field:arcurl/]">
<img src="[field:litpic/]" alt="[field:title function='html2text(@me)'/]" />
</a>
<a href="[field:arcurl/]">[field:title function='html2text(@me)'/]</a>
</li>
{/dede:arclist}
代码解释:
{dede:arclist row='10' ...}: 调用10篇文章。[field:litpic/]: 核心,直接输出该文章的缩略图路径。[field:arcurl/]: 输出文章的链接地址。[field:title function='html2text(@me)'/]: 输出文章标题,并使用function='html2text'过滤掉HTML标签,确保alt属性的纯净。
页(如 article_articledit.htm)中调用
在文章详情页,通常使用 field 标签来调用当前文章的字段。
基本语法:
<img src="{dede:field name='litpic'/}" alt="{dede:field name='title'/}" />
代码解释:

{dede:field name='litpic'/}: 直接获取当前文章的litpic字段值。
从文章正文 (body) 提取第一张图作为缩略图
如果你没有为每篇文章单独上传缩略图,但希望文章正文的第一张图片能作为列表页的缩略图,可以使用这个方法,这种方法非常灵活,但需要用到自定义函数。
步骤1:在 /include/extend.func.php 文件中添加自定义函数
这是织梦扩展功能的核心文件,打开它,在 ?> 标签前添加以下PHP函数:
/**
* 从文章正文中提取第一张图片
* @param string $body 文章内容
* @return string 图片路径,如果没有则返回默认图
*/
function GetFirstImg($body)
{
$preg = "/<img.*?src=[\'|\"](.*?)[\'|\"].*?[\/]?>/i";
preg_match_all($preg, $body, $match);
if (isset($match[1][0])) {
return $match[1][0];
} else {
// 如果没有图片,可以返回一个默认的缩略图地址
// 请将 /images/default.jpg 替换为你自己的默认图片路径
return '/images/default.jpg';
}
}
函数说明:
- 这个函数使用正则表达式在文章内容 (
$body) 中查找第一个<img>标签,并提取其src属性的值。 - 如果找到了图片,就返回图片路径。
- 如果没有找到图片,则返回一个你指定的默认缩略图,避免列表页显示空白。
步骤2:在模板中使用 function 调用这个新函数
你可以在模板中调用这个函数了。
在列表页(arclist 标签)中使用:
{dede:arclist row='10' titlelen='30'}
<li>
<a href="[field:arcurl/]">
<!-- 调用我们刚刚创建的 GetFirstImg 函数,参数是文章正文 [field:body/] -->
<img src="[field:body function='GetFirstImg(@me)'/]" alt="[field:title function='html2text(@me)'/]" />
</a>
<a href="[field:arcurl/]">[field:title function='html2text(@me)'/]</a>
</li>
{/dede:arclist}
页中使用:**
<img src="{dede:field name='body' function='GetFirstImg(@me)'/}" alt="{dede:field name='title'/}" />
结合 litpic 和 body 的“兜底”方案(最稳健)
这是一种生产环境中非常推荐的方案,逻辑如下:
- 优先检查
litpic字段,如果有值,就使用litpic。 litpic为空,则再从文章正文中提取第一张图片。- 如果正文中也没有图片,则显示默认图片。
这需要你使用一个更复杂的自定义函数。
步骤1:修改 /include/extend.func.php 中的函数
将之前的 GetFirstImg 函数替换为下面这个更强大的版本:
/**
* 智能获取文章缩略图
* 优先级:litpic > 正文第一张图 > 默认图
* @param string $litpic 专用缩略图
* @param string $body 文章内容
* @return string 最终的缩略图路径
*/
function GetSmartThumb($litpic, $body)
{
// 1. litpic 不为空,直接返回
if (!empty($litpic)) {
return $litpic;
}
// 2. litpic 为空,尝试从正文中提取
$preg = "/<img.*?src=[\'|\"](.*?)[\'|\"].*?[\/]?>/i";
preg_match_all($preg, $body, $match);
if (isset($match[1][0])) {
return $match[1][0];
}
// 3. 如果都没有,返回默认图
return '/images/default.jpg'; // 请替换为你的默认图片路径
}
步骤2:在模板中调用新函数
在列表页(arclist 标签)中使用:
{dede:arclist row='10' titlelen='30'}
<li>
<a href="[field:arcurl/]">
<!-- 同时传入 litpic 和 body 两个参数 -->
<img src="[field:litpic function='GetSmartThumb(@me, @me)'/]" alt="[field:title function='html2text(@me)'/]" />
</a>
<a href="[field:arcurl/]">[field:title function='html2text(@me)'/]</a>
</li>
{/dede:arclist}
注意:这里有一个小技巧。
arclist标签在循环时,每次都会把当前记录的所有字段(包括litpic和body)作为@me传递给函数。function='GetSmartThumb(@me, @me)'实际上是将litpic和body的值分别传给了函数的前两个参数。 页中使用:**
<img src="{dede:field name='litpic' function='GetSmartThumb(@me, @me)'/}" alt="{dede:field name='title'/}" />
注意页,
{dede:field name='litpic'}的@me是litpic的值,而{dede:field name='body'}的@me是body的值,它们不在同一个作用域,这种写法在内容页是错误的。 页的正确调用方式:** 页的field标签无法同时传递两个字段,我们需要在模板中稍微处理一下,或者使用PHP代码块,更简单的方式是创建一个专门用于内容页的函数,但为了通用性,我们推荐在模板里直接使用PHP逻辑(如果你的模板支持)。
<?php
// 如果模板支持PHP代码,可以这样写
if(!empty($fields['litpic'])) {
$thumb = $fields['litpic'];
} else {
$preg = "/<img.*?src=[\'|\"](.*?)[\'|\"].*?[\/]?>/i";
preg_match_all($preg, $fields['body'], $match);
$thumb = isset($match[1][0]) ? $match[1][0] : '/images/default.jpg';
}
?>
<img src="<?php echo $thumb; ?>" alt="<?php echo $fields['title']; ?>" />
总结与建议
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
litpic |
简单、快速、性能最好 | 依赖后台手动上传缩略图 | 对缩略图有专门要求,且内容编辑规范的网站。 |
从 body 提取 |
灵活、自动化,无需手动上传 | 性能稍差(需解析HTML),可能提取到无关小图 | 内容以图文为主,且不希望额外管理缩略图的网站。 |
| 智能混合 | 最稳健、最可靠,体验最好 | 函数和模板调用稍复杂 | 生产环境首选,兼顾了效率和自动化,确保列表页永远有图。 |
最终建议:
对于绝大多数网站,强烈推荐使用方法三(智能混合方案),它完美地结合了前两种方法的优点,提供了最好的用户体验和系统健壮性,虽然初期设置函数需要多花几分钟,但一劳永逸,避免了后续的各种麻烦。
