最简单的方法(使用系统自带的 litpic 字段)
这是最直接的方法,前提是你在发布文章时,手动为每篇文章上传并设置了缩略图。

适用场景已经全部上传完成,且每篇文章都有缩略图。
操作步骤:
-
确保文章有缩略图: 在后台发布文章时,在“常规选项”部分,务必上传一张图片作为“缩略图”。
-
修改列表页模板文件: 找到你的列表页模板文件,通常是
templets/default/list_article.htm(default是你的默认模板目录,请根据你的实际情况修改)。
(图片来源网络,侵删) -
在循环中插入缩略图代码: 在
{dede:list}或{dede:arclist}标签循环体内,添加以下代码来显示缩略图。<li> <!-- 原有的标题链接 --> <a href="[field:arcurl/]">[field:title/]</a> <!-- 新增的缩略图 --> <a href="[field:arcurl/]"> <img src="[field:litpic/]" alt="[field:title function='html2text(@me)'/]" /> </a> <!-- 其他信息,如摘要、时间等 --> <p>[field:description function='cn_substr(@me, 100)'/]...</p> <span>[field:pubdate function='MyDate("Y-m-d", @me)'/]</span> </li>
代码解释:
[field:litpic/]:这是织梦调用文章缩略图地址的核心标签。alt="[field:title function='html2text(@me)'/]":为图片添加alt属性,这是SEO优化的重要一步,html2text函数可以去除标题中的HTML标签。function='cn_substr(@me, 100)':截取摘要的前100个字符,避免过长。
自动提取文章第一张图为缩略图(推荐)
这是最常用也最智能的方法,它不需要你手动上传缩略图,系统会自动从文章内容(body字段)中提取第一张图片作为缩略图。
适用场景:新发布的文章忘记传缩略图,或者希望批量处理旧文章。

操作步骤:
第1步:修改数据库(一次性操作)
织梦默认的列表页调用标签不支持直接从文章内容提取图片,我们需要修改数据库,增加一个“自动缩略图”字段。
- 登录你的网站数据库(可以使用 phpMyAdmin 或其他工具)。
- 找到你的织梦数据库,找到
dede_archives表(dede_是你的表前缀)。 - 点击“结构”,然后点击“插入新字段”。
- 字段名:
litpic_auto - 类型:
varchar - 长度/值:
255 - 保存。
- 字段名:
第2步:修改 list.php 文件(核心逻辑)
-
找到并打开
/include/list.php文件。 -
找到大约在第380行左右的
//排序方式注释。 -
在这行代码 之前,添加以下PHP代码:
// 自动提取文章第一张图为缩略图 if($typeid == 0 && $isdefault == -1) { $query = "SELECT id,body FROM `#@__archives` WHERE id IN($arcids)"; $listarr = $dsql->GetAll($query); foreach($listarr as $v) { $body = $v['body']; // 使用正则表达式匹配第一个img标签的src preg_match_all('/<img.*?src="(.*?)".*?>/i', $body, $img_array); $img_src = $img_array[1][0]; if($img_src){ // 如果找到了图片,更新litpic_auto字段 $upquery = "UPDATE `#@__archives` SET litpic_auto = '$img_src' WHERE id = ".$v['id']; $dsql->ExecuteNoneQuery($upquery); } } }
代码解释:
- 这段代码会在生成列表页时,获取当前列表中的所有文章。
- 使用正则表达式
preg_match_all从文章的body字段中找出第一个<img>标签的src属性(即图片地址)。 - 如果找到了图片,就将这个地址更新到我们刚刚创建的
litpic_auto字段中。
第3步:修改列表页模板
模板中调用我们新创建的 litpic_auto 字段即可。
-
打开你的列表页模板
templets/default/list_article.htm。 -
将方案一中的
[field:litpic/]替换为[field:litpic_auto/]。<li> <a href="[field:arcurl/]"> <!-- 调用自动提取的缩略图 --> <img src="[field:litpic_auto/]" alt="[field:title function='html2text(@me)'/]" /> </a> <a href="[field:arcurl/]">[field:title/]</a> <p>[field:description function='cn_substr(@me, 100)'/]...</p> </li>
第4步:生成列表页面
完成以上修改后,去后台的“更新主页HTML”或“更新栏目HTML”中,重新生成你的列表页面,这时,文章就会自动显示内容中的第一张图片作为缩略图了。
更强大的“无图不显示”逻辑
有时候我们希望,如果文章没有图片,就不显示缩略图占位符,让列表更整洁。
操作步骤:
这个方案需要结合方案二,并使用织梦的底层模板(php 模板)来实现。
-
修改列表页模板: 将你的列表页模板文件后缀从
.htm改为.php,list_article.php。 -
在模板中编写PHP逻辑: 在
{dede:list}循环内部,使用PHP来判断。{dede:list pagesize='10'} <?php // 获取当前文章的body内容 $body = $fields['body']; // 检查body中是否包含图片 if (strpos($body, '<img') !== false) { // 如果有图片,显示缩略图 $has_img = true; } else { // 如果没有图片,不显示 $has_img = false; } ?> <li> <?php if ($has_img) { ?> <a href="<?php echo $fields['arcurl']; ?>"> <img src="<?php echo $fields['litpic_auto']; ?>" alt="<?php echo $fields['title']; ?>" /> </a> <?php } ?> <a href="<?php echo $fields['arcurl']; ?>"><?php echo $fields['title']; ?></a> <p><?php echo cn_substr($fields['description'], 100); ?>...</p> </li> {/dede:list}
代码解释:
strpos($body, '<img') !== false:这是一个简单的字符串查找,如果文章内容中包含<img标签,就认为有图。<?php if ($has_img) { ?> ... <?php } ?>:通过这个条件判断,只有当$has_img为true时,才渲染缩略图的HTML代码。
总结与建议
| 方案 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
手动litpic |
简单直接,无需修改代码 | 需要手动上传,内容多时很繁琐 | ⭐⭐ |
| 自动提取 | 智能高效,自动化处理,一劳永逸 | 需要修改数据库和核心文件,有技术门槛 | ⭐⭐⭐⭐⭐ (强烈推荐) |
| 无图不显示 | 页面更整洁,用户体验好 | 需要使用PHP模板,逻辑稍复杂 | ⭐⭐⭐⭐ |
给你的建议:
对于大多数网站,方案二(自动提取)是最佳选择,它完美地解决了手动上传缩略图的痛点,让内容发布流程更顺畅,虽然初期需要做一些设置,但长期来看非常值得。
如果你对页面美观度要求极高,可以考虑在方案二的基础上,再采用方案三的逻辑,实现“有图才显示”的效果。
