在网站运营中,我们经常会遇到这样的需求:根据网页内容的特定信息,动态地调整内容的展示方式。比如,如果一篇文章标题中包含了“促销”或“活动”等关键词,我们可能希望它自动显示一个醒目的标签;或者,为了内容审核和用户体验,需要检查文章中是否存在某些敏感词汇,并据此进行相应的处理。

安企CMS作为一个功能强大且灵活的内容管理系统,提供了直观的模板标签和过滤器,让这些动态判断和展示变得非常简单。本文将详细介绍如何在AnQiCMS模板中判断一个字符串是否包含某个关键词,并在此基础上实现多种内容运营策略。


一、核心方案:利用 contain 过滤器判断关键词

在AnQiCMS的模板系统中,最直接、最常用的方法就是使用 contain 过滤器。这个过滤器能够检查一个字符串(或数组、键值对等)是否包含指定的关键词(子字符串),并返回一个布尔值(TrueFalse)。

基本用法:

contain 过滤器的使用非常直观,它接受一个关键词作为参数,并将其应用于目标字符串。

{{ 目标字符串|contain:"关键词" }}

例如,要判断一个文章标题 article.Title 是否包含“促销”这个词:

{{"我们的AnQiCMS最新功能"|contain:"AnQiCMS"}} {# 这将输出 True #}
{{"这是一篇普通文章"|contain:"促销"}} {# 这将输出 False #}

结合条件判断 {% if %} 显示结果:

由于 contain 过滤器返回的是一个布尔值,它与模板中的条件判断标签 {% if %} 结合使用,就能实现动态内容的展示。

假设您希望在文章标题包含“热门”二字时,显示一个“热门”的角标:

{% if article.Title|contain:"热门" %}
    <span class="badge badge-hot">热门</span>
{% endif %}
<h2 class="article-title">{{ article.Title }}</h2>

存储判断结果到变量 {% set %}

在某些情况下,您可能需要将判断结果存储到一个临时变量中,以便在模板的多个位置复用这个结果,或者进行更复杂的逻辑判断。这时,可以使用 {% set %} 标签。

{% set isSpecialOffer = article.Description|contain:"限时优惠" %}

{% if isSpecialOffer %}
    <p class="promo-message">🎉 限时优惠中,抓住机会!</p>
{% endif %}

<div class="product-description">
    {{ article.Description }}
</div>

contain 过滤器对数组和键名键值对的支持:

值得一提的是,contain 过滤器不仅限于字符串。它还能用于检查数组中是否存在某个值,或者检查键值对(map/struct)中是否存在某个键名。

  • 检查数组:
    
    {% set tags = ["CMS", "Go", "内容管理", "企业站"] %}
    {% if tags|contain:"内容管理" %}
        <p>文章包含“内容管理”标签。</p>
    {% endif %}
    
  • 检查键名(对结构体或 map):
    
    {# 假设 article.Extra 是一个包含自定义字段的 map 或 struct #}
    {% if article.Extra|contain:"author" %}
        <p>此文章有作者信息。</p>
    {% endif %}
    

二、拓展应用:更多关键词处理过滤器

除了 contain,AnQiCMS还提供了其他实用的过滤器,可以帮助您更精细地处理与关键词相关的功能。

  1. count 过滤器:统计关键词出现次数 如果您不仅想知道关键词是否存在,还想知道它出现了多少次,count 过滤器会非常有用。

    {% set keywordCount = archive.Content|count:"安企CMS" %}
    {% if keywordCount > 0 %}
        <p>文章内容中“安企CMS”一词出现了 {{ keywordCount }} 次。</p>
    {% endif %}
    

    这对于分析关键词密度,或者在多处提及特定内容时进行统计非常方便。

  2. index 过滤器:获取关键词首次出现的位置 index 过滤器返回关键词在字符串中首次出现的起始位置(索引)。如果关键词不存在,则返回 -1。

    {% set firstOccurrence = article.Title|index:"活动" %}
    {% if firstOccurrence != -1 %}
        <p>“活动”一词在标题中首次出现在第 {{ firstOccurrence }} 个位置。</p>
    {% else %}
        <p>标题中不包含“活动”一词。</p>
    {% endif %}
    

    请注意,在处理包含中文字符的字符串时,index 过滤器在计算位置时可能会将一个中文字符计为多个字节,这取决于其底层实现,所以返回的索引可能不是您直观上理解的字符数位置。

  3. replace 过滤器:替换字符串中的关键词 当您需要修改字符串中的关键词时,replace 过滤器就派上用场了。它可以将旧的关键词替换为新的内容。

    {% set originalTitle = "安企CMS:高效内容管理" %}
    {% set newTitle = originalTitle|replace:"安企CMS,AnQiCMS" %}
    <p>原标题:{{ originalTitle }}</p>
    <p>新标题:{{ newTitle }}</p>
    

    这个功能在敏感词过滤、关键词高亮显示、品牌名称统一等场景中非常实用。例如,为了突出显示某个特定词语,您可以将其替换为带有HTML标签的版本:

    ”`twig