核心概念:图片列表模板的工作原理
在 DedeCMS 中,一个完整的图片列表效果,通常需要两个文件协同工作:

- 列表模板文件:定义了整个列表页的 HTML 结构,包括页头、页脚、以及循环输出文章列表的代码块,这个文件本身不包含具体的文章数据,它只是一个“模具”。
- 页中的字段:文章的具体内容,比如标题、缩略图、简介等,都存储在每篇文章对应的数据库表字段中,列表模板通过特定的标签(如
{dede:arclist})从数据库中读取这些字段,并填充到“模具”中,最终生成完整的 HTML 页面。
制作图片列表模板的关键在于:
- 编写正确的列表模板 HTML 结构。
- 使用正确的 DedeCMS 标签来调用文章数据。
- 在后台为每篇文章上传并设置好缩略图。
制作步骤详解
步骤 1:准备后台数据(文章和缩略图)
这是最基础也是最重要的一步,在制作模板之前,请确保:
- 创建栏目:在后台“栏目管理”中,创建一个新栏目。
- 选择栏目类型:创建栏目时,“栏目列表选项” 必须选择 “图片列表”,这是启用图片列表模板的前提。
- 上传文章:为该栏目添加文章。
- 上传并设置缩略图:在添加或编辑文章时,找到“缩略图”选项,点击“上传新文件”或“选择已上传的图片”,为文章设置一张缩略图,这张图片将被
{dede:field.litpic /}或{dede:img}标签调用。
步骤 2:创建和编辑列表模板文件
- 进入模板管理:在后台,找到“模板” -> “默认模板管理”。
- 选择对应栏目:在左侧的栏目列表中,找到你刚刚创建的“图片列表”类型的栏目。
- 修改或创建模板:
- 如果系统已经为该栏目生成了一个默认的列表模板(如
list_image.htm),你可以直接点击“修改”。 - 如果没有,或者你想创建一个全新的,可以点击“增加模板”,然后选择“从默认模板创建”,或者直接上传你写好的模板文件。
- 如果系统已经为该栏目生成了一个默认的列表模板(如
步骤 3:编写模板代码(核心部分)
下面是一个最常用、最经典的图片列表模板代码结构,我们以此为例进行详细讲解。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">{dede:field.title/} - {dede:global.cfg_webname/}</title>
<link rel="stylesheet" href="/templets/default/style/style.css">
</head>
<body>
<!-- 页头部分 (header) -->
{dede:include filename="header.htm"/}
<!-- 主要内容区域 -->
<div class="main-container">
<div class="wrap">
<!-- 左侧边栏 -->
{dede:include filename="left.htm"/}
<!-- 右侧列表内容区 -->
<div class="list-content">
<!-- 当前栏目位置 -->
<div class="position">
<a href="/">首页</a> > {dede:type typeid='0'}<a href="[field:typelink/]">[field:typename/]</a>{/dede:type}
</div>
<!-- 列表标题 -->
<h2 class="list-title">{dede:field.title/}</h2>
<!-- 图片列表主体部分 - 使用 arclist 标签 -->
<ul class="img-list">
{dede:arclist titlelen='30' row='6' typeid='' col='2'}
<li>
<!-- 文章链接 -->
<a href="[field:arcurl/]">
<!-- 缩略图 -->
<img src="[field:litpic/]" alt="[field:title/]" width="200" height="150">
<!-- 文章标题 -->
<h3>[field:title/]</h3>
<!-- 文章简介 -->
<p>[field:description function='cn_substr(@me, 100)'/]...</p>
</a>
</li>
{/dede:arclist}
</ul>
<!-- 分页 -->
<div class="page-nav">
{dede:pagelist listsize='4' listitem='info,index,nextend,pre,end,pageno'}
</div>
</div>
</div>
</div>
<!-- 页脚部分 (footer) -->
{dede:include filename="footer.htm"/}
</body>
</html>
核心标签详解
{dede:arclist}
这是调用文章列表的核心标签,功能非常强大。
(图片来源网络,侵删)
-
基本用法:
{dede:arclist ...}...循环内容...{/dede:arclist}
-
常用属性:
row='6':获取文章的数量,这里表示获取 6 篇。
typeid='':指定调用哪个栏目的文章,如果为空,则默认调用当前栏目及其子栏目的文章。
col='2':每行显示的列数,结合 CSS 可以实现网格布局。
titlelen='30'长度,截取 30 个字符。
infolen='100':简介长度,截取 100 个字符。
imgwidth='200' 和 imgheight='150':设置缩略图的宽度和高度。注意:这不会改变图片文件本身的大小,只是在页面上用 CSS 控制显示尺寸,可能会导致图片变形,更推荐用 CSS 控制。
orderby='pubdate':排序方式。pubdate 按发布日期排序,hot 按点击量排序,rand 随机排序。
channelid='1':指定调用模型的 ID,1 代表文章模型。
内部字段标签(在 {dede:arclist} 循环内使用)
这些标签用于获取单篇文章的具体信息。
[field:arcurl/]:文章的链接地址。
[field:litpic/]:文章的缩略图地址,这是实现图片列表的关键。
[field:title/]:文章的标题。
[field:description/]:文章的简介,通常会用 function='cn_substr(@me, 100)' 来截取前 100 个字符,避免简介过长。
[field:pubdate function='strftime("%Y-%m-%d", @me)'/]:文章的发布日期,并格式化为 年-月-日。
[field:click/]:文章的点击量。
CSS 样式配合
光有 HTML 模板是不够的,还需要 CSS 来美化布局,下面是配合上面 HTML 代码的 CSS 样例。
(图片来源网络,侵删)
/* 清除默认样式 */
* { margin: 0; padding: 0; box-sizing: border-box; }
body { font-family: "Microsoft YaHei", sans-serif; }
区域 */
.main-container { padding: 20px 0; }
.wrap { width: 1200px; margin: 0 auto; }
.list-content { float: right; width: 880px; }
.left { float: left; width: 300px; } /* 假设左边栏宽度 */
/* 图片列表样式 */
.img-list { list-style: none; display: flex; flex-wrap: wrap; }
.img-list li {
width: 280px; /* (880 / 2) - 间距 */
margin: 10px;
border: 1px solid #eee;
border-radius: 5px;
overflow: hidden;
transition: all 0.3s;
}
.img-list li:hover {
box-shadow: 0 5px 15px rgba(0,0,0,0.1);
transform: translateY(-5px);
}
.img-list li a { display: block; text-decoration: none; color: #333; }
.img-list li img {
width: 100%;
height: 180px; /* 固定高度,保持整齐 */
object-fit: cover; /* 关键:图片会填充区域,并保持比例,不变形 */
display: block;
}
.img-list li h3 {
padding: 10px;
font-size: 16px;
font-weight: normal;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.img-list li p {
padding: 0 10px 10px;
font-size: 14px;
color: #666;
height: 40px; /* 固定高度,确保整齐 */
overflow: hidden;
}
/* 分页样式 */
.page-nav { text-align: center; margin-top: 30px; }
.page-nav a, .page-nav span { margin: 0 5px; padding: 5px 10px; border: 1px solid #ddd; }
.page-nav a:hover, .page-nav .thisclass { background-color: #007bff; color: #fff; border-color: #007bff; }
常见问题与高级技巧
如何调用指定栏目的图片列表?
在 {dede:arclist} 标签中,使用 typeid 属性,并填入目标栏目的 ID。
要调用栏目 ID 为 5 的文章:
{dede:arclist typeid='5' row='8' col='4'}
...
{/dede:arclist}
如何不使用缩略图,直接调用文章内容中的第一张图?
是使用编辑器(如ckeditor)填写的,并且第一张图不是通过缩略图功能上传的,可以使用 {dede:img}
{dede:arclist row='6'}
<li>
<a href="[field:arcurl/]">
<!-- 调用文章内容中的第一张图 -->
[field:img /]
<h3>[field:title/]</h3>
</a>
</li>
{/dede:arclist}
注意:{dede:img} 标签会自动匹配 body 字段中的第一张 <img> 标签并输出。
如何实现瀑布流布局?
瀑布流布局通常需要 JavaScript(如 jQuery Masonry 或 Isotope)配合,基本思路是:
- HTML 结构:使用一个容器包裹所有图片列表项,列表项使用
<div> 而不是 <li>,并移除固定高度。<div class="waterfall-container">
{dede:arclist row='12'}
<div class="waterfall-item">
<a href="[field:arcurl/]">
<img src="[field:litpic/]" alt="[field:title/]">
<h3>[field:title/]</h3>
</a>
</div>
{/dede:arclist}
</div>
- CSS 样式:设置容器为相对定位,每个项目为绝对定位,并设置一个固定的宽度。
- JavaScript:引入瀑布流插件,在页面加载完成后对
.waterfall-container 进行初始化,插件会自动计算并设置每个项目的 top 和 left 值,形成瀑布流效果。
如何自定义分页样式?
{dede:pagelist} 标签的 listitem 属性可以控制分页导航栏显示哪些部分。
listitem='info,index,nextend,pre,end,pageno' 是一个常用的组合,显示:
info:显示总页数、总记录数等信息。
index:显示首页。
pre:显示上一页。
pageno:显示页码列表。
next:显示下一页。
nextend:显示末页。
end:显示末页。
你可以根据需要增删这些项。
制作 DedeCMS 图片列表模板的流程可以概括为:
- 后台准备:创建“图片列表”栏目,并为文章上传缩略图。
- 编写 HTML 模板:使用
{dede:arclist} 标签作为循环核心,并用 [field:*] 系列标签调用文章数据。
- 编写 CSS 样式:通过 CSS 控制列表的布局、间距、图片显示效果等。
- 高级应用:根据需求使用
typeid、{dede:img} 等标签实现更复杂的功能,或结合 JavaScript 实现瀑布流等特效。
掌握 {dede:arclist} 标签是制作所有列表模板(包括图片列表、普通文章列表等)的基础,请务必熟悉其常用属性和内部字段。
这是调用文章列表的核心标签,功能非常强大。

-
基本用法:
{dede:arclist ...}...循环内容...{/dede:arclist} -
常用属性:
row='6':获取文章的数量,这里表示获取 6 篇。typeid='':指定调用哪个栏目的文章,如果为空,则默认调用当前栏目及其子栏目的文章。col='2':每行显示的列数,结合 CSS 可以实现网格布局。titlelen='30'长度,截取 30 个字符。infolen='100':简介长度,截取 100 个字符。imgwidth='200'和imgheight='150':设置缩略图的宽度和高度。注意:这不会改变图片文件本身的大小,只是在页面上用 CSS 控制显示尺寸,可能会导致图片变形,更推荐用 CSS 控制。orderby='pubdate':排序方式。pubdate按发布日期排序,hot按点击量排序,rand随机排序。channelid='1':指定调用模型的 ID,1 代表文章模型。
内部字段标签(在 {dede:arclist} 循环内使用)
这些标签用于获取单篇文章的具体信息。
[field:arcurl/]:文章的链接地址。[field:litpic/]:文章的缩略图地址,这是实现图片列表的关键。[field:title/]:文章的标题。[field:description/]:文章的简介,通常会用function='cn_substr(@me, 100)'来截取前 100 个字符,避免简介过长。[field:pubdate function='strftime("%Y-%m-%d", @me)'/]:文章的发布日期,并格式化为年-月-日。[field:click/]:文章的点击量。
CSS 样式配合
光有 HTML 模板是不够的,还需要 CSS 来美化布局,下面是配合上面 HTML 代码的 CSS 样例。

/* 清除默认样式 */
* { margin: 0; padding: 0; box-sizing: border-box; }
body { font-family: "Microsoft YaHei", sans-serif; }
区域 */
.main-container { padding: 20px 0; }
.wrap { width: 1200px; margin: 0 auto; }
.list-content { float: right; width: 880px; }
.left { float: left; width: 300px; } /* 假设左边栏宽度 */
/* 图片列表样式 */
.img-list { list-style: none; display: flex; flex-wrap: wrap; }
.img-list li {
width: 280px; /* (880 / 2) - 间距 */
margin: 10px;
border: 1px solid #eee;
border-radius: 5px;
overflow: hidden;
transition: all 0.3s;
}
.img-list li:hover {
box-shadow: 0 5px 15px rgba(0,0,0,0.1);
transform: translateY(-5px);
}
.img-list li a { display: block; text-decoration: none; color: #333; }
.img-list li img {
width: 100%;
height: 180px; /* 固定高度,保持整齐 */
object-fit: cover; /* 关键:图片会填充区域,并保持比例,不变形 */
display: block;
}
.img-list li h3 {
padding: 10px;
font-size: 16px;
font-weight: normal;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.img-list li p {
padding: 0 10px 10px;
font-size: 14px;
color: #666;
height: 40px; /* 固定高度,确保整齐 */
overflow: hidden;
}
/* 分页样式 */
.page-nav { text-align: center; margin-top: 30px; }
.page-nav a, .page-nav span { margin: 0 5px; padding: 5px 10px; border: 1px solid #ddd; }
.page-nav a:hover, .page-nav .thisclass { background-color: #007bff; color: #fff; border-color: #007bff; }
常见问题与高级技巧
如何调用指定栏目的图片列表?
在 {dede:arclist} 标签中,使用 typeid 属性,并填入目标栏目的 ID。
要调用栏目 ID 为 5 的文章:
{dede:arclist typeid='5' row='8' col='4'}
...
{/dede:arclist}
如何不使用缩略图,直接调用文章内容中的第一张图?
是使用编辑器(如ckeditor)填写的,并且第一张图不是通过缩略图功能上传的,可以使用 注意: 瀑布流布局通常需要 JavaScript(如 jQuery Masonry 或 Isotope)配合,基本思路是: 制作 DedeCMS 图片列表模板的流程可以概括为: 掌握 {dede:img}
{dede:arclist row='6'}
<li>
<a href="[field:arcurl/]">
<!-- 调用文章内容中的第一张图 -->
[field:img /]
<h3>[field:title/]</h3>
</a>
</li>
{/dede:arclist}
{dede:img} 标签会自动匹配 body 字段中的第一张 <img> 标签并输出。如何实现瀑布流布局?
<div> 而不是 <li>,并移除固定高度。<div class="waterfall-container">
{dede:arclist row='12'}
<div class="waterfall-item">
<a href="[field:arcurl/]">
<img src="[field:litpic/]" alt="[field:title/]">
<h3>[field:title/]</h3>
</a>
</div>
{/dede:arclist}
</div>
.waterfall-container 进行初始化,插件会自动计算并设置每个项目的 top 和 left 值,形成瀑布流效果。如何自定义分页样式?
{dede:pagelist} 标签的 listitem 属性可以控制分页导航栏显示哪些部分。
listitem='info,index,nextend,pre,end,pageno' 是一个常用的组合,显示:
info:显示总页数、总记录数等信息。index:显示首页。pre:显示上一页。pageno:显示页码列表。next:显示下一页。nextend:显示末页。end:显示末页。
你可以根据需要增删这些项。
{dede:arclist} 标签作为循环核心,并用 [field:*] 系列标签调用文章数据。typeid、{dede:img} 等标签实现更复杂的功能,或结合 JavaScript 实现瀑布流等特效。{dede:arclist} 标签是制作所有列表模板(包括图片列表、普通文章列表等)的基础,请务必熟悉其常用属性和内部字段。
