{dede:arclist} 是 DedeCMS 中最核心、最常用的列表标签,用于调用文章、图集等内容,在实际开发中,我们经常需要根据文章的不同属性(如是否为头条、是否为推荐、是否包含图片等)来显示不同的样式或内容,这时就需要用到 if 判断。

(图片来源网络,侵删)
使用 array 和 runphp 属性(最灵活、最推荐)
这是最强大、最灵活的方法,可以实现几乎所有的 if 判断逻辑,它利用了 PHP 的 eval() 函数来执行自定义的 PHP 代码。
基本语法
{dede:arclist titlelen='40' row='10'}
<li>
[field:array runphp='yes']
$iscommend = @me['iscommend']; // 获取推荐字段的值
$typeid = @me['typeid']; // 获取栏目ID
// if 判断逻辑
if ($iscommend == 2) {
@me = "<span class='hot'>[推荐]</span>"; // 赋值给 @me
} elseif ($typeid == 1) {
@me = "<span class='news'>[新闻]</span>";
} else {
@me = ""; // 不显示任何标签
}
[/field:array]
<a href='[field:arcurl/]'>[field:title/]</a>
</li>
{/dede:arclist}
核心要点:
[field:array runphp='yes']: 这是开启 PHP 模式的关键,它会将当前文章的所有字段信息以数组的形式传递给 PHP 代码。@me: 这是一个特殊的变量,它代表了当前标签的原始输出值,在runphp模式下,你可以对@me进行读取和重新赋值。@me的值就是该标签的输出内容。@me['字段名']: 通过这种方式可以获取到当前文章的任意字段值,@me['iscommend'](推荐)、@me['flag'](标识)、@me['litpic'](缩略图) 等。- PHP 语法: 你可以在
runphp中使用任何合法的 PHP 代码,包括if/else,switch,for循环等。
使用 if 条件判断(适用于特定字段)
DedeCMS 也内置了一套简化的 if 判断语法,主要用于判断文章的 flag (标识) 字段,如 c (推荐)、h (头条)、a (特荐) 等。
语法
{dede:arclist titlelen='40' row='10'}
<li>
[field:flag runphp='yes']
if (@me == 'c') {
@me = "<span class='commend'>[推荐]</span>";
} elseif (@me == 'h') {
@me = "<span class='headline'>[头条]</span>";
} else {
@me = "";
}
[/field:flag]
<a href='[field:arcurl/]'>[field:title/]</a>
</li>
{/dede:arclist}
核心要点:

(图片来源网络,侵删)
- 这种方法本质上也是
runphp的一种应用,但专门针对flag字段。 @me的值就是当前文章flag字段的字符串值,如果文章同时是推荐和头条,@me的值就是'ch',所以你的if判断逻辑需要能处理这种情况。
常用判断场景示例
下面我们通过 array + runphp 的方式,列举一些最常见的判断场景。
场景1:判断是否为推荐文章
iscommend 字段的值:0=否,1=是,2=特荐。
{dede:arclist ...}
[field:array runphp='yes']
if (@me['iscommend'] == 1) {
@me = "<span class='tuijian'>荐</span> ";
} else {
@me = "";
}
[/field:array]
<a href='[field:arcurl/]'>[field:title/]</a>
{/dede:arclist}
场景2:判断是否有缩略图,并显示不同样式
litpic 字段为空表示没有缩略图。
{dede:arclist ...}
[field:array runphp='yes']
if (@me['litpic'] != '' && @me['litpic'] != '/images/defaultpic.gif') {
// 有缩略图
@me = "<div class='has-thumb'><img src='" . @me['litpic'] . "' /></div>";
} else {
// 无缩略图
@me = "<div class='no-thumb'>[暂无图片]</div>";
}
[/field:array]
{/dede:arclist}
场景3:根据栏目ID显示不同前缀
{dede:arclist ...}
[field:array runphp='yes']
$typeid = @me['typeid'];
$typename = @me['typename']; // 也可以直接获取栏目名称
if ($typeid == 5) {
@me = "[产品] ";
} elseif ($typeid == 6) {
@me = "[新闻] ";
} else {
@me = "";
}
[/field:array]
<a href='[field:arcurl/]'>[field:title/]</a>
{/dede:arclist}
场景4:判断文章发布时间是否为今天
这是一个非常实用的场景,可以给“今日发布”的文章添加特殊样式。

(图片来源网络,侵删)
{dede:arclist ...}
[field:array runphp='yes']
$senddate = @me['senddate']; // 发布时间的时间戳
$today = strtotime(date('Y-m-d')); // 0点的时间戳
if ($senddate >= $today) {
@me = "<span class='new'>[新]</span> ";
} else {
@me = "";
}
[/field:array]
<a href='[field:arcurl/]'>[field:title/]</a>
{/dede:arclist}
场景5:组合判断(既是头条又是推荐)
{dede:arclist ...}
[field:array runphp='yes']
$iscommend = @me['iscommend'];
$flag = @me['flag'];
if ($iscommend == 1 && strpos($flag, 'h') !== false) {
// 是推荐,并且是头条
@me = "<span class='hot-headline'>[热头条]</span> ";
} elseif ($iscommend == 1) {
// 只是推荐
@me = "<span class='commend'>[荐]</span> ";
} elseif (strpos($flag, 'h') !== false) {
// 只是头条
@me = "<span class='headline'>[头]</span> ";
} else {
@me = "";
}
[/field:array]
<a href='[field:arcurl/]'>[field:title/]</a>
{/dede:arclist}
注意: strpos($flag, 'h') 用于检查 flag 字符串中是否包含 h,因为 flag 可能是多个标识的组合,如 hc。
最佳实践与注意事项
- 性能考虑:
runphp模式会在每次循环时执行 PHP 代码,如果列表数据量很大(如row='50'),可能会对页面加载速度产生轻微影响,但对于常规的首页或列表页(row='10'),影响几乎可以忽略不计。 - 代码可读性: 当
if/else逻辑变得复杂时,代码会变得难以阅读,建议保持逻辑简洁,或者将复杂的判断逻辑封装到 DedeCMS 的全局函数库中,然后在模板中调用。 - 避免错误: 确保 PHP 语法正确,特别是分号 和大括号 的配对,一个小的语法错误就可能导致整个列表无法正常显示。
- 优先使用
array: 尽量使用[field:array runphp='yes']的方式,因为它能获取到所有字段,比单独判断某个字段更灵活、更可靠。 - 缓存问题: DedeCMS 有强大的缓存机制,如果你修改了模板中的
arclist逻辑,但页面没有变化,请记得在后台 “生成” -> “更新主页HTML” 或清除相关缓存,让新模板生效。
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
array + runphp |
最灵活、功能最强大,可访问所有字段,支持复杂逻辑 | 语法稍复杂,需懂基础PHP | 绝大多数场景,特别是需要判断多个字段或复杂逻辑时 |
if 条件判断 |
语法相对简单 | 只能判断 flag 字段,灵活性差 |
快速判断文章的“头条”、“推荐”等单一标识 |
对于开发者来说,熟练掌握 array + runphp 的用法,基本可以解决在 {dede:arclist} 中所有的条件判断需求。
