如何在 AnQiCMS 模板中根据条件(如`if`语句)显示或隐藏内容块?

在网站内容运营中,我们经常需要根据不同的情况来展示或隐藏特定的内容,例如在某个节假日展示特别活动信息,或者根据用户的状态显示不同的操作按钮。AnQiCMS 提供了灵活的模板引擎,让你能够轻松实现这些动态化的内容控制,其中最核心的工具就是条件判断语句——if

AnQiCMS 的模板语法类似于流行的 Django 模板引擎,上手非常简单。通过运用 if 语句,你可以在模板中根据各种条件来决定哪些内容应该被用户看到,哪些则不显示,从而为网站访客提供更精准、个性化的浏览体验。

掌握 if 语句的基础结构

在 AnQiCMS 模板中,if 语句的基本结构与我们熟悉的编程语言类似,它总是以 {% if 条件 %} 开始,并以 {% endif %} 结束。

1. 最简单的条件判断:{% if 条件 %} ... {% endif %}

当你只需要在特定条件为真(True)时显示内容时,可以使用这种形式:

{% if system.SiteCloseTips %}
    <div class="site-alert">
        网站维护中,请稍后再访问:{{ system.SiteCloseTips }}
    </div>
{% endif %}

在这个例子中,如果后台设置了 SiteCloseTips(网站关闭提示内容),这段提示信息就会显示。如果 SiteCloseTips 为空或未设置,内容块则完全不显示。

2. 包含替代方案:{% if 条件 %} ... {% else %} ... {% endif %}

当你希望在条件为真时显示一段内容,而在条件不为真时显示另一段内容时,else 语句就派上用场了:

{% if user.IsLoggedIn %}
    <p>您好,{{ user.UserName }}!欢迎回来。</p>
{% else %}
    <p>您尚未登录,请<a href="/login">登录</a>或<a href="/register">注册</a>。</p>
{% endif %}

这里根据用户是否登录,显示不同的欢迎语或引导。

3. 多重条件判断:{% if 条件1 %} ... {% elif 条件2 %} ... {% else %} ... {% endif %}

面对更复杂的逻辑,可能需要检查多个不同的条件。elif(else if 的缩写)允许你链式地添加更多的条件:

{% if archive.ReadLevel > 5 %}
    <div class="vip-exclusive">
        此内容为高级会员专属,请升级您的会员等级。
    </div>
{% elif archive.ReadLevel > 0 %}
    <div class="member-only">
        此内容需登录后查看。
    </div>
{% else %}
    <div class="free-content">
        免费内容,欢迎阅读!
    </div>
{% endif %}

这个示例根据文档的阅读等级,为不同用户展示不同的提示信息。

灵活运用各种条件判断表达式

if 语句中的“条件”可以是多种多样的,它可以是变量的值、变量之间比较的结果,甚至是更复杂的逻辑组合。

  • 相等与不等判断:==!= 你可以检查一个变量的值是否等于(==)或不等于(!=)另一个值。

    {% if archive.CategoryId == 10 %}
        <p>这是关于“最新资讯”分类的文章。</p>
    {% endif %}
    
    
    {% if system.Language != "zh-CN" %}
        <p>This content is not in Simplified Chinese.</p>
    {% endif %}
    
  • 大小比较:>, <, >=, <= 常用于比较数字大小,例如判断库存量、价格或阅读量。

    {% if product.Stock <= 0 %}
        <span class="sold-out">已售罄</span>
    {% elif product.Stock < 5 %}
        <span class="low-stock">仅剩少量,欲购从速!</span>
    {% else %}
        <span class="in-stock">有货</span>
    {% endif %}
    
  • 逻辑组合:and, or, not 你可以使用 and(且)、or(或)以及 not(非)来构建更复杂的逻辑。

    {% if user.IsLoggedIn and user.IsAdmin %}
        <a href="/system/">进入后台管理</a>
    {% endif %}
    
    
    {% if archive.Flag contains "h" or archive.Flag contains "f" %}
        <span class="hot-feature">热门推荐/幻灯片内容</span>
    {% endif %}
    
    
    {% if not archive.Thumb %}
        <p>此文章暂无缩略图。</p>
    {% endif %}
    

    值得一提的是,archive.Flag contains "h" 这种用法可以用来检查文档的推荐属性中是否包含特定的标记(如 h 代表头条)。

  • 检查变量是否存在或为“真”值 在 AnQiCMS 模板中,以下情况会被视为“假”(False):

    • nil (空值)
    • false (布尔假)
    • 数字 0
    • 空字符串 ""
    • 空的数组(slice)或键值对(map) 除此以外的大多数情况都会被视为“真”(True)。这让你可以简洁地判断变量是否有实际内容。
    {% if item.Thumb %}
        <img src="{{ item.Thumb }}" alt="{{ item.Title }}">
    {% else %}
        <img src="/static/images/default_thumb.png" alt="无图">
    {% endif %}
    
    
    {% if archive.Description %}
        <p class="description">{{ archive.Description }}</p>
    {% endif %}
    

    这段代码会检查 item.Thumb 是否有值(即图片路径是否存在),以及 archive.Description 是否有内容,从而决定是否显示相应的图片或描述。

  • 检查集合成员:in 如果你需要判断一个值是否存在于一个列表或字符串中,可以使用 in 操作符。

    {% set allowed_users = ["admin", "editor", "moderator"] %}
    {% if user.UserName in allowed_users %}
        <p>欢迎内容管理团队成员!</p>
    {% endif %}
    

编写整洁模板的小技巧

在使用 if 语句时,有几个小技巧可以让你的模板代码更整洁、易读:

  • 控制空白字符: 有时,`