DedeCMS 的判断语句主要用于 条件判断,根据不同的条件来执行不同的操作,

- 判断当前栏目是否为指定栏目,如果是,则显示某个样式或内容。
- 判断文章是否有缩略图,如果没有,则显示一个默认图片。
- 判断用户是否登录,登录后显示“退出”按钮,未登录显示“登录”按钮。
- 判断当前页面是否为首页、列表页或内容页。
这些判断主要通过 if 语句 和 arclist 标签的底层字段 来实现。
核心判断语法:if 语句
DedeCMS 的 if 语句主要用于在模板文件(.htm)中进行逻辑判断,它的基本语法如下:
{dede:if 条件表达式}
<!-- 条件为真时,执行这里的代码 -->
{else}
<!-- 条件为假时,执行这里的代码 -->
{/dede:if}
或者只有 if 没有 else:
{dede:if 条件表达式}
<!-- 条件为真时,执行这里的代码 -->
{/dede:if}
注意:
{dede:if}和{/dede:if}必须成对出现。else是可选的。- 条件表达式两边的空格很重要,建议严格按照格式书写。
常用判断场景与实例
下面我们通过具体的例子来理解 if 语句的强大功能。
场景1:判断当前栏目ID
这是最常用的判断之一,用于为当前栏目高亮显示或显示特定内容。
语法:
global.cfg_c typeid 是一个全局变量,代表当前栏目的ID。
示例:
假设我们有一个“公司简介”栏目,ID为 2,我们想在列表页中,如果当前栏目是“公司简介”,就显示一段特定的欢迎语。
{dede:if typeid==2}
<div class="welcome-box">
<h2>欢迎访问公司简介页面</h2>
<p>在这里您可以了解我们公司的历史、文化和愿景。</p>
</div>
{/dede:if}
进阶:判断多个栏目
如果需要对多个栏目进行判断,可以使用 in 关键字。
示例:
假设栏目ID为 2 (公司简介) 和 3 (发展历程) 的页面都需要显示“关于我们”相关的导航。
{dede:if typeid in '2,3'}
<div class="about-nav">
<a href="/about/intro/">公司简介</a>
<a href="/about/history/">发展历程</a>
</div>
{/dede:if}
场景2:判断文章/栏目是否有缩略图
在文章列表或内容页中,如果文章没有上传缩略图,我们可以显示一个默认图片。
语法:
[field:picname] 用于获取文章的缩略图地址,如果为空,则说明没有缩略图。
示例:
在 arclist 或 list 标签循环中,判断每篇文章是否有缩略图。
{dede:arclist row="6"}
<li>
{dede:if [field:picname/]}
<a href="[field:arcurl/]"><img src="[field:picname/]" alt="[field:title/]" /></a>
{else}
<a href="[field:arcurl/]"><img src="/static/images/default.jpg" alt="[field:title/]" /></a>
{/dede:if}
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:arclist}
说明:
[field:picname/]是arclist标签的底层字段,代表缩略图路径。[field:picname/]存在(非空),则显示文章自己的缩略图。- 如果不存在,则显示网站根目录下的
/static/images/default.jpg这个默认图片。
场景3:判断当前页面类型
有时候我们需要根据页面是首页、列表页还是内容页来显示不同的内容。
语法:
{dede:global name='itemindex'/}: 判断是否为首页,值为1表示是首页。{dede:field name='typeid'/}: 判断是否为列表页,如果值大于0,则为列表页。{dede:field name='id'/}: 判断是否为内容页,如果值大于0页。
示例: 只在首页显示一个Banner,在其他页面不显示。
{dede:if global.itemindex == 1}
<div class="home-banner">
<img src="/static/images/home-banner.jpg" alt="首页Banner" />
</div>
{/dede:if}
场景4:判断用户登录状态
在用户中心或需要登录才能访问的页面,我们可以根据用户是否登录来显示不同的信息。
语法:
{dede:global name='cfg_member_login'/} 是一个全局变量,如果用户已登录,它会返回登录的用户名,否则为空。
示例: 在页头显示用户登录状态。
{dede:if global.cfg_member_login != ''}
<!-- 如果已登录 -->
<span>欢迎,<strong>{dede:global name='cfg_member_login'/}</strong>!</span>
<a href="/member/index.php?action=exit">退出</a>
{else}
<!-- 如果未登录 -->
<a href="/member/login.php">登录</a>
<a href="/member/reg.php">注册</a>
{/dede:if}
场景5:判断内容页字段值
页(article_article.htm),我们可以根据文章的自定义字段(如“来源”、“作者”、“是否推荐”等)来显示不同的样式或内容。
语法:
使用 [field:字段名/] 来获取字段的值。
示例1:判断文章来源是否为“原创”,如果是,则加上“原创”标签。
<div class="article-info">
<span>作者:[field:writer/]</span>
<span>来源:[field:source/]</span>
<span>时间:[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
{dede:if [field:source/]=='原创'}
<span class="original-tag">原创</span>
{/dede:if}
</div>
示例2:判断文章是否被推荐,如果是,则显示“推荐”图标。
假设后台有一个自定义字段 is_commend (类型为布尔值或单选),值为 1 表示推荐。
<h1>[field:title/]</h1>
{dede:if [field:is_commend/]==1}
<img src="/static/images/commend-icon.gif" alt="推荐" />
{/dede:if}
arclist 标签中的底层字段判断
在 推荐方法:使用 这是在 语法:
示例:
判断文章是否有摘要,如果有则显示摘要,否则截取文章内容的前100个字符作为摘要。 说明: DedeCMS 的判断语句是模板灵活性的关键,记住以下几个核心点: 熟练掌握这些判断语句,你就能制作出非常智能和个性化的 DedeCMS 网站了。arclist(文章列表)标签中,我们常常需要在循环内部对每个条目的属性进行判断,这时,我们直接使用 if 语句是不行的,因为 if 是一个独立的标签,正确的做法是使用 if 条件判断 的简写形式,或者使用 {dede:if}
if 条件判断(简写形式)arclist 循环内部进行判断的最简洁、最常用的方法。[field:字段名 function='if(@me, "真值", "假值")']{dede:arclist row="5"}
<h3><a href="[field:arcurl/]">[field:title/]</a></h3>
<p>
[field:description function='if(@me, @me, cn_substr(@body, 100) )']
...
</p>
{/dede:arclist}
@me 代表当前字段的值。if(@me, @me, cn_substr(@body, 100)) 的意思是:@me(即 [field:description/])存在,则使用 @me(摘要本身);如果不存在,则使用 cn_substr(@body, 100)(截取文章内容 body 的前100个字符)。
常用比较运算符和函数
运算符/函数
描述
示例
等于
typeid == 2
不等于
typeid != 1
>大于
click > 1000
<小于
click < 100
in在...范围内
typeid in '2,3,4'
global.name获取全局变量
global.itemindex
field:xxx/获取当前字段的值
[field:picname/]
cn_substr(str, len)截取字符串
cn_substr(@body, 200)
MyDate(format, time)格式化时间戳
MyDate('Y-m-d', @me)
{dede:if}:用于模板的宏观逻辑,如判断当前栏目、页面类型、用户登录状态等。if 函数:在 arclist, list 等循环标签内部,使用 [field:xxx function='if(...)'] 是最简洁高效的方式。global.cfg_* 和 [field:*] 是判断的数据来源。
