DedeCMS 的 if 判断语法基于 PHP 的 if...else 结构,但进行了简化和封装,使其在模板文件中更易于使用。

(图片来源网络,侵删)
基本语法
DedeCMS 的 if 判断使用 {dede:if} 和 {/dede:if} 标签对。
基本格式:
{dede:if condition='(条件表达式)'}
<!-- 如果条件为真,则输出这里的 HTML 和代码 -->
{else}
<!-- 如果条件为假,则输出这里的 HTML 和代码 -->
{/dede:if}
或者只有 if 没有 else:
{dede:if condition='(条件表达式)'}
<!-- 如果条件为真,则输出这里的 HTML 和代码 -->
{/dede:if}
condition 条件表达式详解
condition 属性是 if 判断的核心,它接受一个 PHP 表达式,常用的判断方式有以下几种:
a. 比较运算符
用于判断变量是否等于、不等于、大于、小于某个值。
- : 等于
- : 不等于
>: 大于>=: 大于等于<: 小于<=: 小于等于
示例:判断文章ID是否等于1
{dede:if condition="$id == 1"}
<h1>这是首页的特别文章!</h1>
{/dede:if}
b. 逻辑运算符
用于组合多个条件。
&&或and: 逻辑与 (- 或
or: 逻辑或 (或者) - 逻辑非 (非)
示例:判断栏目ID是否为2,并且文章标题包含“新闻”
{dede:if condition="$typeid == 2 && @me.strpos($title, '新闻') !== false"}
<span class="news-tag">新闻</span>
{/dede:if}
注意:
@me是一个特殊变量,代表当前正在处理的字段值,在if判断中,使用@me可以获取当前字段的值。
c. 判断字符串是否为空
这是一个非常常见的场景,用于判断一个字段是否有内容。
empty($变量名): 判断变量是否为空,如果变量为 (空字符串),0,null,false或[](空数组),则返回true。!empty($变量名): 判断变量是否不为空。
示例:如果文章摘要为空,则显示“暂无摘要”
{dede:if condition="empty($description)"}
<p class="summary">暂无摘要</p>
{else}
<p class="summary">[field:description/]</p>
{/dede:if}
d. 判断字段是否存在或内容是否为特定值
这在调用自定义字段时非常有用。
示例1:判断是否有缩略图
{dede:if condition="$litpic != '/images/defaultpic.gif' && $litpic != ''"}
<img src="[field:litpic/]" alt="[field:title/]" />
{/dede:if}
说明:
/images/defaultpic.gif是 DedeCMS 默认的缩略图路径,通过判断实际缩略图路径是否不等于默认路径,就可以确定文章是否上传了缩略图。
示例2:判断自定义字段 video_url 是否有值
{dede:if condition="!empty(@me.video_url)"}
<a href="[field:video_url/]" class="btn btn-primary">观看视频</a>
{/dede:if}
说明:这里
@me指代了整个当前文档的数据对象,@me.video_url就可以访问到自定义字段video_url的值。
完整实战案例
假设我们要做一个文章列表,每篇文章需要根据不同的状态显示不同的标签。
场景:
- 如果文章是“头条” (
iscommend== 'c'),显示一个红色的“头条”标签。 - 如果文章是“推荐” (
iscommend== 'h'),显示一个黄色的“推荐”标签。 - 如果文章有“,摘要显示在标题下方,没有则不显示。
模板代码 (list_article.htm):
<ul class="article-list">
{dede:list pagesize='10'}
<li>
<!-- 使用 if 判断输出不同的标签 -->
{dede:if condition="$iscommend == 'c'"}
<span class="label label-danger">头条</span>
{else if condition="$iscommend == 'h'"}
<span class="label label-warning">推荐</span>
{/dede:if}
<a href="[field:arcurl/]">[field:title/]</a>
<!-- 使用 if 判断是否有摘要 -->
{dede:if condition="!empty($description)"}
<p class="summary">[field:description function='cn_substr(@me, 100)'/]...</p>
{/dede:if}
</li>
{/dede:list}
</ul>
代码解释:
{dede:if condition="$iscommend == 'c'"}: 检查系统字段iscommend的值是否为 'c' (代表头条),如果是,则输出<span class="label label-danger">头条</span>。{else if condition="$iscommend == 'h'"}: 如果第一个条件不满足,则检查是否为 'h' (代表推荐),如果是,则输出黄色的“推荐”标签。{dede:if condition="!empty($description)"}: 检查文章摘要description是否不为空。!empty()函数确保只有当摘要确实存在时才执行。[field:description function='cn_substr(@me, 100)'/]: 这里用到了一个技巧,function可以对字段进行处理。cn_substr()是 DedeCMS 的一个常用函数,用于截取中文字符串,这里我们截取摘要前100个字符。
嵌套判断
if 判断可以多层嵌套,实现更复杂的逻辑。
示例:判断栏目ID和文章状态
{dede:if condition="$typeid == 1"}
<!-- 如果是栏目ID为1 (产品中心”) -->
{dede:if condition="$iscommend == 'c'"}
<div class="featured-product">推荐产品</div>
{/dede:if}
{else if condition="$typeid == 2"}
<!-- 如果是栏目ID为2 (新闻动态”) -->
<div class="news-item">新闻</div>
{/dede:if}
注意事项
- 引号:
condition属性的值必须用单引号 包围,这是 DedeCMS 模板引擎的语法要求。 - 变量:模板中可用的变量包括系统内置字段(如
$id,$title,$typeid,$iscommend等)和自定义字段,自定义字段在if判断中通常通过@me.fieldname的方式访问。 - 性能:虽然
if判断很方便,但在一个循环(如{dede:list}或{dede:arclist})内部进行过于复杂的判断可能会对页面加载速度产生轻微影响,建议保持逻辑清晰简洁。 - 官方文档:DedeCMS 的版本众多,某些高级函数或语法可能略有差异,遇到问题时,查阅你所使用的 DedeCMS 版本的官方模板手册是最好的方式。
通过掌握 if 判断,你就可以让 DedeCMS 的模板变得非常灵活和智能,能够根据不同的数据动态地展示不同的内容。
