使用织梦自带的 litpic 字段(最推荐,最规范)
这是织梦官方推荐的最佳实践,它要求你在发布文章时,手动上传一张图片并将其设置为“缩略图”。

优点:
- 速度快:直接调用数据库字段,效率最高。
- 可控性强:你可以精确控制哪张图片作为列表图。
- SEO友好:
litpic字段通常用于alt属性,利于搜索引擎优化。
缺点:
- 需要手动为每篇文章设置缩略图。
实现步骤:
-
发布文章时设置缩略图: 在织梦后台发布或编辑文章时,在编辑器下方找到“缩略图”选项,点击“上传新图片”或“选择已上传图片”,为你选择的图片设置缩略图。
(图片来源网络,侵删) -
在模板文件中调用: 在你的列表页模板(通常是
/templets/default/list_article.htm页模板(article_article.htm)中,使用以下代码调用这张缩略图。示例代码(用于列表页):
<a href="[field:arcurl/]" title="[field:title/]"> <img src="[field:litpic/]" alt="[field:title/]" /> </a>[field:litpic/]:直接调用文章设置的缩略图地址。[field:arcurl/]:调用文章的链接地址。[field:title/]:调用文章标题,用作img的alt属性,这非常重要。
自动提取文章内容中的第一张图片(最灵活)
如果你不想为每篇文章都手动设置缩略图,可以使用PHP代码自动从文章内容 (body) 中提取第一张图片。
优点:

- 自动化:无需手动操作,系统自动获取。
- 适用性强:适合没有设置缩略图的文章。
缺点:
- 速度稍慢:需要解析文章内容,对服务器性能有轻微影响。
- 可能不准确:如果文章内容没有图片,或者第一张图片很小/不合适,效果会打折扣。
- 代码相对复杂。
实现步骤:
在需要调用的地方,使用织梦的 GetFirstImg 自定义函数。
-
在模板文件中直接调用: 将以下代码直接放在你需要显示图片的位置。
{dede:field.body function='GetFirstImg(@me)'/}这段代码会直接输出
<img src="图片地址" alt="" />这样的HTML标签。 -
更完整的用法(推荐,用于列表页): 通常我们会把它包裹在一个
<a>标签里,并设置默认图片。<a href="[field:arcurl/]" title="[field:title/]"> [field:body function='(preg_match("/<img\s.*?src\s*=\s*[\'|\"](.*?)[\'|\"].*?>/i", @me, $match) ? $match[1] : "默认图片地址");'/] </a>- 代码解析:
preg_match(...):这是一个正则表达式,用于在文章内容 (@me) 中查找第一个<img>标签并提取其src属性。? $match[1] : "默认图片地址":这是一个三元运算符,如果找到了图片,就使用$match[1](即图片地址);如果没有找到,就使用你指定的“默认图片地址”。- 你需要将
"默认图片地址"替换成你自己的图片路径,"/images/default.jpg"。
更简洁的写法(使用
GetFirstImg函数): 你可以在织梦的include/common.func.php文件中添加一个辅助函数,让模板更简洁。在
include/common.func.php文件末尾添加以下代码:/** * 获取文章body中的第一张图片路径 * @param string $body 文章内容 * @param string $default 默认图片 * @return string 图片路径 */ function GetFirstImg($body, $default = '/images/default.jpg') { preg_match_all('/<img.*?src=[\'|\"](.*?)[\'|\"].*?>/i', $body, $str_result, PREG_PATTERN_ORDER); $n = count($str_result[1]); if($n > 0){ return $str_result[1][0]; }else{ return $default; } }然后在模板中这样调用:
<a href="[field:arcurl/]" title="[field:title/]"> <img src="{dede:field.body function='GetFirstImg(@me, "/images/default.jpg")'/}" alt="[field:title/]" /> </a>这种方法更清晰,也方便统一修改默认图片。
- 代码解析:
使用“描述图片”字段(折中方案)
织梦文章模型中有一个“描述图片”字段,它介于手动和自动之间。
优点:
- 比手动设置缩略图更灵活。
- 比自动提取更可控。
缺点:
- 需要额外操作,不如
litpic方便。
实现步骤:
-
发布文章时设置描述图片: 在发布文章时,找到“描述图片”选项,上传或选择一张图片。
-
在模板中调用: 使用
[field:description/]来调用。<a href="[field:arcurl/]" title="[field:title/]"> <img src="[field:description/]" alt="[field:title/]" /> </a>
总结与建议
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
litpic |
最快、最规范、最推荐 | 需手动设置 | 对图片有明确要求的列表页,如首页、资讯列表。 |
| 自动提取 | 自动化、无需手动 | 速度慢、可能不准确、代码复杂 | 对图片要求不高,或作为 litpic 的补充,防止没有缩略图。 |
description |
介于两者之间 | 不如 litpic 方便 |
作为 litpic 的备用方案,或者在某些特定场景下使用。 |
最佳实践建议:
- 首选方法一 (
litpic):在发布文章时养成设置缩略图的好习惯,这是最专业、最高效的方式。 - 结合方法二:可以在调用
litpic的基础上,增加一个判断:litpic为空,则再尝试自动提取,这样既有保证,又有灵活性,这个逻辑可以在模板中通过PHP代码实现,也可以在自定义函数中实现。
在 common.func.php 中写一个更强大的函数:
// 在 common.func.php 中
function GetMyFirstImg($arcid, $default = '/images/default.jpg') {
// 先尝试获取 litpic
$row = $GLOBALS['dsql']->GetOne("SELECT litpic FROM `#@__archives` WHERE id = $arcid");
if (!empty($row['litpic'])) {
return $row['litpic'];
}
// litpic 为空,则从 body 中提取
$article = $GLOBALS['dsql']->GetOne("SELECT body FROM `#@__addonarticle` WHERE aid = $arcid");
if (!empty($article['body'])) {
preg_match('/<img.*?src=[\'|"](.*?)[\'|"].*?>/i', $article['body'], $match);
if (isset($match[1])) {
return $match[1];
}
}
// 如果都没有,返回默认图
return $default;
}
然后在模板中调用(需要开启“启用普通模板标签”或使用PHP):
{php $img = GetMyFirstImg($aid, '/images/default.jpg');}
<a href="[field:arcurl/]" title="[field:title/]">
<img src="<?php echo $img; ?>" alt="[field:title/]" />
</a>
希望这些详细的解释和代码能帮助你解决问题!
