在安企CMS的模板开发中,我们经常会遇到需要处理数据格式转换的情况,尤其是将多个值组合成一个字符串,或者将一个包含多个值的字符串拆分成独立的数据。这在处理标签、多选属性、或者从自定义字段中提取信息时尤为常见。幸运的是,安企CMS内置了非常实用的模板过滤器,可以帮助我们轻松实现数组与带分隔符字符串之间的相互转换。

将数组转换为带分隔符的字符串:巧用 join 过滤器

想象一下,如果您的文章有多个标签(Tag),在数据库中可能以数组或列表的形式存储。但您希望在页面上将它们展示成一行,用逗号或特定符号隔开,比如“安企CMS, 模板开发, 内容管理”。这时,join 过滤器就能派上用场。

join 过滤器的作用是将数组或列表中的所有元素,通过您指定的分隔符连接起来,形成一个单一的字符串。

它的使用方式非常直观:

{{ 您的数组变量 | join:"您想要的分隔符" }}

例如,假设您有一个名为 tags 的数组,其中包含了文章的所有标签:

{% set tags = ["安企CMS", "模板开发", "Go语言", "SEO优化"] %}
<div>
  文章标签:{{ tags | join:", " }}
</div>

页面上将会显示:

文章标签:安企CMS, 模板开发, Go语言, SEO优化

您也可以选择其他分隔符,比如竖线 | 或者空格:

<div>
  相关关键词:{{ tags | join:" | " }}
</div>

这将会输出:

相关关键词:安企CMS | 模板开发 | Go语言 | SEO优化

如果您的变量本身就是一个字符串,join 过滤器会将其中的每个字符作为单独的元素进行连接,这在处理中文字符时需要特别注意:

<div>
  字符连接:{{ "安企内容管理系统" | join:"-" }}
</div>

输出会是:

字符连接:安-企-内-容-管-理-系-统

因此,join 过滤器是处理从多个独立数据项(通常是列表或数组)生成易于阅读的摘要字符串的理想工具。

将带分隔符的字符串切割成数组:探秘 split 过滤器

反过来,当您从某个自定义字段获取到一串由特定分隔符连接的值时,例如从一个文本框中输入了“产品A;产品B;产品C”,您可能需要将这些值逐一提取出来,进行遍历或独立处理。这时候,split 过滤器就是您的好帮手。

split 过滤器能够根据您提供的分隔符,将一个字符串拆分成一个字符串数组(或者说列表)。

它的基本语法是:

{{ 您要切割的字符串 | split:"您的分隔符" }}

例如,假设您的文章有一个自定义字段 keywords,存储着逗号分隔的关键词:

{% set keywordString = "网站运营,内容营销,SEO优化,用户体验" %}
{% set keywordsArray = keywordString | split:"," %}

<ul>
  {% for keyword in keywordsArray %}
    <li>{{ keyword | trim }}</li>
  {% endfor %}
</ul>

这里使用了 trim 过滤器来去除每个关键词可能存在的首尾空格,确保输出的整洁。页面上就会显示成一个列表:

- 网站运营
- 内容营销
- SEO优化
- 用户体验

一些特殊情况:

  • 空分隔符: 如果您使用空字符串 "" 作为分隔符,split 过滤器会将原字符串中的每个UTF-8字符(包括汉字)拆分成数组的一个元素。

    {% set text = "你好安企" %}
    {% set charArray = text | split:"" %}
    <div>
      {% for char in charArray %}
        <span>{{ char }}</span>
      {% endfor %}
    </div>
    

    输出:<span>你</span><span>好</span><span>安</span><span>企</span>

  • 分隔符不存在: 如果您指定的分隔符在原字符串中找不到,split 过滤器会返回一个只包含原字符串本身的数组。这可以作为一种简易的判断机制。

  • make_list 过滤器: 类似于 splitmake_list 过滤器也可以将字符串按字符拆分成数组。它与 split:"" 的效果类似,即将字符串的每一个字符作为数组的一个元素。

    {% set text = "安企CMS" %}
    {% set charList = text | make_list %}
    <div>
      {{ charList | join:"/" }}
    </div>
    

    输出:安/企/C/M/S

  • fields 过滤器: 如果您处理的字符串是纯粹由空格分隔的单词或短语,fields 过滤器提供了一个快捷方式,它会默认按空格进行拆分,并返回一个字符串数组。

    {% set sentence = "安企 CMS 是 一个 强大的 系统" %}
    {% set wordList = sentence | fields %}
    <div>
      词组:{{ wordList | join:"-" }}
    </div>
    

    输出:词组:安企-CMS-是-一个-强大的-系统

