如何在AnQiCMS中实现有条件的逻辑判断来控制内容的显示?

在网站运营中,根据不同的条件展示不同的内容是提升用户体验和实现精细化运营的关键。安企CMS(AnQiCMS)提供了强大而灵活的模板标签和逻辑判断功能,让我们可以轻松实现内容的条件显示,从而满足多样化的业务需求。

本文将深入探讨如何在AnQiCMS中利用其模板引擎的特性,通过条件逻辑判断来精确控制网站内容的显示。

灵活多变的条件判断基础:if 标签

AnQiCMS 的模板引擎支持类似 Django 语法的 ifelifelseendif 标签,这是实现条件判断的核心。通过这些标签,我们可以根据各种表达式的真假来决定某块内容是否显示。

基本的判断结构非常直观:

{% if 条件 %}
    <!-- 满足条件时显示的内容 -->
{% endif %}

当条件涉及多种可能性时,我们可以引入 elif(else if)和 else 来处理:

{% if 条件1 %}
    <!-- 满足条件1时显示的内容 -->
{% elif 条件2 %}
    <!-- 满足条件2时显示的内容 -->
{% else %}
    <!-- 以上条件都不满足时显示的内容 -->
{% endif %}

在构造条件时,我们可以使用常见的比较运算符(如 == 等于, != 不等于, > 大于, < 小于, >= 大于等于, <= 小于等于),以及逻辑运算符(如 and 且, or 或, not 非)来组合更复杂的判断。

掌握内容属性,实现精细化控制

AnQiCMS 提供了丰富的内置变量和标签,它们承载着页面、文档、分类等内容的各种属性。利用这些属性,我们可以构建出各种有意义的条件判断。

1. 根据内容推荐属性显示特定内容

在后台编辑文档时,我们可以为文档设置“推荐属性”,如头条、推荐、幻灯等。这些属性可以通过 archiveDetailarchiveList 标签获取到文档的 Flag 字段。

例如,如果您想在首页展示所有带有“幻灯[f]”属性的最新文档:

{% archiveList archives with type="list" flag="f" limit="5" order="id desc" %}
    {% for item in archives %}
        <a href="{{ item.Link }}">{{ item.Title }}</a>
    {% endfor %}
{% endarchiveList %}

如果要在文档详情页判断当前文档是否为推荐,可以通过 if 语句检查:

{% if archive.Flag contains "c" %} {# 假设“c”代表推荐属性 #}
    <span class="recommend-tag">推荐</span>
{% endif %}

2. 判断分类特性,构建智能导航

在处理分类列表时,您可能需要根据分类是否有子分类来决定是显示子菜单还是直接链接到该分类。categoryList 标签返回的 item 对象中包含了 HasChildren 属性。

{% categoryList categories with moduleId="1" parentId="0" %}
    <ul>
        {% for item in categories %}
            <li>
                <a href="{{ item.Link }}">{{ item.Title }}</a>
                {% if item.HasChildren %}
                    <!-- 如果有子分类,这里可以再次循环显示子分类,或者显示下拉菜单 -->
                    {% categoryList subCategories with parentId=item.Id %}
                        <ul>
                            {% for subItem in subCategories %}
                                <li><a href="{{ subItem.Link }}">{{ subItem.Title }}</a></li>
                            {% endfor %}
                        </ul>
                    {% endcategoryList %}
                {% endif %}
            </li>
        {% endfor %}
    </ul>
{% endcategoryList %}

3. 利用自定义字段,打造个性化内容模块

AnQiCMS 的“内容模型”功能允许我们为文档或分类添加自定义字段。这些自定义字段是实现内容个性化显示的关键。例如,一个产品模型可能有一个名为 Price 的自定义字段。

{# 在产品详情页,如果产品价格大于0,则显示价格信息 #}
{% archiveDetail productPrice with name="Price" %}
{% if productPrice > 0 %}
    <p>价格:¥ {{ productPrice }}</p>
{% else %}
    <p>价格面议</p>
{% endif %}

您还可以判断某个自定义字段是否存在或其值是否为空,以决定是否渲染相关的HTML块。

4. 判断图片是否存在,优化页面结构

在列表或详情页,如果文档没有缩略图或封面图,您可能不想显示一个空的图片占位符。文档详情标签 archiveDetail 或列表项 item 中的 ThumbLogo 字段可以直接用于判断:

{% if item.Thumb %}
    <img src="{{ item.Thumb }}" alt="{{ item.Title }}">
{% else %}
    <img src="/static/images/default-thumb.png" alt="无图"> {# 显示一个默认占位图 #}
{% endif %}

循环中的条件判断:增强列表展示

for 循环中,结合 if 标签可以实现对列表项更细致的控制。

1. 列表为空时的提示

for 循环特有的 empty 标签非常实用,当循环遍历的对象为空时,empty 标签内的内容就会被渲染,非常适合显示“暂无内容”的提示。

{% archiveList archives with type="list" categoryId="10" limit="10" %}
    <ul>
        {% for item in archives %}
            <li><a href="{{ item.Link }}">{{ item.Title }}</a></li>
        {% empty %}
            <li>该分类下暂无文章。</li>
        {% endfor %}
    </ul>
{% endarchiveList %}

2. 高亮显示当前导航项或列表中的特定元素

在导航菜单或分页组件中,item 通常包含一个 IsCurrent 属性,可以用来判断当前项是否为用户正在访问的页面,从而添加 active 类进行高亮显示。

{% navList navs %}
    <ul>
        {% for item in navs %}
            <li class="{% if item.IsCurrent %}active{% endif %}">
                <a href="{{ item.Link }}">{{ item.Title }}</a>
            </li>
        {% endfor %}
    </ul>
{% endnavList %}

同样,在分页标签 paginationpages.Pages 循环中,也可以使用 item.IsCurrent 来高亮显示当前页码。

利用系统与联系方式设置,实现站点级条件显示

通过 systemcontact 标签,我们可以获取到网站的全局配置信息,并以此进行条件判断。

1. 网站闭站状态提醒

在网站维护期间,您可以设置网站状态为闭站。此时,可以通过判断系统变量来显示闭站提示信息。 “`twig {% system siteCloseTips with name=“SiteCloseTips” %} {% system siteStatus with name=“SiteStatus” %} {# 假设SiteStatus 0:未启用 1:使用中 #} {% if siteStatus ==