{dede:img}标签:用于调用图集(相册)- 中的图片附件:用于文章正文内的图片
- 图集功能:
{dede:img}的数据来源
{dede:img} 标签(主要用于调用图集)
{dede:img} 是一个循环标签,专门用于调用图集(相册)模型中的图片,它通常与 {dede:imglist} 配合使用。

(图片来源网络,侵删)
基本用法
{dede:img} 必须放在 {dede:imglist} 标签的内部使用,它会遍历当前图集中的每一张图片。
{dede:imglist}
<li>
<a href="[field:link/]" title="[field:text/]">
<img src="[field:imgsrc/]" alt="[field:text/]">
</a>
</li>
{/dede:imglist}
在这个循环中,{dede:img} 的常用字段(field)有:
| 字段名 | 说明 | 示例 |
|---|---|---|
imgsrc |
图片的原始地址,这是最常用的字段,直接指向上传的图片文件。 | src="/uploads/230101/1-2301011F5302-50.jpg" |
text |
图片的标题/说明,在图集上传时为每张图片添加的描述文字。 | text="这是第一张图片的描述" |
link |
图片的跳转链接,可以设置为原图、幻灯片等,通常在图集模型设置中定义。 | link="/uploads/230101/1-2301011F5302-50.jpg" (指向原图) |
pagestyle |
图片的排版样式,在图集模型中可以设置,如1行1图、1行2图等。 | pagestyle="left" |
iswater |
图片是否添加了水印。1 表示已添加,0 表示未添加。 |
iswater="1" |
一个完整的图集调用示例
假设你要在首页或列表页调用一个图集,并显示缩略图和标题:
{dede:arclist typeid='1' row='5'} <!-- 调用ID为1的栏目下的5篇文章,只调用图集 -->
<div class="album-item">
<a href="[field:arcurl/]">
<!-- [field:litpic/] 是文章的缩略图,对于图集模型,通常是第一张图 -->
<img src="[field:litpic/]" alt="[field:title/]">
</a>
<h3><a href="[field:arcurl/]">[field:title/]</a></h3>
</div>
{/dede:arclist}
当用户点击进入这个图集文章后,在文章内容页(article_article.htm)中,你需要用 {dede:imglist} 来展示所有图片:

(图片来源网络,侵删)
<div class="album-content">
{dede:imglist}
<div class="img-item">
<a href="[field:link/]" title="[field:text/]">
<!-- 显示缩略图 -->
<img src="[field:imgsrc/]" alt="[field:text/]" width="300" height="200">
</a>
<p class="img-desc">[field:text/]</p>
</div>
{/dede:imglist}
</div>
中的图片附件
这部分指的是在编辑文章时,通过编辑器(如百度编辑器)直接插入到文章正文(body字段)里的图片。这些图片不是通过 {dede:img} 调用的。
如何获取正文中的第一张图片?
一个常见的需求是,在列表页显示文章的缩略图,如果没有缩略图,则自动提取正文中的第一张图片作为缩略图,这通常需要通过自定义函数或修改模板来实现。
在 include/extend.func.php 文件中添加一个自定义函数 GetBodyImg():
// 函数名:GetBodyImg
// 功能:获取文章正文中的第一张图片路径
// 参数:$body 文章内容
function GetBodyImg($body) {
$preg = "/<img.*?src=[\'|\"](.*?)[\'|\"].*?[\/]?>/i";
preg_match_all($preg, $body, $match);
if (!empty($match[1])) {
// 返回第一张图片的路径
return $match[1][0];
}
// 如果没有找到图片,可以返回一个默认图片
return '/images/default.jpg';
}
使用方法:

(图片来源网络,侵删)
- 将上面的代码添加到
include/extend.func.php文件的末尾。 - 在列表页模板(如
list_article.htm)中,使用[field:body function='GetBodyImg(@me)'/]来调用。
{dede:list pagesize='10'}
<li>
<!-- 如果文章有litpic缩略图,则使用litpic,否则调用GetBodyImg函数 -->
<img src="[field:litpic function='(@me ? @me : GetBodyImg(@me))'/]" alt="[field:title/]">
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:list}
注意:
[field:litpic/]是文章的缩略图字段,通常在后台发布文章时手动上传。[field:body/]是文章的正文内容。function='GetBodyImg(@me)'的意思是:将field:body的值(即文章正文内容)作为参数传递给GetBodyImg函数。
图集功能({dede:img} 的数据来源)
图集是 DedeCMS 的一种特殊的文章模型,创建图集文章的流程如下:
-
创建图集模型:
- 进入后台 -> 核心 -> 内容模型管理 -> 添加新模型。
- 模型名称:图集
- 模型表:默认即可
- 字段管理:系统会自动添加
dede_addonimages这个附加表,用于存储图片信息。
-
发布图集文章:
- 进入后台 -> 核心 -> 内容管理 -> 添加内容。
- 选择“图集”模型。
- 等基本信息。
- 在“图集内容”区域,点击“上传图片”按钮,上传多张图片,并为每张图片填写“图片说明”(即
{dede:img}的text字段)。
-
数据存储:
- 文章的基本信息(标题、时间等)存在
dede_archives表。 - 图集的图片信息(路径、说明等)存在
dede_addonimages表中,每张图片一条记录。 aid(文章ID)是连接archives和addonimages两个表的关键字段。
- 文章的基本信息(标题、时间等)存在
-
调用逻辑:
{dede:imglist}标签首先会根据当前文章的ID(aid)去dede_addonimages表中查找所有相关的图片记录。{dede:imglist}会循环遍历这些记录,并将每一条记录暴露给其内部的{dede:img}{dede:img}标签再通过field:imgsrc、field:text等字段来获取每一张图片的具体信息。
总结与对比
| 特性 | {dede:img}
| |
|---|---|---|
| 用途 | 调用图集中的图片,用于制作相册、幻灯片。 | 作为文章的一部分,用于图文并茂的文章。 |
| 数据来源 | dede_addonimages 附加表。 |
dede_arcticle 表的 body 字段(存储HTML代码)。 |
| 调用方式 | 必须在 {dede:imglist} 循环内部使用。 |
直接通过 [field:body] 获取,或通过自定义函数(如GetBodyImg)提取。 |
| 标签类型 | 循环标签,用于遍历一个图片列表。 | 普通字段标签,用于获取单个文本/HTML内容。 |
| 典型场景 | 图集详情页展示所有图片。 | 普通文章列表页提取正文图片作为缩略图。 |
简单记忆:
- 想做相册、图集,用
{dede:imglist}+{dede:img}。 - 想在文章正文里放图,直接用编辑器上传,图片就在
[field:body]里。 - 想把正文里的图拿出来当缩略图,用自定义函数
GetBodyImg。
