作为一名资深的网站运营专家,我深知在内容运营中,个性化和动态展示是提升用户体验、提高内容转化率的关键。安企CMS(AnQiCMS)凭借其灵活强大的模板引擎,为我们实现这些目标提供了极大的便利。今天,我们就来深入探讨一个在模板制作中非常实用的场景:根据用户标签动态显示不同内容时,如何检查标签是否在特定的列表中?
在安企CMS中,我们经常会给文章、产品等内容打上各种标签,例如“新品推荐”、“限时促销”、“VIP专属”、“热销爆款”等。当我们需要在前端页面,比如文章列表页或产品详情页,根据内容所带的标签来展示不同的提示、样式或功能模块时,就需要一套行之有效的判断机制。这就像是给内容设定了一套“准入标准”:只有符合特定标签组合的内容,才能获得特定的展示待遇。
理解安企CMS的模板机制与标签获取
在安企CMS的模板中,我们使用的是类似Django的模板引擎语法。这意味着变量使用双花括号 {{变量}},而逻辑控制和循环则使用单花括号加百分号 {% 标签 %}。要实现我们的目标,首先需要能够获取到当前文档(或内容)所关联的标签。
假设我们正在一个文档列表页或详情页,可以通过以下方式获取文档数据及其关联的标签:
获取文档列表或详情:
- 对于列表,我们通常会使用
{% archiveList archives ... %}标签来循环遍历文档。 - 对于详情页,当前文档数据通常直接可用,或者使用
{% archiveDetail archive with ... %}来获取特定文档的详细信息。
- 对于列表,我们通常会使用
获取文档的关联标签: 在
archiveList或archiveDetail返回的每个文档(或item)中,其Id是唯一的标识。我们可以利用这个ID,通过{% tagList tags with itemId=item.Id %}标签来获取该文档所关联的所有标签列表。这个tags变量会是一个包含多个标签对象的数组,每个标签对象通常有Title(标签名称)、Link(标签链接)等属性。
到这里,我们已经有了两组数据:一是内容本身,二是内容所带的全部标签。接下来,关键是如何判断这些标签中的某一个或某几个,是否存在于我们预设的“特定列表”中。
构建“特定列表”并进行标签归属检查
安企CMS的模板引擎提供了强大的过滤器(Filter)功能,可以对变量进行处理和转换。其中,|list 过滤器和 |contain 过滤器正是解决我们当前问题的利器。
定义你的“特定列表”: 我们可以在模板中通过
{% set %}标签配合|list过滤器来定义一个字符串数组,这就是我们期望的“特定列表”。例如,我们希望识别“VIP专属”和“新品推荐”这两种标签:{% set specialTags = '["VIP专属", "新品推荐"]'|list %}这里,
specialTags就成了一个包含字符串 “VIP专属” 和 “新品推荐” 的数组。利用
|contain过滤器检查标签归属:|contain过滤器用于判断一个集合(如数组)或字符串是否包含某个特定的元素或子串。它的使用方式是集合变量|contain:要查找的元素。现在,我们将前面的步骤整合起来:
”`twig {# 假设我们正在一个文档列表的循环中 #} {% archiveList archives with type=“page” limit=“10” %}
{% for archive_item in archives %} <div class="article-card"> <h3><a href="{{archive_item.Link}}">{{archive_item.Title}}</a></h3> {# 定义我们想要检查的特定标签列表 #} {% set targetTags = '["VIP专属", "新品推荐", "独家"]'|list %} {# 标记,用于判断当前文档是否包含特定标签 #} {% set hasSpecialTag = false %} {# 获取当前文档的所有标签 #} {% tagList current_archive_tags with itemId=archive_item.Id %} {% for tag in current_archive_tags %} {# 检查当前标签的Title是否在targetTags列表中 #} {% if targetTags|contain:tag.Title %} {% set hasSpecialTag = true %} {# 如果找到任意一个,就设置为true #} {% endif %} {% endfor %} {% endtagList %} {# 根据hasSpecialTag的值,显示不同的内容 #} {% if hasSpecialTag %} <span style="color: red; font-weight: bold;">【{{ archive_item.Title }} - 专属推荐!】</span> {% else %} <span>{{ archive_item.Description|truncatechars:100 }}</span> {% endif %} {# 也可以在这里展示所有标签,辅助调试或作为内容的一部分 #} <div class="tags"> {% tagList archive_tags_display with itemId=archive_item.Id %} {% for tag_display in archive_tags_display %} <a href="{{tag_display.Link}}" class="tag-badge">{{tag_display.Title}}</a> {% endfor %} {% endtagList %} </div> </div> {% empty %} <p>暂无内容。</p> {% end