在使用AnQiCMS进行网站内容管理时,我们常常会遇到需要对显示的内容进行一些微调的情况,比如一篇文章的标题太长了,我们希望它只显示一部分并以省略号结尾;或者有些文字希望统一以大写或小写显示。AnQiCMS强大的模板过滤器功能就能轻松帮我们实现这些需求,无需修改任何后端代码,直接在模板层面就能完成。

模板过滤器是AnQiCMS模板语言中的一个实用工具,它允许我们对模板变量的值进行转换、格式化或处理,然后才将其输出到页面上。它的使用方式非常直观,通常是在变量后面加上一个竖线(|),再跟上过滤器的名称,如果过滤器需要参数,则在过滤器名称后面使用冒号(:)传递。例如,{{ 变量名 | 过滤器名称 : 参数 }}

内容的截断处理

在很多场景下,我们可能需要将过长的文本内容进行截断,以保持页面布局的整洁或提供简介。AnQiCMS提供了几种方便的过滤器来处理字符串和HTML内容的截断。

如果我们处理的是纯文本,可以使用truncatecharstruncatewords过滤器。truncatechars会按照字符数来截断字符串,并在末尾添加省略号。例如,你有一个文章标题{{ item.Title }},希望它最多显示15个字符,可以这样写: {{ item.Title | truncatechars:15 }} 这会将标题截断为最多15个字符(包含省略号),如果原标题少于15个字符则不会发生变化。

truncatewords则是按单词数量进行截断。如果你希望标题最多显示5个单词,可以这样操作: {{ item.Title | truncatewords:5 }} 这个过滤器会确保截断发生在单词边界,并且在末尾添加省略号。

如果我们的内容包含HTML标签,并且希望在截断时不破坏HTML结构,AnQiCMS也提供了对应的HTML安全截断过滤器:truncatechars_htmltruncatewords_html。它们与纯文本截断过滤器类似,但会智能地处理HTML标签,确保截断后的HTML代码依然是有效的。例如,对于包含HTML的文章简介: {{ item.Description | truncatechars_html:50 | safe }} 这里的safe过滤器非常重要,它告诉模板引擎此输出是安全的HTML,不需要进行转义,从而让浏览器正确解析截断后的HTML。

字符串的大小写转换

统一内容的显示格式对于提升用户体验和网站专业度至关重要。AnQiCMS的过滤器可以帮助我们轻松实现大小写转换。

最直接的大小写转换是upperlowerupper会将字符串中的所有英文字母转换为大写: {{ item.Title | upper }}lower则会将所有英文字母转换为小写: {{ item.Title | lower }}

除了全部转换,有时我们只需要将字符串的首字母大写,这时可以使用capfirst。它只会将字符串的第一个字母转换为大写,其余部分保持不变: {{ "hello world" | capfirst }} 会显示为 Hello world

如果希望字符串中每个单词的首字母都大写,其余字母小写,那么title过滤器会是你的好帮手: {{ "anqicms is a great cms" | title }} 会显示为 Anqicms Is A Great Cms。这对于格式化文章标题或名称非常有用。

其他常用字符串处理技巧

除了截断和大小写转换,AnQiCMS还提供了一系列实用的字符串处理过滤器,能够满足我们多样化的内容运营需求。

  • 移除字符 (cut):如果你想移除字符串中的某个特定字符或子串,cut过滤器可以做到。比如,要从AnQiCMS中移除i,可以写成{{ "AnQiCMS" | cut:"i" }},结果是AnQCMS
  • 替换字符 (replace):当需要将字符串中的某个部分替换成另一个部分时,replace过滤器就派上用场了。语法是{{ obj | replace:"旧内容,新内容" }}。例如,{{ "Hello World" | replace:"World,AnQiCMS" }} 会输出Hello AnQiCMS
  • 去除空格 (trim, trimLeft, trimRight):这些过滤器分别用于去除字符串两端、左侧或右侧的空格或指定字符。{{ " AnQiCMS " | trim }} 会变成AnQiCMS
  • 拼接与拆分 (join, split)split可以将字符串按分隔符拆分成数组,而join则可以将数组按分隔符拼接成字符串。这在处理标签、关键词等列表数据时非常方便。例如,{% set tags = "tag1,tag2,tag3" | split:"," %} 可以将字符串转换为数组,再用{% for tag in tags %}{{ tag }}{% endfor %}循环输出。
  • 获取长度 (length):需要知道一个字符串、数组或对象有多少个元素时,length过滤器能快速给出答案。{{ item.Title | length }}会返回标题的字符数。

这些过滤器可以单独使用,也可以链式使用,也就是在一个变量上连续应用多个过滤器,处理顺序是从左到右。例如: {{ item.Description | truncatechars:100 | lower | safe }} 这会先截断描述,然后将截断后的文本转换为小写,最后再作为安全HTML输出。

掌握这些过滤器,能让我们在AnQiCMS的模板设计和内容展示上拥有更大的灵活性和精细控制力,从而更好地呈现网站内容,提升用户体验。


常见问题 (FAQ)

  1. 问:过滤器可以用于所有类型的变量吗? 答:过滤器主要用于对字符串、数字、数组(或Go语言中的slice)、映射(或Go语言中的map)等数据类型进行处理。但是,每个过滤器都有其特定的应用场景和预期输入类型。例如,upper过滤器只对字符串有效,而length过滤器可以用于字符串、数组或映射。在实际使用中,如果输入类型不符合过滤器的要求,可能会导致过滤器无法正常工作或输出空值。
  2. 问:如果我需要对包含HTML的内容进行截断,但又不想丢失其样式或结构,应该使用哪个过滤器? 答:在这种情况下,你应该使用truncatechars_htmltruncatewords_html过滤器。这两个过滤器会智能地处理HTML标签,确保截断后的HTML结构仍然有效,并且不会丢失样式。同时,请务必在截断后加上|safe过滤器,告诉模板引擎这是一个安全的HTML片段,避免内容被再次转义而导致HTML标签直接显示出来。
  3. 问:我可以同时应用多个过滤器吗?它们的执行顺序是怎样的? 答:是的,你可以对一个变量应用多个过滤器,这被称为“链式调用”。过滤器的执行顺序是从左到右。这意味着第一个过滤器会处理原始变量的值,然后第二个过滤器会处理第一个过滤器输出的结果,以此类推。例如,{{ "HELLO WORLD" | lower | truncatechars:5 }}会先将字符串转换为小写(”hello world”),然后将其截断为5个字符(”hello…“)。