AnQiCMS如何判断一个字符串或数组是否包含某个关键词并据此显示内容?

📅 👁️ 73

在网站运营中,我们常常需要根据内容的特定属性或关键词来动态调整页面的显示。例如,当文章标题包含“最新”二字时,我们可能想给它加上一个醒目的“NEW”标签;或者当某个产品描述中提及“包邮”时,自动显示一个免运费的图标。安企CMS(AnQiCMS)提供了强大的模板功能和丰富的过滤器,让实现这些需求变得轻而易举。

本文将深入探讨AnQiCMS如何通过判断字符串或数组是否包含某个关键词,并据此灵活地显示或隐藏内容。我们将重点介绍 contain 过滤器,并结合实际场景,帮助您轻松驾驭动态内容显示。

核心功能:contain 过滤器——判断内容是否包含关键词

AnQiCMS模板引擎内置了一个非常实用的 contain 过滤器,它能够帮助我们快速判断一个变量(无论是字符串、数组、甚至是结构体或映射的键名)是否包含了我们指定的关键词。这个过滤器会返回一个布尔值(TrueFalse),我们就可以根据这个结果来控制内容的显示逻辑。

contain 过滤器的基本用法:

{{ 待检查的变量 | contain:"关键词" }}

示例一:判断字符串是否包含特定词

假设您有一篇新闻文章,需要在标题中包含“独家”二字时,在页面上显示一个“Special”角标。

首先,我们可以通过 archiveDetail 标签获取文章标题:

{% archiveDetail articleTitle with name="Title" %}

然后,使用 contain 过滤器判断标题是否含有“独家”:

{% if articleTitle | contain:"独家" %}
    <span class="special-badge">Special</span>
{% endif %}

这样,只有当文章标题中含有“独家”时,页面上才会出现“Special”角标。

示例二:判断数组中是否存在某个关键词的值

网站的文章通常会打上许多Tag标签。假设我们想判断当前文章是否含有“促销”这个标签,如果有,就显示一个特殊的优惠信息。

我们可以先获取当前文章的所有Tag列表:

{% tagList tags with itemId=archive.Id limit="10" %}

tags 变量此时是一个数组。接着,我们就可以用 contain 过滤器来检查这个数组:

{% if tags | contain:"促销" %}
    <p class="promo-text">🎉 购买此商品可享受限时促销优惠!</p>
{% endif %}

请注意,当检查数组时,contain 过滤器会检查数组中的每个元素是否 完全等于 您提供的关键词。例如,如果 tags 数组中有一个元素是 ["大促销"],而您检查的是 contain:"促销",结果将是 False。如果需要模糊匹配,您可能需要将数组元素转换为字符串,然后逐一进行包含判断,或者采用下文介绍的 split 过滤器进行更精细的处理。

获取待判断的内容:多样的内容来源

在AnQiCMS中,您可以通过各种内置标签获取需要进行关键词判断的内容。以下是一些常见的例子:

  • 文章标题或内容:
    
    {% archiveDetail article with name="Title" %}
    {% archiveDetail articleContent with name="Content" %}
    
  • 分类名称或描述:
    
    {% categoryDetail categoryName with name="Title" %}
    {% categoryDetail categoryDesc with name="Description" %}
    
  • 单页面内容:
    
    {% pageDetail pageContent with name="Content" %}
    
  • 自定义字段: 如果您为内容模型定义了自定义字段(例如 product_features),也可以直接获取其值进行判断。
    
    {% archiveDetail productFeatures with name="product_features" %}
    

灵活运用:构建动态显示逻辑

结合 contain 过滤器和AnQiCMS强大的 if 条件判断以及 for 循环,您可以实现各种复杂的动态显示需求。

场景:根据自定义字段内容,展示不同的联系方式图标

假设您的产品详情页有一个自定义字段 support_method,用户可以在后台填写“微信、电话、邮件”等联系方式。您希望根据这些关键词显示对应的联系图标。

  1. 获取自定义字段内容:
    
    {% archiveDetail supportMethod with name="support_method" %}
    
  2. 进行判断并显示:
    
    <div class="contact-icons">
        {% if supportMethod | contain:"微信" %}
            <a href="#" class="icon-wechat" title="微信联系"></a>
        {% endif %}
        {% if supportMethod | contain:"电话" %}
            <a href="tel:{{ contact with name='Cellphone' }}" class="icon-phone" title="电话联系"></a>
        {% endif %}
        {% if supportMethod | contain:"邮件" %}
            <a href="mailto:{{ contact with name='Email' }}" class="icon-email" title="邮件联系"></a>
        {% endif %}
    </div>
    

