DedeCMS 的判断逻辑主要通过 if 条件语句来实现,其语法结构借鉴了 PHP 的 if...else... 语句。

(图片来源网络,侵删)
基本语法结构
最核心的标签是 {dede:if} 和 {dede:else}。
{dede:if 条件表达式}
<!-- 如果条件为真,则执行这里的代码 -->
{dede:else}
<!-- 如果条件为假,则执行这里的代码 -->
{/dede:if}
工作原理:
{dede:if}会计算其内部“条件表达式”的值。- 如果表达式结果为
true(真),则执行{dede:if}和{dede:else}之间的代码块。 - 如果表达式结果为
false(假),则执行{dede:else}和{/dede:if}之间的代码块。
常用的判断条件
判断条件是关键,DedeCMS 提供了多种方式来获取和比较字段值。
字段值是否为空
这是最常见的判断,通常用于判断文章的某个附加字段是否填写了内容。

(图片来源网络,侵删)
- 语法:
field:字段名 == ''- 是等于号。
- (两个单引号) 代表空字符串。
示例: 判断文章的“文章来源”字段是否为空,如果为空,则显示“本站原创”,否则显示来源内容。
{dede:if field:source == ''}
本站原创
{dede:else}
来源:[field:source/]
{/dede:if}
字段值是否等于某个特定值
用于判断字段的值是否符合预期。
- 语法:
field:字段名 == '特定值'
示例: 判断文章的“属性”字段是否包含“头条”属性,DedeCMS 的属性通常是多个值用逗号隔开,in 运算符更合适。
{dede:if field:attr in '头条'}
<span class="head-tag">头条</span>
{/dede:if}
- 注意:
in运算符用于判断一个字符串是否存在于另一个字符串中,非常适合判断多选属性。
两个字段值是否相等
比较两个字段的内容。

(图片来源网络,侵删)
- 语法:
field:字段A == field:字段B
示例: 判断文章的“作者”和“编辑”是否为同一人。
{dede:if field:writer == field:editor}
<p>作者与编辑为同一人。</p>
{dede:else}
<p>作者:[field:writer/] | 编辑:[field:editor/]</p>
{/dede:if}
使用 PHP 函数进行复杂判断
DedeCMS 的 if 标签支持使用 PHP 内置函数,这极大地增强了判断的灵活性。
- 语法:
function(字段名) == '返回值'
常用函数:
strlen(): 获取字符串长度,常用于判断某个字段是否填写(长度大于0)。strpos(): 查找字符串是否包含某个子串。in_array(): 判断某个值是否在数组中。
示例 1: 判断“是否为空(比 更严谨的方式)。
{dede:if function('strlen',@me['description']) > 0}
<meta name="description" content="[field:description function='html2text(@me)'/]">
{dede:else}
<meta name="description" content="[field:content function='cn_substr(@me,200)'/]">
{/dede:if}
@me是 DedeCMS 模板中的特殊变量,代表当前正在处理的数据(当前行的字段值)。function('strlen',@me['description'])表示对“description”字段调用strlen函数。
示例 2: 判断文章内容中是否包含图片,如果有则显示缩略图,否则显示默认图。
{dede:if function('strpos',@me['content'],'<img') > 0}
<img src="[field:litpic/]" alt="[field:title/]">
{dede:else}
<img src="/default/images/no-img.jpg" alt="暂无图片">
{/dede:if}
strpos(@me['content'], '<img')会查找文章内容里第一个<img标签出现的位置,如果找到,返回其大于0的索引;如果没找到,返回false(在PHP判断中为0)。
嵌套判断 (if...elseif...else)
你可以将多个 {dede:if} 嵌套使用,实现更复杂的逻辑。
语法结构:
{dede:if 条件A}
<!-- 条件A为真时执行 -->
{dede:else}
{dede:if 条件B}
<!-- 条件A为假,且条件B为真时执行 -->
{dede:else}
<!-- 条件A和条件B都为假时执行 -->
{/dede:if}
{/dede:if}
示例: 根据文章ID范围,给文章添加不同的CSS类。
{dede:if field:id > 100 && field:id < 200}
<article class="article-new">
{dede:else}
{dede:if field:id > 200}
<article class="article-hot">
{dede:else}
<article class="article-normal">
{/dede:if}
{/dede:if}
<h2><a href="[field:arcurl/]">[field:title/]</a></h2>
<p>[field:description/]...</p>
</article>
&&是逻辑与运算符,表示“。
判断栏目/模型信息
除了判断文章字段,你还可以在列表页或首页等地方,判断当前栏目或内容模型的信息。
示例 1: 在列表页,判断当前栏目的“栏目名称”是否为“公司新闻”,如果是,则显示一个特殊的列表头。
{dede:if typeid == '1'}
<!-- typeid='1' 是“公司新闻”栏目的ID -->
<h1 class="page-title">公司新闻</h1>
{dede:else}
<h1 class="page-title">[field:typename/]</h1>
{/dede:if}
示例 2: 判断当前模型ID是否为文章模型(通常是1)。
{dede:if channelid == '1'}
<!-- 这是文章模型,显示作者等信息 -->
<p>作者:[field:writer/]</p>
{dede:else}
<!-- 其他模型,不显示 -->
{/dede:if}
注意事项和最佳实践
- @me 变量:在
function()函数中,@me代表当前字段的原始值,务必理解它的作用。 - 字段名大小写:
field:source和field:Source在某些情况下可能不同,建议保持小写。 - 引号的使用:判断的值(如空字符串 或特定文本
'头条')必须用单引号 或双引号 括起来,否则会被当作变量名处理,导致错误。 - 调试:如果判断不生效,最简单的调试方法是在
{dede:if}块内输出字段值,看看你拿到的数据是什么。{dede:if field:source == ''} <p>source的值是:[field:source/]</p> <!-- 输出看看是不是真的为空 --> 本站原创 {/dede:if}
总结表格
| 判断类型 | 语法示例 | 说明 |
|---|---|---|
| 判断为空 | {dede:if field:source == ''} |
判断“来源”字段是否未填写。 |
| 判断等于特定值 | {dede:if field:attr in '头条'} |
判断“属性”字段是否包含“头条”。 |
| 使用PHP函数 | {dede:if function('strlen',@me['description']) > 0} |
判断“字段长度是否大于0(即是否已填写)。 |
| 嵌套判断 | {dede:if}{dede:else}{dede:if}...{/dede:if}{/dede:if} |
实现类似 if...else if...else 的复杂逻辑。 |
| 判断栏目信息 | {dede:if typeid == '1'} |
在列表页判断当前栏目ID是否为1。 |
掌握了这些 if 判断标签,你就可以随心所欲地控制 DedeCMS 模板的显示逻辑,制作出功能强大、体验丰富的网站了。
