在网站内容运营中,我们经常需要根据文章的实际内容,灵活地调整页面的显示方式。例如,如果一篇文章提及了某个特定产品或活动,我们可能希望在页面上突出显示相关的购买链接或促销信息;如果文章内容涉及敏感话题,则可能需要添加额外的免责声明。这种基于文章内容进行条件显示的需求,在安企CMS(AnQiCMS)的模板中是完全可以实现的。

安企CMS采用类似Django的模板引擎语法,这使得其模板具有良好的可读性和强大的逻辑处理能力。在AnQiCMS的模板中,我们可以通过特定的标签和过滤器,轻松地检查文章内容是否包含我们预设的关键词,并根据检查结果来控制页面元素的展示。

如何在AnQiCMS模板中检查文章内容是否包含特定关键词,并基于此进行条件显示?

要实现这一目标,我们需要用到安企CMS模板中的几个核心功能:

  1. archiveDetail 标签:用于获取当前或指定文章的详细信息,包括文章内容。
  2. set 标签(或 with:用于在模板中定义和赋值变量,以便我们存储获取到的文章内容和判断结果。
  3. contain 过滤器:这是进行关键词检查的关键工具,它能判断一个字符串中是否包含另一个子字符串。
  4. if 逻辑判断标签:根据 contain 过滤器的判断结果(真或假)来执行不同的模板代码块。

下面,我们将通过具体的步骤和代码示例,来详细阐述如何在AnQiCMS模板中实现这一功能。


一、获取文章内容

首先,我们需要在模板中获取当前文章的详细内容。在文章详情页(例如 archive/detail.html)中,archiveDetail 标签可以帮助我们获取文章的 Content 字段。为了便于后续操作,我们通常会将获取到的内容赋值给一个变量。

{# 获取当前文章的Content内容,并赋值给名为 articleContent 的变量 #}
{% archiveDetail articleContent with name="Content" %}

{# 此时,articleContent 变量中就包含了文章的正文HTML内容 #}

请注意,articleContent 变量中存储的是包含HTML标签的完整文章内容。在实际显示文章内容时,通常需要加上 |safe 过滤器,以确保HTML标签能被浏览器正确解析而非被转义显示。


二、定义要检查的关键词并进行判断

接下来,我们需要确定要检查的特定关键词,并使用 contain 过滤器来判断 articleContent 中是否包含这些关键词。

contain 过滤器非常直观,其基本用法是 {{ obj|contain:关键词 }},它会返回一个布尔值(TrueFalse),表示 obj 是否包含指定的 关键词

我们可以将 contain 过滤器的判断结果也赋值给一个新变量,然后结合 if 标签进行条件显示。

1. 检查单个关键词

假设我们想检查文章内容是否包含“限时优惠”这个关键词:

{# 假设我们正在文章详情页 template/archive/detail.html #}

{# 步骤一:获取文章内容并赋值给 articleContent 变量 #}
{% archiveDetail articleContent with name="Content" %}

{# 步骤二:定义要检查的关键词 #}
{% set targetKeyword = "限时优惠" %}

{# 步骤三:使用 contain 过滤器检查文章内容是否包含该关键词,并将结果赋值给 hasOffer 变量 #}
{% set hasOffer = articleContent|contain:targetKeyword %}

{# 步骤四:根据 hasOffer 的值进行条件显示 #}
{% if hasOffer %}
    <div class="promo-banner" style="background-color: #fff3cd; padding: 10px; border: 1px solid #ffeeba; margin-bottom: 20px;">
        <p style="color: #856404; font-weight: bold;">🎉 注意:本文可能包含 <span style="color: red;">{{ targetKeyword }}</span> 信息,不容错过!</p>
        {# 您可以在这里放置一个醒目的促销链接或活动详情 #}
        <a href="/promo-page" style="color: #007bff; text-decoration: underline;">查看最新优惠活动 →</a>
    </div>
{% endif %}

{# 显示文章正文 #}
<div class="article-main-content">
    {{ articleContent|safe }}
</div>

在这个示例中,如果 articleContent 中包含“限时优惠”这个字符串,页面顶部就会显示一个黄色的促销提示条。

2. 检查多个关键词(满足任意一个即可)

如果我们需要检查多个关键词,只要文章内容包含其中任意一个,就进行条件显示,可以使用 or 逻辑运算符将多个 contain 判断连接起来:

{% archiveDetail articleContent with name="Content" %}

{% set keyword1 = "免费试用" %}
{% set keyword2 = "新用户福利" %}
{% set keyword3 = "体验版" %}

{# 只要包含任意一个关键词,hasFreebie 就为 True #}
{% set hasFreebie = articleContent|contain:keyword1 or articleContent|contain:keyword2 or articleContent|contain:keyword3 %}

{% if hasFreebie %}
    <div class="freebie-alert" style="background-color: #d1ecf1; padding: 10px; border: 1px solid #bee5eb; margin-bottom: 20px;">
        <p style="color: #0c5460;">✨ 本文提及 {{ keyword1 }}、{{ keyword2 }} 或 {{ keyword3 }},快来领取您的专属福利!</p>
        <a href="/free-trial" style="color: #007bff; text-decoration: underline;">立即前往 →</a>
    </div>
{% endif %}

<div class="article-main-content">
    {{ articleContent|safe }}
</div>

3. 检查多个关键词(必须全部满足)

如果要求文章内容必须同时包含所有指定的关键词,才进行条件显示,可以使用 and 逻辑运算符:

{% archiveDetail articleContent with name="Content" %}

{% set reqKeyword1 = "AnQiCMS" %}
{% set reqKeyword2 = "安装教程" %}
{% set reqKeyword3 = "Go语言" %}

{# 只有同时包含所有关键词,isComprehensive 就为 True #}
{% set isComprehensive = articleContent|contain:reqKeyword1 and articleContent|contain:reqKeyword2 and articleContent|contain:reqKeyword3 %}

{% if isComprehensive %}
    <div class="tech-note" style="background-color: #d4edda; padding: 10px; border: 1px solid #c3e6cb; margin-bottom: 20px;">
        <p style="color: #155724;">✅ 本文详细介绍了 <span style="font-weight: bold;">{{ reqKeyword1 }} 的 {{ reqKeyword2 }}</span>,并且强调了其 <span style="font-weight: bold;">{{ reqKeyword3 }}</span> 的技术背景。对技术感兴趣的您请仔细阅读!</p>
    </div>
{% endif %}

<div class="article-main-content">
    {{ articleContent|safe }}
</div>

三、应用场景思考

这种基于关键词的条件显示功能,在实际运营中有着广泛的应用:

  • 个性化推荐与营销:如果文章中提到某个产品型号,可以在文章底部自动插入该产品的销售链接