在这个例子中,我们还结合了 contact 标签来获取预设的电话和邮箱,让联系方式更加动态和完善。

进阶技巧与注意事项

1. 将字符串拆分成数组后再判断:splitfields 过滤器

如果您的某个字段是一个包含多个关键词的字符串,例如 tags_string = "安企CMS,建站,教程",您想检查其中是否包含“教程”,直接使用 contain:"教程" 可能会因为分隔符的存在而不够精确(如果关键词是 安企CMS,而字符串是 安企CMS入门,直接 contain 会返回 True)。此时,可以先将其拆分为数组:

{% set tagsArray = tags_string | split:"," %} {# 使用逗号作为分隔符 #}
{% if tagsArray | contain:"教程" %}
    <p>包含“教程”关键词</p>
{% endif %}

fields 过滤器则可以按照空格将字符串拆分成数组。

2. 判断关键词出现的次数:count 过滤器

如果不仅仅是判断是否存在,还需要知道关键词出现了多少次,可以使用 count 过滤器:

{% set content = "安企CMS是强大的CMS,安企CMS易于使用。" %}
{% set cmsCount = content | count:"安企CMS" %}
<p>“安企CMS”在内容中出现了 {{ cmsCount }} 次。</p>
{% if cmsCount > 1 %}
    <p>这是一个重要词汇!</p>
{% endif %}

3. 替代方案:index 过滤器

index 过滤器会返回关键词在字符串中首次出现的位置(从0开始计数)。如果关键词不存在,则返回 -1。这也可以用来判断关键词是否存在:

{% set title = "安企CMS最新动态" %}
{% if title | index:"最新" != -1 %}
    <span>发现最新动态!</span>
{% endif %}

index 在处理中文时,可能会涉及到字符编码的长度问题,计算位置时需要注意,一个中文通常算3个位置。对于简单的包含判断,contain 过滤器会更为直观和方便。

4. 大小写敏感性

AnQiCMS模板中的字符串比较通常是大小写敏感的。这意味着 contain:"CMS" 不会匹配 cms。如果您需要进行大小写不敏感的判断,可以在判断前,先将字符串转换为统一的大小写(例如全部转为小写),再进行判断:

{% set title = "AnQiCMS更新" %}
{% if title | lower | contain:"cms" %}
    <p>标题中包含不区分大小写的“cms”</p>
{% endif %}

5. 性能考量

虽然过滤器功能强大,但在处理大量内容或循环中频繁使用复杂的过滤器可能会对页面加载速度产生轻微影响。在大多数常见场景下,这种影响微乎其微,但如果遇到性能瓶颈,可以考虑在控制器层(Go语言后端)预处理数据,直接将布尔结果传递给模板。

总结

AnQiCMS的模板过滤器,特别是 contain 过滤器,为网站运营者提供了极大的灵活性,能够根据字符串或数组中的关键词动态地显示内容。通过巧妙地结合 if 语句、for 循环以及其他辅助过滤器,您可以构建出高度个性化和响应用户需求的内容展示逻辑,从而显著提升网站的用户体验和运营效率。掌握这些技巧,将让您的AnQiCMS网站运营更加得心应手。


常见问题 (FAQ)

Q1:contain 过滤器是否区分大小写?如何实现大小写不敏感的判断? A1:是的

相关文章

如何在AnQiCMS模板中移除字符串中的特定字符或空格?

在网站内容管理中,字符串的处理是不可避免且至关重要的一环。无论是为了页面美观,保持数据输出的规范性,还是为了SEO优化,我们经常需要对文本内容进行精细的调整,例如移除多余的空格、标点符号或是其他特定字符。AnQiCMS 提供了灵活且强大的模板引擎,让我们能够轻松地在前端模板中实现这些字符串操作。 理解 AnQiCMS 模板中的过滤器是实现这些操作的关键

2025-11-08

AnQiCMS如何将字符串按指定分隔符拆分成数组并在模板中遍历显示?

在网站运营和内容管理中,我们经常会遇到这样的场景:后台某个字段存储了多个相关信息,比如一篇文章的多个关键词、一个产品的多种功能标签,或者某个作者的多个别名。这些信息通常以逗号、分号或其他特定符号连接成一个字符串。当需要在网站前端模板中将这些信息逐一展示或进行样式处理时,就需要将这个字符串拆分成独立的项,然后逐个遍历显示。 AnQiCMS 提供了强大且灵活的模板引擎,其语法风格类似于

2025-11-08

如何在AnQiCMS模板中进行简单的数学算术运算来显示结果?

在AnQiCMS的模板中处理数字运算,是实现网站数据动态化和个性化展示的重要一环。无论您需要计算商品总价、展示折扣信息、或者根据某些数值进行条件判断,AnQiCMS强大的模板引擎都能提供灵活的支持。得益于其类Django模板引擎的特性,进行简单的数学算术运算可以直接在模板中完成,无需复杂的代码逻辑。 ### 直接在模板中进行表达式计算 AnQiCMS的模板引擎支持在双大括号 `{{ }}`

2025-11-08

AnQiCMS如何将时间戳格式化为“年-月-日”的显示格式?

在日常的网站运营中,日期的展示形式对用户体验至关重要。一个清晰、一致且易于理解的日期格式,能够让访客更方便地获取信息,提升网站的专业度。对于安企CMS(AnQiCMS)的用户来说,我们经常会遇到内容发布时间、更新时间等以时间戳形式存储的数据,而如何将这些长串数字转化为“年-月-日”这样友好的显示格式,是内容呈现上不可或缺的一环。 安企CMS作为一款高效的内容管理系统

2025-11-08

AnQiCMS如何处理图片资源管理并优化

在日常的网站运营中,图片不仅是内容的重要组成部分,更是影响网站性能和用户体验的关键因素。高效的图片资源管理与优化,能够显著提升网站的加载速度,改善搜索引擎排名,并有效保护原创内容的版权。AnQiCMS作为一款为内容运营而生的系统,在图片处理方面提供了全面且实用的功能,帮助我们轻松应对这些挑战。 ### 一、全面的图片资源集中管理 AnQiCMS为图片资源提供了一个集中化的管理平台

2025-11-08

如何利用AnQiCMS模板标签精准控制文章详情页的显示内容?

网站运营中,文章详情页是用户与内容深度互动、了解产品或服务的关键环节。一个设计精良、信息呈现精准的详情页,不仅能显著提升用户体验,还能有效助力SEO优化。在安企CMS(AnQiCMS)这样灵活高效的内容管理系统中,我们可以通过巧妙运用其模板标签,实现对文章详情页内容的精细化控制。 AnQiCMS基于Go语言开发,以其简洁高效的架构,提供了类似Django模板引擎的强大功能

2025-11-08

AnQiCMS中,如何在文章列表页实现动态分页并控制每页显示数量?

在安企CMS中管理网站内容,文章列表页通常是用户浏览信息的主要入口之一。为了提供更流畅的用户体验并优化页面加载性能,实现动态分页和灵活控制每页显示数量显得尤为重要。安企CMS提供了强大且易于使用的模板标签,让我们可以轻松实现这些功能。 ### 核心概念:动态分页与每页数量控制的基石 在安企CMS中,实现文章列表的动态分页主要依赖于两个核心模板标签: 1. **`archiveList`

2025-11-08

如何自定义AnQiCMS网站的URL伪静态规则,以优化搜索引擎显示效果?

在网站运营中,网址(URL)的结构对搜索引擎优化(SEO)和用户体验有着举足轻重的影响。一个清晰、有意义的网址不仅能帮助搜索引擎更好地理解页面内容,也能让用户在点击前对页面内容有所预期,提升信任感。AnQiCMS作为一个专注于企业内容管理的系统,深知这一点,因此提供了灵活的伪静态规则自定义功能。 本文将引导您了解如何在AnQiCMS中自定义伪静态规则,从而优化您的网站在搜索引擎中的表现

2025-11-08