{dede:list} 是什么?
{dede:list} 是一个循环标签,它的作用是:

(图片来源网络,侵删)
- 从数据库中查询出指定条件的内容列表。
- 对列表中的每一条内容,执行一次
{/dede:list}之间的代码块。 - 最终将所有内容拼接成一个完整的HTML列表,展示在页面上。
你可以把它想象成一个 foreach 循环,它遍历的是你的文章列表。
基本语法和结构
{dede:list} 的基本结构如下:
{dede:list pagesize='10' titlelen='40'}
<!-- 这里是循环体内的代码,对每一条记录执行 -->
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:list}
{dede:list ...}:循环开始标签,可以带属性来控制查询和输出。[field:xxx/]:这是字段标签,用于在循环体内获取当前这条记录的某个字段值,比如标题、链接、发布时间等。{/dede:list}:循环结束标签。
核心属性详解
{dede:list} 的强大之处在于其丰富的属性,这些属性让你可以灵活地控制列表的生成。
pagesize
- 作用:设置每页显示的文章数量。
- 示例:
{dede:list pagesize='20'} - 说明:这是分页功能的关键。
{dede:page/}标签会根据pagesize的值来计算总页数和生成上一页/下一页/页码等链接。
titlelen
- 作用:截取文章标题的长度(单位:汉字/英文字符)。
- 示例:
{dede:list titlelen='30'} - 使用:在循环体内使用
[field:title/]时,如果标题过长,可以通过此属性限制显示字数,避免页面布局错乱,如果设置了titlelen,[field:title/]输出的就是截断后的标题。
infolen
- 作用:截取文章简介(的长度(单位:汉字/英文字符)。
- 示例:
{dede:list infolen='200'} - 使用:在循环体内使用
[field:info/]时,可以控制显示的简介长度,这对于制作文章摘要列表非常有用。
orderby
- 作用:指定文章的排序方式。
- 可选值:
sortrank(默认): 按文章排序级别(后台设置的“置顶”、“推荐”等)排序。pubdate: 按发布时间降序(最新的在前)。senddate: 按录入时间降序。hot或click: 按点击量降序(热门文章)。lastpost: 按最后评论时间排序。scores: 按得分排序。id: 按文章ID排序。
- 示例:
{dede:list orderby='pubdate'}
orderway
- 作用:指定排序的方向(升序或降序)。
- 可选值:
desc(默认): 降序(从大到小,时间上是从新到旧)。asc: 升序(从小到大,时间上是从旧到新)。
- 示例:
{dede:list orderby='click' orderway='asc'}(按点击量从低到高排序)
channel
- 作用:指定要查询的模型ID。
- 示例:
{dede:list channel='1'}(查询文章模型ID为1的内容) - 说明:如果你的列表页需要显示不同模型的内容,这个属性就很有用,默认情况下,
{dede:list}只查询当前栏目所属模型的内容。
offset
- 作用:从第几条记录开始查询(偏移量)。
- 示例:
{dede:list offset='5' pagesize='10'](从第6条记录开始,显示10条) - 说明:可以实现“跳过前N篇文章”的效果,常用于首页或特殊列表页。
idlist
- 作用:直接指定要输出的文章ID列表,用逗号隔开。
- 示例:
{dede:list idlist='1,5,8,12'} - 说明:当需要输出一些指定的、不连续的文章时使用,一旦设置了
idlist,orderby、pagesize等排序和分页属性将失效。
常用字段标签详解
在 {dede:list} 循环体内,使用 [field:xxx/] 来调用当前文章的各个字段。

(图片来源网络,侵删)
| 字段标签 | 说明 | 常用示例 |
|---|---|---|
[field:id/] |
文章的唯一ID | 通常不直接显示,用于JS交互或构建其他链接。 |
[field:title/] |
<a href="[field:arcurl/]">[field:title/]</a> |
|
[field:arcurl/] |
文章的完整URL链接 | <a href="[field:arcurl/]">阅读全文</a> |
[field:shorttitle/] |
过长时作为备用。 | |
[field:pubdate/] |
文章发布时间(时间戳格式) | [field:pubdate function="MyDate('Y-m-d',@me)"] |
[field:senddate/] |
文章录入时间(时间戳格式) | [field:senddate function="MyDate('Y-m-d H:i:s',@me)"] |
[field:litpic/] |
文章的缩略图URL | <img src="[field:litpic/]" alt="[field:title/]"> |
[field:info/] |
文章简介( | [field:info/] (如果后台没填,则为空) |
[field:description/] |
文章SEO描述 | 通常用于 <meta name="description" content="[field:description/]"> |
[field:click/] |
文章点击数 | <span>浏览:[field.click/]次</span> |
[field:writer/] |
文章作者 | <span>作者:[field.writer/]</span> |
[field:source/] |
文章来源 | <span>来源:[field.source/]</span> |
[field:typeid/] |
文章所属栏目的ID | 通常用于JS交互。 |
[field:typename/] |
文章所属栏目的名称 | <span>[field:typename/]</span> |
[field:keywords/] |
文章关键词 | <span>标签:[field:keywords/]</span> |
特别说明:时间格式化
[field:pubdate/] 输出的是一个Unix时间戳(如:1633027200),无法直接使用,必须配合 function 属性来格式化。
语法:[field:字段名 function="函数名('格式',@me)"]
常用格式化函数:
MyDate: DedeCMS内置的日期格式化函数。MyDate('Y-m-d', @me)->2025-09-30MyDate('Y-m-d H:i:s', @me)->2025-09-30 10:00:00MyDate('Y年m月d日', @me)->2025年09月30日
cn_substr: 字符串截断函数,防止乱码。[field:title function="cn_substr(@me, 30)"]-> 截取标题前30个字符。
完整示例
假设我们要制作一个标准的文章列表页,包含标题、缩略图、发布时间和阅读次数。

(图片来源网络,侵删)
模板代码 (list_article.htm)
{dede:include filename="head.htm"/} <!-- 引入头部 -->
<div class="main">
<div class="list">
<h2 class="title">[field:typename/]</h2> <!-- 显示当前栏目名称 -->
<!-- 使用 dede:list 循环输出文章列表 -->
{dede:list pagesize='15' titlelen='40' orderby='pubdate' orderway='desc'}
<div class="list-item">
<div class="pic">
<a href="[field:arcurl/]">
<img src="[field:litpic/]" alt="[field:title/]" />
</a>
</div>
<div class="text">
<h3><a href="[field:arcurl/]">[field:title/]</a></h3>
<p class="intro">[field:info/]</p>
<div class="info">
<span class="date">[field:pubdate function="MyDate('Y-m-d',@me)"]</span>
<span class="click">浏览:[field.click/]次</span>
</div>
</div>
<div class="clear"></div>
</div>
{/dede:list}
<!-- 分页条 -->
<div class="page-nav">
{dede:page/}
</div>
</div>
</div>
{dede:include filename="footer.htm"/} <!-- 引入底部 -->
与 {dede:arclist} 的区别
新手常常混淆 {dede:list} 和 {dede:arclist},它们的主要区别在于使用场景:
| 特性 | {dede:list} |
{dede:arclist} |
|---|---|---|
| 核心用途 | 列表页 的核心标签,与 {dede:page/ 配合实现分页。 |
通用列表标签,常用于首页、栏目首页、内容页调用其他文章。 |
| 分页支持 | 原生支持分页,通过 pagesize 和 {dede:page/ 轻松实现。 |
不支持分页,如果要实现分页,需要结合其他复杂方法或自定义标签。 |
| 性能 | 在列表页中,性能更优,因为它直接为列表页场景设计。 | 在非列表页(如首页)调用少量数据时性能良好,但调用大量数据时可能不如 list。 |
| 灵活性 | 相对固定,主要用于内容模型的列表展示。 | 非常灵活,可以跨栏目、按特定条件(如 flag、typeid)调用文章,适合各种复杂场景。 |
简单总结:
- 做文章列表页、产品列表页等需要分页的列表时,用
{dede:list}。 - 在首页、内容页等地方,调用一些推荐文章、热门文章、相关文章等不需要分页的列表时,用
{dede:arclist}。
常见问题与技巧
-
Q: 为什么
[field:info/]没有内容? A: 因为[field:info/]调用的是文章的“字段,在后台发布文章时,必须在“编辑框中填写内容,它不会自动从文章正文中截取。 -
Q: 如何实现“带图”和“无图”两种不同的列表样式? A: 可以使用
if条件判断,如果缩略图不为空,则显示带图样式;否则显示无图样式。{dede:list} <div class="item"> {if $fields['litpic'] != ''} <!-- 有缩略图 --> <div class="img"><img src="[field:litpic/]" alt="[field:title/]"></div> <div class="content"> <h3><a href="[field:arcurl/]">[field:title/]</a></h3> <p>[field:info/]</p> </div> {else} <!-- 无缩略图 --> <div class="content-full"> <h3><a href="[field:arcurl/]">[field:title/]</a></h3> <p>[field:info/]</p> </div> {/if} </div> {/dede:list} -
Q: 如何只调用当前栏目的子栏目的文章? A: 这需要结合
{dede:channel}和{dede:list},或者使用更高级的SQL标签{dede:sql},对于初学者,推荐在后台通过“自定义列表”功能来实现,然后调用生成的列表。
希望这份详细的解析能帮助你彻底掌握 dede:list 的使用!
