在 DedeCMS 中,循环主要通过 {dede:arclist} (文章列表) 和 {dede:loop} (通用循环) 这两个标签来实现,它们都遵循一个基本的结构:{dede:标签名 属性='值'}...循环内容...{/dede:标签名}。

(图片来源网络,侵删)
核心循环标签:{dede:arclist} 和 {dede:loop}
{dede:arclist} - 专门用于文章/文档列表循环
这是最常用、最强大的循环标签,专门用于调用文章、图集、软件等文档内容。
基本语法:
{dede:arclist flag='h' typeid='2' row='10' titlelen='30'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:arclist}
结构解析:
{dede:arclist ...}: 循环的开始。flag='h': 属性,表示调用推荐(头条)文章。typeid='2': 属性,表示只调用 ID 为 2 的栏目及其子栏目的文章。row='10': 属性,表示循环 10 次,即调用 10 篇文章。titlelen='30': 属性,表示标题最多显示 30 个字符。
...循环内容...: 每次循环时,都会执行一次这里的代码。[field:arcurl/]: 字段标签,代表当前文章的链接地址。- `[field:title/]字段标签**,代表当前文章的标题。
[field:pubdate .../]: 字段标签,代表当前文章的发布日期。function="MyDate('Y-m-d',@me)"是一个自定义函数,用来格式化日期。
{/dede:arclist}: 循环的结束。
常用属性:

(图片来源网络,侵删)
| 属性名 | 说明 | 示例 |
|---|---|---|
typeid |
调用指定栏目ID的文章,多个ID用逗号隔开。 | typeid='1,3,5' |
row |
循环输出的记录数,即调用多少篇文章。 | row='8' |
infolen |
内容简介长度,字符数。 | infolen='100' |
orderby |
排序方式。id(默认), pubdate(发布日期), hot(点击量), sortrank(权重)。 |
orderby='hot' |
keyword |
关键词,调用含有此关键词的文章。 | keyword='织梦' |
flag |
特殊属性。h(头条), c(推荐), p(图片), f(幻灯),可组合,如 hc。 |
flag='h' |
channelid |
模型ID。1为文章,2为图集,依此类推。 |
channelid='2' |
{dede:loop} - 通用数据循环
{dede:loop} 是一个更通用的循环标签,它可以循环任何数据表里的数据,不局限于文章,当你需要调用自定义数据表的内容时,这个标签非常有用。
基本语法:
{dede:loop table='dede_archives' sort='id' row='10' if=''}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:loop}
结构解析:
{dede:loop table='...' ...}:table='dede_archives': 必须属性,指定要循环的数据表名。dede_archives是文章主表。sort='id': 排序字段,默认为id降序。row='10': 循环输出的记录数。if='': 查询条件,类似 SQL 的 WHERE 子句。if='arcrank > -1'表示只调用已审核的文章。
循环体内部的核心:字段标签 [field:xxx/]
循环的意义在于处理每一项的数据。[field:xxx/] 就是用来获取当前循环项中具体字值的标签。

(图片来源网络,侵删)
{dede:arclist} 常用字段标签:
| 字段标签 | 说明 | 示例 |
|---|---|---|
[field:title/** |
[field:title/] |
|
[field:arcurl/** |
文章链接 | <a href="[field:arcurl/]">...</a> |
[field:pubdate/** |
发布时间戳(Unix时间) | [field:pubdate function="MyDate('Y-m-d',@me)"/] |
[field:description/** |
中自动截取) | [field:description/] |
[field:litpic/** |
文章缩略图 | <img src="[field:litpic/]" alt="[field:title/]"> |
[field:click/** |
文章点击量 | 点击:[field:click/]次 |
[field:writer/** |
文章作者 | [field:writer/] |
[field:source/** |
文章来源 | [field:source/] |
[field:shorttitle/** |
[field:shorttitle/] |
|
[field:keywords/** |
文章关键词 | [field:keywords/] |
重要技巧:使用 function 进行数据处理
当字段值不满足需求时,可以使用 function 属性调用PHP函数来处理。
<!-- 1. 格式化日期 -->
[field:pubdate function="MyDate('Y-m-d H:i',@me)"/]
<!-- 2. 截取字符串,并添加省略号 -->
[field:title function="cn_substr(@me, 20)"/]
<!-- 3. 去掉HTML标签,只显示文本 -->
[field:description function="htmlspecialchars(cn_substr(Html2Text(@me), 100))"/]
<!-- 4. 判断并输出 -->
[field:click runphp='yes']
if(@me > 1000) @me = "<span class='hot'>".@me."</span>";
else @me = @me;
[/field:click]
高级循环技巧
循环中的条件判断 (if)
在循环内部,你可以使用 {dede:if} 标签来根据字段值判断是否输出某些内容。
示例:如果文章有缩略图才显示图片
{dede:arclist row='5'}
<li>
{dede:if field='litpic' neq ''}
<img src="[field:litpic/]" alt="[field:title/]" />
{/dede:if}
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:arclist}
neq表示 "不等于" (not equal)。eq表示 "等于" (equal)。
嵌套循环
一个循环内部可以包含另一个循环,常用于调用子栏目下的文章。
示例:先调用所有顶级栏目,再循环每个栏目下的文章
{dede:channel type='top' row='8'}
<h2><a href="[field:typelink/]">[field:typename/]</a></h2>
<ul>
{dede:arclist typeid='[field:id]' row='5'}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:arclist}
</ul>
{/dede:channel}
typeid='[field:id]': 这里巧妙地将外层循环的栏目ID[field:id]传递给了内层的{dede:arclist},实现了“调用当前栏目下的文章”。
循环中的序号 ([field:global.autoindex/]) 和隔行变色
[field:global.autoindex/] 是一个全局变量,用于获取当前循环的次数(从1开始)。
示例:实现隔行变色
{dede:arclist row='10'}
<li class="[field:global name=autoindex runphp='yes']
if(@me % 2 == 0) @me = 'even';
else @me = 'odd';
[/field:global]">
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:arclist}
- CSS 中定义
.odd { background-color: #f1f1f1; }和.even { background-color: #fff; }即可实现隔行变色效果。
| 用途 | 核心属性 | 适用场景 | |
|---|---|---|---|
{dede:arclist} |
文章/文档列表循环 | typeid, row, orderby, flag |
首页、列表页、相关文章、热门文章等所有文章列表。 |
{dede:loop} |
通用数据表循环 | table, row, sort, if |
调用自定义数据表、调用单页文档内容、调用特定模型等。 |
学习建议:
- 从
{dede:arclist}开始:这是最常用的,先掌握它的基本属性和常用字段。 - 理解
[field:xxx/]:学会查看 DedeCMS 的标签说明文档,了解有哪些字段可以用。 - 掌握
function:这是实现复杂功能的关键,多练习用function格式化日期和字符串。 - 尝试嵌套和判断:当你需要制作更复杂的布局(如带子栏目的首页)时,这些技巧就派上用场了。
通过以上学习,你就可以自如地使用 DedeCMS 的标签循环功能来构建任何你想要的页面布局了。
