使用 litpic 字段(最推荐、最标准的方法)
这是 DedeCMS 最标准、最官方的方法,它要求你在后台发布文章时,必须上传或填写“缩略图”字段。

(图片来源网络,侵删)
后台设置(确保数据存在)
在发布或编辑文章时,找到“缩略图”选项,上传一张图片并保存。
- 路径:后台文章编辑页面 ->
高级选项->缩略图
前台首页调用代码
在你的首页模板文件(通常是 /templets/default/index.htm)中,使用 {dede:arclist} 标签来调用文章列表,并使用 [field:picname/] 来获取缩略图地址。
基本代码示例:
{dede:arclist row='10' titlelen='40'}
<div class="article-item">
<!-- 调用缩略图 -->
<a href="[field:arcurl/]">
<img src="[field:picname/]" alt="[field:title/]" />
</a>
<h2><a href="[field:arcurl/]">[field:title/]</a></h2>
<p>[field:description function='cn_substr(@me, 100)'/]...</p>
</div>
{/dede:arclist}
代码解释:

(图片来源网络,侵删)
{dede:arclist row='10' titlelen='40'}: 调用文章列表。row='10': 调用10篇文章。titlelen='40': 标题长度限制为40个字符。
[field:picname/]: 核心标签,用于获取文章的缩略图地址。[field:arcurl/]: 获取文章的链接地址。[field:title/]: 获取文章的标题。[field:description/]: 获取文章的摘要。
自动提取文章第一张图为缩略图(非常实用)
很多站长希望发布文章时不用手动上传缩略图,系统能自动抓取文章内容里的第一张图片作为缩略图,这个功能需要修改系统文件,但一劳永逸。
修改系统文件
你需要修改两个文件,请先备份!
第一步:修改 include/extend.func.php 文件
- 用 FTP 或服务器管理工具打开
/include/extend.func.php文件。 - 在文件末尾
?>的前面,添加如下 PHP 函数代码:
/**
* 获取文章body中的第一张图片路径
* @param string $body 文章内容
* @param string $prefix 图片路径前缀,默认为空
* @return string
*/
function GetFirstImg($body, $prefix = ''){
$preg = "/<img.*?src=[\'|\"](.*?)[\'|\"].*?[\/]?>/i";
preg_match_all($preg, $body, $match);
if(isset($match[1][0])){
// 如果图片是相对路径,则拼接网站域名
if(strpos($match[1][0], 'http') === false){
return $prefix.$match[1][0];
}
return $match[1][0];
}
// 如果没有图片,可以返回一个默认图片地址
return $prefix.'/images/default.jpg';
}
第二步:修改 arc.archives.class.php 文件

(图片来源网络,侵删)
- 打开
/include/arc.archives.class.php文件。 - 搜索
function GetHtmlBody()函数。 - 在这个函数里找到
//对body进行内容处理这一行,在其上面添加如下代码:
// 自动获取第一张图片作为缩略图 - Start $this->Fields['litpic'] = GetFirstImg($this->Fields['body'], $GLOBALS['cfg_cmspath']); // 自动获取第一张图片作为缩略图 - End
前台首页调用代码
代码和方法一完全一样!因为系统现在会自动将内容第一张图地址赋值给 litpic 字段。
{dede:arclist row='10' titlelen='40'}
<div class="article-item">
<a href="[field:arcurl/]">
<img src="[field:picname/]" alt="[field:title/]" />
</a>
...
</div>
{/dede:arclist}
优点:自动化程度高,无需手动操作。 缺点:需要修改核心文件,升级 DedeCMS 时可能会被覆盖。
使用 body 字段直接提取(不推荐,但应急可用)
这种方法不使用 litpic 字段,而是直接从文章内容 (body) 中提取第一张图,它不需要修改系统文件,但性能较差,且灵活性低。
前台首页调用代码
使用 {dede:field} 标签配合自定义函数。
{dede:arclist row='10' titlelen='40'}
<div class="article-item">
<a href="[field:arcurl/]">
<!-- 直接从body中提取第一张图 -->
<img src="{dede:field name='body' function='GetFirstImg(@me, "")'/}" alt="[field:title/]" />
</a>
...
</div>
{/dede:arclist}
代码解释:
{dede:field name='body' function='GetFirstImg(@me, "")'/}:name='body': 获取当前文章的bodyfunction='GetFirstImg(@me, "")': 调用我们之前在extend.func.php中定义的GetFirstImg函数,并将body内容 (@me) 作为参数传进去。
注意:这个方法虽然代码看起来可行,但在 {dede:arclist} 循环中调用 {dede:field} 标签有时会不稳定,性能也不如直接调用 [field:picname/]。强烈建议优先使用方法一和方法二。
总结与对比
| 方法 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
litpic 字段 |
标准、稳定、性能好,符合 DedeCMS 设计逻辑。 | 需要手动在后台上传缩略图。 | ⭐⭐⭐⭐⭐ (最推荐) |
| 自动提取 | 自动化、高效,用户体验好,无需手动操作。 | 需要修改核心文件,升级有风险。 | ⭐⭐⭐⭐ (非常推荐) |
| 直接提取 | 不需要修改系统文件。 | 性能较差,代码在循环中可能不稳定,不灵活。 | ⭐⭐ (应急备用) |
额外优化:处理没有缩略图的文章
为了避免在没有缩略图时显示破损的图标,我们可以使用 if 条件语句来判断。
{dede:arclist row='10' titlelen='40'}
<div class="article-item">
<!-- 如果有缩略图则显示,否则显示默认图片 -->
[field:array runphp='yes']
if(@me['litpic'] != '' && strpos(@me['litpic'], 'defaultpic') === false){
@me = '<a href="'.@me['arcurl'].'"><img src="'.@me['litpic'].'" alt="'.@me['title'].'" /></a>';
}else{
@me = '<a href="'.@me['arcurl'].'"><img src="/images/nothumb.jpg" alt="'.@me['title'].'" /></a>';
}
[/field:array]
...
</div>
{/dede:arclist}
代码解释:
[field:array runphp='yes']: 使用array循环并开启 PHP 执行。if(@me['litpic'] != '' ...): 判断litpic字段是否为空。strpos(@me['litpic'], 'defaultpic') === false: 额外判断一下,避免 DedeCMS 默认的“暂无缩略图”图片也被调用。@me = '...': 如果条件成立,就生成带缩略图的 HTML 代码。else: 如果不成立,就生成一个指向你准备的默认图片(如/images/nothumb.jpg)的 HTML 代码。
希望这份详细的指南能帮助到你!
