如何根据条件判断(if标签)动态显示不同的内容块?

在安企CMS中,网站内容的动态展示是提升用户体验和运营效率的关键。您可能常常遇到这样的需求:希望某个内容块只在特定条件下出现,或者针对不同情况显示不同的信息。这时,安企CMS强大的条件判断功能——if标签,就能派上大用场了。

安企CMS的模板系统采用了类似Django模板引擎的语法,让您能够以直观的方式在模板中实现逻辑判断。通过灵活运用if标签,您可以轻松控制页面元素的显示与隐藏,让网站内容呈现出前所未有的智能与个性化。

认识 if 标签的基本用法

if标签的核心思想是:如果某个条件为真(True),就执行它包裹的代码块。安企CMS提供了几种常见的if标签结构,以满足您不同的判断需求:

  1. 简单的 if 判断 这是最基础的用法。当您只需要在满足单一条件时显示内容,或者检查某个变量是否存在时,可以使用它。

    {% if 条件 %}
        <!-- 当条件为真时,这里的内容会显示 -->
    {% endif %}
    

    例如,如果只想在文章有缩略图时显示图片:

    {% if archive.Thumb %}
        <img src="{{ archive.Thumb }}" alt="{{ archive.Title }}" />
    {% endif %}
    
  2. if-else 判断 当您需要根据条件在两种内容之间进行选择时,if-else结构非常实用。

    {% if 条件 %}
        <!-- 当条件为真时显示 -->
    {% else %}
        <!-- 当条件为假时显示 -->
    {% endif %}
    

    比如,如果文章有描述就显示描述,否则显示一段默认提示:

    {% if archive.Description %}
        <p>{{ archive.Description }}</p>
    {% else %}
        <p>暂无内容简介。</p>
    {% endif %}
    
  3. if-elif-else 多重判断 当您需要处理多个互斥的条件时,if-elif-else结构能让您的逻辑更清晰。elif是“else if”的简写。

    {% if 条件1 %}
        <!-- 当条件1为真时显示 -->
    {% elif 条件2 %}
        <!-- 当条件1为假,且条件2为真时显示 -->
    {% else %}
        <!-- 所有条件都为假时显示 -->
    {% endif %}
    

    举个例子,根据文章的浏览量显示不同的热门状态:

    {% if archive.Views > 1000 %}
        <span>🔥 超级热门!</span>
    {% elif archive.Views > 100 %}
        <span>👍 比较热门</span>
    {% else %}
        <span>✨ 持续更新中</span>
    {% endif %}
    

    无论使用哪种形式,最后都必须以{% endif %}来结束整个条件判断块。

常用的条件表达式

if标签中,您可以组合各种表达式来构建复杂的判断逻辑。

  • 变量是否存在/是否为真 (Truthiness) 在安企CMS模板中,任何非空字符串、非零数字、非空对象或数组,都会被视为”真”。而空字符串、零、nil(空值)或布尔值false则被视为”假”。

    {% if system.SiteLogo %}
        <img src="{{ system.SiteLogo }}" alt="{{ system.SiteName }}" />
    {% else %}
        <p>网站Logo缺失</p>
    {% endif %}
    
  • 数值与字符串比较 您可以对数值(如ID、浏览量、价格)和字符串进行比较。

    • 相等/不相等: == (等于), != (不等于)
    • 大小比较: > (大于), < (小于), >= (大于等于), <= (小于等于)
    {% if archive.CategoryId == 5 %}
        <!-- 这是ID为5的分类下的文章 -->
    {% endif %}
    
    
    {% if contact.Cellphone != "" %}
        <a href="tel:{{ contact.Cellphone }}">{{ contact.Cellphone }}</a>
    {% endif %}
    
  • 逻辑运算符 当您需要组合多个条件时,可以使用and(逻辑与)、or(逻辑或)、not(逻辑非,也可以用!)。

    {% if archive.Thumb and archive.CreatedTime %}
        <p>文章带图且有发布时间</p>
    {% endif %}
    
    
    {% if archive.ModuleId == 1 or archive.ModuleId == 2 %}
        <p>这篇文章属于文章或产品模型</p>
    {% endif %}
    
    
    {% if not archive.Description %}
        <p>文章没有简介</p>
    {% endif %}
    
  • 列表或集合判断 您可以使用in运算符来判断某个值是否在列表中。

    {% set allowed_ids = "1,3,5"|split:"," %} {# 假设这是一个ID列表 #}
    {% if archive.Id in allowed_ids %}
        <p>这是被允许展示的文章</p>
    {% endif %}
    

结合安企CMS标签的实际应用场景

现在,我们来看看如何在安企CMS的日常模板开发中,将if标签运用到具体场景中。

  1. 导航菜单中的活跃状态 网站导航是用户最常互动的部分。为当前页面对应的导航项添加高亮样式,是提升用户体验的常见做法。
    
    {% navList navs %}
        <ul>
            {% for item in navs %}
                <li {% if item.IsCurrent %}class="active"{% endif %}>
                    <a href="{{ item.Link }}">{{ item.Title }}</a>
                    {% if item.NavList %} {# 判断是否有子导航 #}
                        <ul class="sub-menu">
                            {% for sub_item in item.NavList %}
                                <li {% if sub_item.IsCurrent %}class="active"{% endif %}>
                                    <a href="{{ sub_item.Link }}">{{ sub_item.Title }}</a>
                                </li>
                            {% endfor %}
                        </ul>
                    {% endif %}
                </li>
            {% endfor %}
        </ul>
    {% endnavList %}
    
    这里,item.IsCurrent是一个布尔值,用于判断当前导航项是否对应当前