在AnQiCMS的模板设计中,我们经常会遇到需要对内容进行数据分析或特定展示的需求,例如统计一篇文章中某个关键词的出现次数。这对于内容运营、SEO优化或是提升用户体验都有着实际的意义。AnQiCMS提供了灵活且功能丰富的模板引擎,让我们可以轻松实现这类操作。
要统计一个段落中某个特定单词的出现次数,我们主要会用到AnQiCMS模板中的内容变量和count过滤器。count过滤器是一个非常实用的工具,它能够计算指定关键词在一行字符串或数组中出现的次数,从而帮助我们快速获得所需的数据。
核心实现:运用 count 过滤器
count过滤器的基本用法非常直观:{{ obj|count:关键词 }}。obj代表你需要进行统计的文本内容变量,而关键词则是你想要统计其出现次数的特定单词或短语。
举个简单的例子,如果我们有一个字符串"欢迎使用安企CMS(AnQiCMS)",并想统计其中”CMS”的出现次数,可以直接这样写:
{{ "欢迎使用安企CMS(AnQiCMS)"|count:"CMS" }}
这段代码会返回2,因为它找到了”安企CMS”中的”CMS”和”AnQiCMS”中的”CMS”。
结合文章内容进行统计
在实际的网站运营中,我们通常需要统计的是文章或页面主体内容中的关键词。在AnQiCMS中,文章或单页面的主体内容通常存储在archive.Content或page.Content这样的变量中。
然而,这些内容变量往往包含HTML标签(例如<p>、<strong>、<a>等),如果直接使用count过滤器,它可能会将HTML标签内的文本也计算在内,或者受到标签结构的影响。为了获得更精确的纯文本统计结果,我们需要在count过滤器之前,先使用striptags过滤器来移除所有的HTML标签。
此外,多数情况下我们希望统计是不区分大小写的,例如”CMS”和”cms”都应被视为同一个词。这时,我们还需要再引入lower过滤器,将文本内容和待统计的关键词都转换为小写,以实现不区分大小写的匹配。
综合以上考虑,统计文章内容中特定单词出现次数的完整流程如下:
- 获取原始内容: 首先,从文章详情页面的
archive.Content(或者其他内容变量如page.Content、自定义字段等)获取原始的HTML内容。 - 移除HTML标签: 使用
striptags过滤器将HTML内容转换为纯文本。 - 统一大小写: 使用
lower过滤器将纯文本内容转换为小写,同时确保你的目标关键词也转换为小写。 - 执行计数: 最后,使用
count过滤器统计特定关键词的出现次数。
让我们来看一个具体的模板代码示例,假设我们要统计文章详情页中,”AnQiCMS”这个词出现的次数:
{# 定义我们要统计的目标关键词,并将其转换为小写,以确保不区分大小写匹配 #}
{% set targetWord = "anqicms" %}
{# 获取当前文章的原始内容,这通常是包含HTML标签的 #}
{% set rawContent = archive.Content %}
{# 使用 striptags 过滤器移除所有HTML标签,得到纯文本内容 #}
{% set textOnlyContent = rawContent|striptags %}
{# 使用 lower 过滤器将纯文本内容转换为小写,以便进行不区分大小写的匹配 #}
{% set normalizedContent = textOnlyContent|lower %}
{# 最后,使用 count 过滤器统计目标关键词在处理后的内容中出现的次数 #}
{% set occurrenceCount = normalizedContent|count:targetWord %}
<p>在当前文章内容中,关键词“<strong>{{ targetWord }}</strong>”共出现了 <strong>{{ occurrenceCount }}</strong> 次。</p>
这段代码首先将目标关键词和文章内容都标准化为小写,然后移除了HTML标签,最后再进行精确的计数。这样,无论是”AnQiCMS”、”anqicms”还是其他大小写组合,都能够被正确地统计。
如果你的内容段落是存储在自定义字段中,例如你在后台定义了一个名为introduction的字段来存储段落,那么你可以这样获取并统计:
{% archiveDetail introduction with name="introduction" %}
{% set targetWord = "介绍" %}
{% set normalizedIntro = introduction|striptags|lower %}
{% set countInIntro = normalizedIntro|count:targetWord %}
<p>在自定义介绍段落中,“{{ targetWord }}”出现了 <strong>{{ countInIntro }}</strong> 次。</p>
通过这种方式,AnQiCMS的模板引擎提供了强大的文本处理能力,使得内容运营者能够在不修改核心代码的情况下,根据具体需求对内容进行深度分析和定制化展示。无论是用于SEO策略的关键词密度分析,还是简单的内容概览,count过滤器都能助您一臂之力。
常见问题 (FAQ)
1. count 过滤器在统计时是区分大小写的吗?
是的,count 过滤器默认是区分大小写的。如果需要进行不区分大小写的统计,您应该在count过滤器之前,先使用lower或upper过滤器将文本内容和您要统计的关键词都统一转换为相同的大小写。例如,{{ content|lower|count:"keyword" }}。
2. count 过滤器会把 HTML 标签里的文本也计算在内吗?
是的,count 过滤器默认会把 HTML 标签(如<p>、<a>)以及标签的属性值都当作普通文本进行计算。为了只统计可见的纯文本内容,建议在count过滤器之前,先使用striptags过滤器移除所有HTML标签。
**3. count 过滤器是统计“子字符串”还是“完整单词”