arclist 是 DedeCMS 最核心、最常用的列表标签,功能非常强大,调用图片主要通过其属性 litpic(缩略图)和 body)来实现。

(图片来源网络,侵删)
调用文章缩略图 (litpic)
这是最常见、最直接的方法,如果你的文章在发布时已经上传了缩略图,直接调用 litpic 即可。
基础语法
{dede:arclist typeid='' row='' col='' titlelen='' orderby=''}
<a href="[field:arcurl/]" title="[field:title/]">
<img src="[field:litpic/]" alt="[field:title/]" />
</a>
<h3><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></h3>
<p>[field:description function='cn_substr(@me,100)'/]...</p>
{/dede:arclist}
参数说明
typeid='': 指定栏目ID,如果你想只调用某个特定栏目下的文章,必须填写此参数。typeid='5',如果留空,则从所有栏目中调用。row='': 调用条数。row='6'表示调用6篇文章。col='': 分列数。col='3'表示将调用的文章分3列显示,通常配合tablewidth使用。titlelen='': 标题长度。titlelen='20'表示标题最多显示20个汉字。orderby='': 排序方式。orderby='hot'或orderby='click':按点击量排序。orderby='pubdate':按发布时间排序(默认)。orderby='sortrank':按后台文章排序号排序。
imgwidth='': 缩略图宽度。imgwidth='200'。imgheight='': 缩略图高度。imgheight='150'。type='image': 仅显示有缩略图的文章,这个参数非常有用,可以避免列表中出现没有图片的文章。channelid='': 指定模型ID,默认为文章模型(ID=1),如果是图集等,需要指定。
字段说明
[field:litpic/]: 文章缩略图的地址,这是调用图片的核心字段。[field:arcurl/]: 文章的链接地址。[field:title/]: 。[field:description/]: 文章的摘要,通常配合function='cn_substr(@me,100)'来截取摘要的前100个字符。
调用文章内容中的第一张图
如果你的文章没有上传缩略图,但希望在列表中显示文章正文(body)里的第一张图片,可以使用 GetOneImgUrl 函数。
基础语法
{dede:arclist typeid='' row='6'}
<a href="[field:arcurl/]" title="[field:title/]">
<img src="[field:body function='GetOneImgUrl(@me)'/]" alt="[field:title/]" />
</a>
<h3><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></h3>
{/dede:arclist}
语法详解
[field:body/]: 代表文章的完整内容。function='GetOneImgUrl(@me)': 这是关键。@me:代表field:body这个字段的原始值(即文章内容)。GetOneImgUrl():这是 DedeCMS 的一个内置函数,它会从传入的字符串(即文章内容)中提取出第一张图片的地址。- 如果文章内容中没有图片,这个函数会返回一个空字符串,
<img>标签将没有src属性,可能导致页面显示异常,通常建议结合type='image'使用,或者用if判断。
进阶用法:判断图片是否存在
为了更健壮,我们可以使用 if 标签来判断 litpic 是否存在,如果存在则调用 litpic,否则调用正文第一张图。
{dede:arclist typeid='5' row='6' type='image'}
<li>
<!-- 先判断是否有缩略图,有则调用缩略图,没有则调用正文第一张图 -->
[field:array runphp='yes']
if(@me['litpic'] != '') {
@me = '<a href="'.@me['arcurl'].'" title="'.@me['title'].'"><img src="'.@me['litpic'].'" alt="'.@me['title'].'" /></a>';
} else {
@me = '<a href="'.@me['arcurl'].'" title="'.@me['title'].'"><img src="'.GetOneImgUrl(@me['body']).'" alt="'.@me['title'].'" /></a>';
}
[/field:array]
<h4><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></h4>
<span>[field:pubdate function='MyDate("Y-m-d",@me)'/]</span>
</li>
{/dede:arclist}
代码解释:

(图片来源网络,侵删)
type='image'确保我们只处理有图片的文章(无论是缩略图还是正文图)。[field:array runphp='yes']...[/field:array]允许我们在 PHP 代码中访问当前文章的所有字段,如@me['litpic'],@me['arcurl']等。if...else...逻辑清晰,优先显示缩略图,没有再显示正文图。
调用图集中的图片
如果你的文章是“图集”模型,那么调用方式会有所不同,需要调用图集中的图片列表。
基础语法
{dede:arclist typeid='5' row='4' channelid='2'}
<a href="[field:arcurl/]" title="[field:title/]">
<!-- 调用图集中的第一张图片 -->
<img src="[field:imgurl/]" alt="[field:title/]" />
</a>
{/dede:arclist}
参数说明
channelid='2': 关键参数,必须指定为图集模型的ID,通常是2,如果你不确定,可以去后台“频道模型”-“内容模型管理”中查看图集的ID。[field:imgurl/]: 图集中第一张图片的地址,这是调用图集图片的核心字段。
常见问题与解决方案
调用出来的图片是空白或显示默认图片
- 原因: 文章没有上传缩略图。
- 解决方案:
- 方法一(推荐): 在
arclist标签中加入type='image',这样只调用有缩略图的文章。{dede:arclist typeid='5' row='6' type='image'} ... {/dede:arclist} - 方法二: 设置一个默认图片,当
litpic为空时,显示一个默认的图片地址。<img src="[field:litpic function='(@me ? @me : "/images/default.jpg")'/]" alt="[field:title/]" />
这里的
/images/default.jpg需要替换成你自己的默认图片路径。
- 方法一(推荐): 在
调用正文第一张图时,图片尺寸不一,样式混乱
- 原因: 从正文中提取的图片是原图,尺寸可能很大或很小。
- 解决方案: 使用 DedeCMS 的图片裁剪函数
ResizeImage。{dede:arclist typeid='5' row='6'} <img src="[field:body function='ResizeImage(@me, 200, 150)'/]" alt="[field:title/]" /> {/dede:arclist}ResizeImage函数说明:ResizeImage(原始字符串, 宽度, 高度)- 它会从原文中提取第一张图,并强制将其缩放到你指定的
200x150尺寸,同时保持图片比例不变(可能会在两侧或上下留白)。 - 这个函数非常实用,可以统一列表中图片的显示尺寸。
| 调用目标 | 核心标签/函数 | 适用场景 |
|---|---|---|
| 文章缩略图 | [field:litpic/] |
文章已上传缩略图,最常用。 |
| 文章正文第一张图 | [field:body function='GetOneImgUrl(@me)'/] |
文章未上传缩略图,但希望列表有图。 |
| 图集第一张图 | [field:imgurl/] + channelid='2' |
调用图集模型的文章。 |
| 统一图片尺寸 | function='ResizeImage(@me, w, h)' |
控制调用出的图片显示为固定宽高。 |
| 过滤无图文章 | type='image' |
确保列表中的每篇文章都至少有一张图。 |
希望这份详细的指南能帮助你熟练掌握 DedeCMS arclist 标签的图片调用!
