dede:list 主要用于在列表页(如首页、栏目页、搜索页等)循环输出文章列表,它的功能类似于 PHP 中的 foreach 循环,是 DedeCMS 内容列表展示的基础。

dede:list 的基本语法
dede:list 标签通常成对出现,包含一个开始标签 {dede:list} 和一个结束标签 {/dede:list},所有需要在循环中重复显示的 HTML 代码都放置在这两个标签之间。
{dede:list}
<!-- 循环体:这里放置每篇文章的HTML结构 -->
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:list}
核心属性
dede:list 的行为由其属性控制,这些属性通常写在开始标签内。
typeid (栏目ID)
- 作用:指定要获取内容的栏目ID。
- 类型:数字
- 说明:
- 如果指定了
typeid,则只显示该栏目及其子栏目下的文章。 - 如果不指定,则根据页面所在的栏目自动获取,在
list.php?tid=5页面,typeid默认就是 5。 - 如果想获取所有栏目的内容,可以设置为
typeid='0'。
- 如果指定了
row (获取条数)
- 作用:设置要输出的文章数量。
- 类型:数字
- 说明:
- 默认值为
10,即每页显示 10 篇文章。 - 这个值会与后台的“列表每页条数”设置进行交互,最终取较小值。
- 默认值为
titlelen (标题长度)
- 作用:截取文章标题的显示长度。
- 类型:数字 (单位:字节)
- 说明:
- 过长,可以使用此属性进行截断,并自动添加省略号 。
titlelen='30'表示标题最多显示 30 个字节(一个汉字占2个字节,一个英文占1个字节)。
infolen (摘要长度)
- 作用:截取文章摘要(
description字段)的显示长度。 - 类型:数字 (单位:字节)
- 说明:
- 与
titlelen类似,用于控制文章摘要的显示长度。 - 如果文章没有填写摘要,则会自动从文章正文中截取。
- 与
imgwidth & imgheight (缩略图尺寸)
- 作用:强制设置文章缩略图的显示宽度和高度。
- 类型:数字 (单位:像素)
- 说明:
- 这两个属性通常配合
{dede:field name='imglink'/}或<img src="[field:litpic/]">使用。 - 它只影响前端显示,不会改变上传的图片原始尺寸,如果比例不匹配,图片可能会被拉伸。
- 这两个属性通常配合
orderby (排序方式)
- 作用:设置文章的排序依据。
- 类型:字符串
- 常用值:
senddate:按发布时间排序 (默认)。pubdate:按发布时间排序 (与senddate通常一致)。hot或click:按点击量排序。lastpost:按最后评论时间排序。scores:按评分排序。id:按文章ID排序。
orderway (排序方向)
- 作用:设置排序的升降序。
- 类型:字符串 (
desc或asc) - 常用值:
desc:降序 (从大到小,时间最新的在前,点击量高的在前)。asc:升序 (从小到大)。
- 说明:必须与
orderby属性配合使用,默认为desc。
完整的属性示例
这是一个包含多个属性的 dede:list 标签,非常常见:
{dede:list typeid='5' row='8' titlelen='40' infolen='150' orderby='click' orderway='desc'}
<div class="article-item">
<div class="article-thumb">
<a href="[field:arcurl/]">
<img src="[field:litpic/]" alt="[field:title/]" width="200" height="150">
</a>
</div>
<div class="article-info">
<h2><a href="[field:arcurl/]">[field:title/]</a></h2>
<p class="summary">[field:description function='cn_substr(@me, 150)'/]...</p>
<div class="article-meta">
<span>作者:[field:writer/]</span>
<span>时间:[field:pubdate function="MyDate('Y-m-d H:i',@me)"/]</span>
<span>点击:[field:click/]</span>
</div>
</div>
</div>
{/dede:list}
代码解释:

- 从 ID 为 5 的栏目及其子栏目中获取文章。
- 每页显示 8 篇,最多显示 40 个字节,最多显示 150 个字节。
- 按点击量从高到低排序。
dede:list 内部使用的字段
在 {dede:list} 和 {/dede:list} 之间,我们可以使用 [field:字段名/] 的形式来调用文章的各种信息。
| 字段名 | 说明 | 示例 |
| :--- | :--- | :--- | | 文章标题 | [field:title/] |
| arcurl | 文章链接 | [field:arcurl/] |
| description | | [field:description/] |
| litpic | 缩略图地址 | [field:litpic/] |
| pubdate | 发布时间 (时间戳) | [field:pubdate/] |
| click | 点击量 | [field:click/] |
| writer | 作者 | [field:writer/] |
| source | 来源 | [field:source/] |
| typename | 所属栏目名 | [field:typename/] |
| id | 文章ID | [field:id/] |
字段值的处理(使用 function)
对于时间戳等需要格式化的字段,可以使用 function 属性进行处理。
<!-- 格式化发布时间 -->
[field:pubdate function="MyDate('Y-m-d',@me)"/]
<!-- 更复杂的格式化 -->
[field:pubdate function="MyDate('Y年m月d日 H时i分',@me)"/]
<!-- 截取摘要并过滤HTML标签 -->
[field:description function='cn_substr(html2text(@me), 150)'/]
注意:
function中使用的@me代表当前字段的原始值。(图片来源网络,侵删)
与 dede:arclist 的区别
初学者很容易混淆 dede:list 和 dede:arclist,它们的主要区别如下:
| 特性 | dede:list |
dede:arclist |
|---|---|---|
| 使用场景 | 列表页 (list.php) |
非列表页(首页、封面页、文章页等) |
| 分页 | 自动支持分页,底层自动生成分页代码。 | 不支持自动分页,需要手动配合 php 代码实现分页逻辑。 |
| 性能 | 在列表页中性能更好,代码更简洁。 | 功能更强大,但代码稍复杂。 |
| 底层机制 | 调用 list_artilce.htm 模板。 |
调用 article_spec.htm 模板。 |
简单总结:
- 只要在是文章列表页面(URL 中包含
tid参数),就用{dede:list}。 - 在其他任何地方(如首页、文章详情页、自定义页面)需要调用文章列表,就用
{dede:arclist}。
常见问题与注意事项
-
[field:arcurl/]打不开链接?- 确保文章已生成静态 HTML 文件。
dede:list依赖静态文件来获取链接。 - 检查文章的“跳转网址”字段是否为空,如果不为空,
arcurl会指向跳转地址。
- 确保文章已生成静态 HTML 文件。
-
排序不生效?
- 检查
orderby和orderway的值是否正确。 - 确保数据库中对应的字段(如
click)有值,新文章的点击量可能为 0。
- 检查
-
分页代码在哪?
-
{dede:list}的分页代码不需要自己写,它通常紧跟在{dede:list}循环体的后面,使用{dede:pagelist/}标签来显示。 -
在
list_article.htm模板中,结构通常是:{dede:list} <!-- 循环内容 --> {/dede:list} <!-- 分页条 --> <div class="dede_pages"> <ul> {dede:pagelist listsize="4" listitem="info,index,end,pre,next,pageno"} {/dede:pagelist} </ul> </div>
-
希望这份详细的解析能帮助你完全掌握 dede:list 的使用!

