dede arclist if判断怎么用?条件语句怎么写?

99ANYc3cd6
预计阅读时长 22 分钟
位置: 首页 DEDE建站 正文

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

dede arclist if判断
(图片来源网络,侵删)

使用 arrayrunphp 属性(最灵活、最推荐)

这是最强大、最灵活的方法,可以实现几乎所有的 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}

核心要点:

  1. [field:array runphp='yes']: 这是开启 PHP 模式的关键,它会将当前文章的所有字段信息以数组的形式传递给 PHP 代码。
  2. @me: 这是一个特殊的变量,它代表了当前标签的原始输出值,在 runphp 模式下,你可以对 @me 进行读取和重新赋值。@me 的值就是该标签的输出内容。
  3. @me['字段名']: 通过这种方式可以获取到当前文章的任意字段值,@me['iscommend'] (推荐)、@me['flag'] (标识)、@me['litpic'] (缩略图) 等。
  4. 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}

核心要点:

dede arclist if判断
(图片来源网络,侵删)
  • 这种方法本质上也是 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 if判断
(图片来源网络,侵删)
{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

最佳实践与注意事项

  1. 性能考虑: runphp 模式会在每次循环时执行 PHP 代码,如果列表数据量很大(如 row='50'),可能会对页面加载速度产生轻微影响,但对于常规的首页或列表页(row='10'),影响几乎可以忽略不计。
  2. 代码可读性: 当 if/else 逻辑变得复杂时,代码会变得难以阅读,建议保持逻辑简洁,或者将复杂的判断逻辑封装到 DedeCMS 的全局函数库中,然后在模板中调用。
  3. 避免错误: 确保 PHP 语法正确,特别是分号 和大括号 的配对,一个小的语法错误就可能导致整个列表无法正常显示。
  4. 优先使用 array: 尽量使用 [field:array runphp='yes'] 的方式,因为它能获取到所有字段,比单独判断某个字段更灵活、更可靠。
  5. 缓存问题: DedeCMS 有强大的缓存机制,如果你修改了模板中的 arclist 逻辑,但页面没有变化,请记得在后台 “生成” -> “更新主页HTML” 或清除相关缓存,让新模板生效。
方法 优点 缺点 适用场景
array + runphp 最灵活、功能最强大,可访问所有字段,支持复杂逻辑 语法稍复杂,需懂基础PHP 绝大多数场景,特别是需要判断多个字段或复杂逻辑时
if 条件判断 语法相对简单 只能判断 flag 字段,灵活性差 快速判断文章的“头条”、“推荐”等单一标识

对于开发者来说,熟练掌握 array + runphp 的用法,基本可以解决在 {dede:arclist} 中所有的条件判断需求。

-- 展开阅读全文 --
头像
dede arclist调用描述长度怎么控制?
« 上一篇 2025-12-17
dede arclist标题颜色如何自定义设置?
下一篇 » 2025-12-17

相关文章

取消
微信二维码
支付宝二维码

目录[+]