dede if判断如何输出指定标签内容?

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

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

dede if判断 输出标签
(图片来源网络,侵删)

基本语法

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>

代码解释:

  1. {dede:if condition="$iscommend == 'c'"}: 检查系统字段 iscommend 的值是否为 'c' (代表头条),如果是,则输出 <span class="label label-danger">头条</span>
  2. {else if condition="$iscommend == 'h'"}: 如果第一个条件不满足,则检查是否为 'h' (代表推荐),如果是,则输出黄色的“推荐”标签。
  3. {dede:if condition="!empty($description)"}: 检查文章摘要 description 是否不为空。!empty() 函数确保只有当摘要确实存在时才执行。
  4. [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}

注意事项

  1. 引号condition 属性的值必须用单引号 包围,这是 DedeCMS 模板引擎的语法要求。
  2. 变量:模板中可用的变量包括系统内置字段(如 $id, $title, $typeid, $iscommend 等)和自定义字段,自定义字段在 if 判断中通常通过 @me.fieldname 的方式访问。
  3. 性能:虽然 if 判断很方便,但在一个循环(如 {dede:list}{dede:arclist})内部进行过于复杂的判断可能会对页面加载速度产生轻微影响,建议保持逻辑清晰简洁。
  4. 官方文档:DedeCMS 的版本众多,某些高级函数或语法可能略有差异,遇到问题时,查阅你所使用的 DedeCMS 版本的官方模板手册是最好的方式。

通过掌握 if 判断,你就可以让 DedeCMS 的模板变得非常灵活和智能,能够根据不同的数据动态地展示不同的内容。

-- 展开阅读全文 --
头像
C语言中fprintf如何正确输出空格?
« 上一篇 今天
C语言中collection是什么?如何实现?
下一篇 » 今天

相关文章

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

目录[+]