实际应用场景与小技巧

掌握了 joinsplit 这两个过滤器,您在安企CMS的内容管理和模板开发中将获得更大的灵活性。

  1. 处理自定义字段的多值输入: 如果后台有自定义文本字段允许用户输入多个值(如产品特点、服务优势),建议约定一个统一的分隔符(例如逗号、分号),然后在模板中利用 split 将其转换为数组,再用 for 循环遍历展示。

    {# 假设 archive.ProductFeatures 是后台输入的“特点1,特点2,特点3” #}
    {% set features = archive.ProductFeatures | split:"," %}
    {% if features %}
      <div class="product-features">
        {% for feature in features %}
          <span>{{ feature | trim }}</span>
        {% endfor %}
      </div>
    {% endif %}
    
  2. 动态生成元数据或标签云: 当您需要根据页面上的多个标签或关键词动态生成 meta 标签的 keywords 内容时,可以先获取所有标签的列表,再用 join 过滤器将它们组合起来。

    {% tagList tags %} {# 获取当前文档的所有标签 #}
    {% set tagTitles = [] %}
    {% for tag in tags %}
      {% set tagTitles = tagTitles | add:tag.Title %} {# 将每个标签的Title添加到新的数组 #}
    {% endfor %}
    <meta name="keywords" content="{{ tagTitles | join:"," }}">
    {% endtagList %}
    

    (注意:直接在模板中使用 add 将元素添加到数组需要一个支持此操作的 add 过滤器或类似机制,安企CMS的 add 过滤器主要用于数字或字符串相加,此处代码是概念性演示。实际操作中,如果需要动态构建数组,通常会在控制器层处理好。)

  3. URL参数处理: 虽然安企CMS的伪静态规则已经非常灵活,但在某些高级场景下,您可能需要解析或构建包含多个参数的URL。splitjoin 过滤器可以在处理这些参数时提供帮助。

总结

joinsplit 过滤器是安企CMS模板中处理字符串和数组转换的强大工具,它们让数据展示和逻辑处理变得更加灵活。合理运用这些功能,能够显著提升您在内容运营和模板开发中的效率,让您的网站内容以更贴合需求的方式呈现。


常见问题 (FAQ)

1. split 过滤器如果找不到指定的分隔符会发生什么? 如果 split 过滤器在字符串中找不到您指定的分隔符,它不会报错,而是会返回一个只包含原字符串本身的数组。例如,"AnQiCMS" | split:"," 会返回一个包含 ["AnQiCMS"] 的数组。您可以通过判断数组的长度来处理这种情况。

2. 我可以在 joinsplit 过滤器中使用变量作为分隔符吗? 可以。分隔符参数可以是直接的字符串字面量,也可以是一个存储分隔符字符串的变量。这让您可以根据不同的内容或上下文动态调整分隔符。例如 {{ my_array | join:my_delimiter_variable }}

3. split 过滤器在切割包含中文的字符串时,是按字还是按字节? split 过滤器在默认情况下,是根据您提供的分隔符进行切割的。如果使用空字符串 "" 作为分隔符,它会按照UTF-8编码的字符进行切割,这意味着一个中文字符也会被视为一个独立的切割单位,而不是按字节切割。因此,"你好" | split:"" 会得到 ["你", "好"]