在安企CMS中管理网站内容时,我们经常需要根据字符串、数组或集合中元素的多少来灵活调整页面显示。无论是判断文章标题的长度是否需要截断,还是统计某个分类下有多少篇文档,亦或是展示用户评论的数量,获取这些内容的“长度”都是进行动态展示和逻辑判断的关键。

安企CMS的模板引擎提供了简洁高效的内置功能,帮助我们轻松应对这些场景。其中,length 过滤器就是您获取字符串、数组或键值对长度的得力助手,而 length_is 过滤器则让您能够方便地进行长度的条件判断。

轻松掌握 length 过滤器

length 过滤器顾名思义,就是用来获取指定数据类型的长度。它非常智能,能够根据您传入的变量类型,返回不同的长度信息:

  • 对于字符串: 它会计算字符串中实际字符的数量。即使是中文字符,它也会正确地将其算作一个字符,而不是按字节数计算。
  • 对于数组(Slice)或列表: 它会返回数组或列表中包含的元素总数。
  • 对于键值对(Map)或对象: 它会返回键值对中条目的数量,也就是有多少个属性。

使用 length 过滤器非常直观,只需将您想要计算长度的变量通过管道符 | 连接到 length 即可,例如:{{ 您的变量|length }}

我们来看几个实际的例子:

获取字符串的长度

假设您有一段文本,无论是英文还是中文,想要知道它的字符长度:

{# 假设有一个字符串变量 title = "欢迎使用安企CMS" #}
<p>文章标题的字符长度是:{{ title|length }}</p>

{# 假设有一个字符串变量 description = "AnQiCMS is a powerful CMS." #}
<p>描述内容的字符长度是:{{ description|length }}</p>

这段代码会分别输出 1026。这表明 length 过滤器能准确地计算出包含中文字符和英文字符的字符串长度。

获取数组或列表的长度

在处理文章列表、图片列表或标签列表时,length 过滤器能帮助您快速了解数据量。例如,您可能想知道当前页面有多少篇文档,或者某个标签下有多少个关联项目:

{% archiveList articles with type="list" limit="5" %}
    <p>当前页面有 {{ articles|length }} 篇文档。</p>
    {# 接着您可以在这里遍历 articles 列表,展示每篇文档的信息 #}
    {% for item in articles %}
        {# ... 展示文档内容 ... #}
    {% endfor %}
{% endarchiveList %}

{% tagList tags with limit="10" %}
    <p>当前文章关联了 {{ tags|length }} 个标签。</p>
    {% for item in tags %}
        {# ... 展示标签信息 ... #}
    {% endfor %}
{% endtagList %}

如果 articles 列表实际返回了 5 篇文档,那么第一个 {{ articles|length }} 就会显示 5。同样,如果 tags 列表返回了 3 个标签,则会显示 3。这对于控制循环次数、显示总数摘要等场景非常有用。

获取键值对或对象属性的数量

在安企CMS的模板中,一些配置或自定义字段可能以键值对的形式存在。length 过滤器同样可以计算这些键值对的条目数量。例如,如果您自定义了一个文档参数集合 params,并想知道其中有多少个参数:

{% archiveParams params %}
    <p>当前文档设置了 {{ params|length }} 个自定义参数。</p>
    {% for item in params %}
        <p>{{ item.Name }}:{{ item.Value }}</p>
    {% endfor %}
{% endarchiveParams %}

这里 params|length 会返回 params 集合中包含的参数数量,帮助您动态展示自定义信息的完整性。

结合 length_is 进行条件判断

除了直接获取长度,有时我们更需要根据长度来做出判断,比如“如果文章数量为零就显示‘暂无内容’”。这时候,length_is 过滤器就派上用场了。

length_is 过滤器用于判断一个变量的长度是否等于某个指定的值,它会返回 TrueFalse(布尔值)。

使用方法是 {{ 您的变量|length_is:数字 }},通常会配合 if 逻辑判断标签一起使用:

{% archiveList articles with type="list" limit="0" %} {# 这里故意设置 limit 为 0,模拟列表为空 #}
    {% if articles|length_is:0 %}
        <p>抱歉,当前分类暂无文章内容。</p>
    {% else %}
        <p>发现 {{ articles|length }} 篇文章,快来阅读吧!</p>
        {% for item in articles %}
            {# ... 展示文档内容 ... #}
        {% endfor %}
    {% endif %}
{% endarchiveList %}

在这个例子中,如果 articles 列表的长度为 0,页面就会显示“抱歉,当前分类暂无文章内容。”否则,就会显示文章数量并列出文章。这使得您的模板能够根据数据实时调整显示内容,提升用户体验。

掌握 lengthlength_is 过滤器,能让您的安企CMS模板开发和内容运营变得更加灵活高效,无论是精细化布局,还是优化用户交互,它们都将是您不可或缺的工具。


常见问题 (FAQ)

1. lengthlength_is 这两个过滤器有什么主要区别? length 过滤器是用来获取字符串、数组或键值对的实际长度,它会返回一个具体的数字。而 length_is 过滤器则是用来判断一个变量的长度是否等于您指定的数字,它会返回一个布尔值(TrueFalse),通常用于 {% if %} 这样的条件语句中。

2. length 过滤器在计算字符串长度时,是按字节还是按字符计算? 在安企CMS的模板引擎中,length 过滤器在计算字符串长度时,是按实际字符数量来计算的,而不是按字节数。这意味着无论是英文字母、数字还是中文字符,每一个都算作一个字符。例如,{{ "你好世界"|length }} 的结果是 4

3. 如果我想知道一个列表(数组)是否为空,除了 length_is:0 之外,还有其他更简洁的方法吗? 当然有!安企CMS的模板引擎提供了 {% for ... empty ... endfor %} 这种非常优雅的结构来处理列表为空的情况。当 for 循环遍历的列表为空时,{% empty %}{% endfor %} 之间的内容就会被显示,而不会执行正常的循环体。 例如:

{% archiveList myArticles %}
    {% for article in myArticles %}
        <p>{{ article.Title }}</p>
    {% empty %}
        <p>暂无相关文章。</p>
    {% endfor %}
{% endarchiveList %}

这种方式在代码的可读性和简洁性上都非常出色。