dede标签如何用判断语句实现条件调用?

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

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

dede标签 判断语句
(图片来源网络,侵删)
  • 判断当前栏目是否为指定栏目,如果是,则显示某个样式或内容。
  • 判断文章是否有缩略图,如果没有,则显示一个默认图片。
  • 判断用户是否登录,登录后显示“退出”按钮,未登录显示“登录”按钮。
  • 判断当前页面是否为首页、列表页或内容页。

这些判断主要通过 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] 用于获取文章的缩略图地址,如果为空,则说明没有缩略图。

示例:arclistlist 标签循环中,判断每篇文章是否有缩略图。

{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 标签中的底层字段判断

arclist(文章列表)标签中,我们常常需要在循环内部对每个条目的属性进行判断,这时,我们直接使用 if 语句是不行的,因为 if 是一个独立的标签,正确的做法是使用 if 条件判断 的简写形式,或者使用 {dede:if}

推荐方法:使用 if 条件判断(简写形式)

这是在 arclist 循环内部进行判断的最简洁、最常用的方法。

语法: [field:字段名 function='if(@me, "真值", "假值")']

示例: 判断文章是否有摘要,如果有则显示摘要,否则截取文章内容的前100个字符作为摘要。

{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)

DedeCMS 的判断语句是模板灵活性的关键,记住以下几个核心点:

  1. 独立判断用 {dede:if}:用于模板的宏观逻辑,如判断当前栏目、页面类型、用户登录状态等。
  2. 循环内判断用 if 函数:在 arclist, list 等循环标签内部,使用 [field:xxx function='if(...)'] 是最简洁高效的方式。
  3. 善用全局变量和底层字段global.cfg_*[field:*] 是判断的数据来源。
  4. 多看官方模板:DedeCMS 自带的默认模板是最好的学习范例,里面包含了大量实用的判断语句。

熟练掌握这些判断语句,你就能制作出非常智能和个性化的 DedeCMS 网站了。

-- 展开阅读全文 --
头像
织梦模板安装调试教程难不难?
« 上一篇 昨天
织梦本地网页跳转怎么设置?
下一篇 » 今天

相关文章

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