在安企CMS中管理内容时,我们常常需要对文章中的特定信息进行结构化处理,以便于前端展示或进一步的数据分析。文章内容中可能存在一些采用特定格式标记的引用,例如用来标识相关主题的标签,它们以[tag1][tag2]这样的形式出现。如何将这类看似连续的字符串有效地提取成独立的标签数组,是许多运营者会遇到的一个实际问题。
安企CMS凭借其基于Go语言的高性能架构和灵活的Django-like模板引擎,为我们提供了强大的内容处理能力。其中,模板中的“过滤器(filters)”就像一把瑞士军刀,能够对变量进行各种精细操作,而今天我们要探讨的split过滤器,正是解决上述问题的关键。
理解问题:从特定格式中提取标签
假设我们的文章内容或者某个自定义字段中,有一段关于文章标签的描述,它的格式非常规,比如像这样:[AnQiCMS教程][模板开发][Go语言][内容运营]。我们的目标是将这个字符串转换为一个数组,如["AnQiCMS教程", "模板开发", "Go语言", "内容运营"],这样我们就可以在前端循环展示这些标签,或者根据这些标签做进一步的逻辑判断。
直接使用split过滤器可能会遇到一些挑战,因为这个字符串中并没有一个统一的、简单的分隔符(比如逗号或空格)来直接分隔每个标签。每个标签都被方括号[]包裹,且标签之间没有额外的分隔符。这就需要我们先对原始字符串进行一些预处理。
过滤器的力量:split与replace的组合运用
安企CMS的模板引擎支持链式调用过滤器,这意味着我们可以将多个过滤器串联起来,对数据进行一系列转换。为了将[tag1][tag2]这样的格式转换成标签数组,我们需要split过滤器,但更重要的是,我们还需要replace过滤器来先行“清洗”字符串。
replace过滤器:替换特定字符replace过滤器可以帮助我们替换字符串中的某个特定关键词为另一个关键词。它的基本用法是{{ obj|replace:"old,new" }},其中old是需要被替换的字符串,new是替换后的字符串。split过滤器:按分隔符切割成数组split过滤器可以将字符串按照指定的分隔符切割成一个数组。它的基本用法是{{ obj|split:"分隔符" }}。如果分隔符不存在,它会返回一个只包含原字符串的数组。
将这两个过滤器巧妙地结合起来,就能解决我们的问题。
提取标签数组的步骤
让我们以文章详情页面为例,假设我们有一个自定义字段archive.CustomTags,其中存储了[AnQiCMS教程][模板开发][Go语言][内容运营]这样的字符串。
第一步:将标签间的连接符][替换为统一的分隔符
由于标签之间是][连接的,我们可以先将这个连接符替换成一个不常用、且能够作为后续split操作的分隔符,例如逗号,。
{% set temp_string_1 = archive.CustomTags|replace:"][","," %}
此时,temp_string_1的值会变成 [AnQiCMS教程,模板开发,Go语言,内容运营]。
第二步:移除字符串两端的方括号[和]
现在字符串的两端还有方括号,它们不是标签的一部分,需要被移除。我们可以再次使用replace过滤器,将[和]替换为空字符串。
{% set temp_string_2 = temp_string_1|replace:"[,", "" %}
{% set cleaned_tags_string = temp_string_2|replace:"],", "" %}
经过这一步,cleaned_tags_string的值就变成了 AnQiCMS教程,模板开发,Go语言,内容运营。
第三步:使用split过滤器将字符串切割成数组
现在我们有了一个以逗号分隔的纯标签字符串,可以轻松地使用split过滤器将其转换成数组。
{% set tags_array = cleaned_tags_string|split:"," %}
至此,tags_array就是一个包含所有标签的数组了,如["AnQiCMS教程", "模板开发", "Go语言", "内容运营"]。
完整的模板代码示例
将上述步骤整合到安企CMS的模板中,你可以这样操作:
”`twig {# 假设 archive.CustomTags 存储的是 “[AnQiCMS教程][模板开发][Go语言][内容运营]” #}
{% if archive.CustomTags %}
{# 步骤一:将标签间的 "][" 替换为 "," #}
{% set step1_string = archive.CustomTags|replace:"][","," %}
{# 步骤二:移除字符串开头的 "[" #}
{% set step2_string = step1_string|replace:"[,", "" %}
{# 步骤三:移除字符串结尾的 "]" #}
{% set cleaned_tags_string = step2_string|replace:"],", "" %}
{# 步骤四:使用 "," 分隔符将清洗后的字符串切割成数组 #}
{% set tags_array = cleaned_tags_string|split:"," %}
{# 循环遍历并显示提取出的标签 #}
<div class="article-tags">
<strong>相关标签:</strong>
{% for tag_name in tags_array %}
{# 这里可以根据实际需求,将标签渲染为链接,例如链接到该标签的文章列表页 #}
<a href="/tag/{{ tag_name|urlencode }}" class="tag-item">{{ tag_name }}</a>
{% empty %}
<span>暂无相关标签。</span>
{% endfor %}