如何在AnQiCMS模板中获取一个列表或键值对的元素数量?

安企CMS(AnQiCMS)凭借其灵活的模板引擎,让网站内容的展示变得直观且高效。在实际网站运营中,我们经常需要根据列表或键值对(Map)中元素的数量来动态调整页面布局、显示不同的内容,甚至进行一些复杂的逻辑判断。掌握如何在模板中获取这些元素的数量,是进行高级定制和优化不可或缺的技能。

幸运的是,AnQiCMS 的模板语法提供了多种便捷的方式来帮助我们实现这一目标。

巧妙利用 length 过滤器——通用且强大的计数器

在 AnQiCMS 的模板中,最直接也最常用的方法就是使用 length 过滤器。这个过滤器功能强大,不仅能计算列表(数组、切片)中元素的数量,也能获取字符串的字符长度,甚至应用于键值对(Map)以获取键值对的数量。

当你在模板中通过 archiveList 获取文章列表,或者通过 categoryList 获取分类列表时,它们返回的都是一个包含多个元素的集合。比如,我们想知道某个分类下有多少篇文章,或者页面上展示了多少个产品,就可以这样做:

{% archiveList latestArticles with type="list" limit="5" %}
    {# 此处是循环展示文章的实际内容,例如: #}
    {# <div>{{ item.Title }}</div> #}
{% endarchiveList %}

{% if latestArticles|length > 0 %}
    <p>最新文章共有:{{ latestArticles|length }} 篇。</p>
{% else %}
    <p>暂无最新文章可显示。</p>
{% endif %}

在上面的例子中,latestArticles 是一个文章列表,通过 |length 过滤器,我们可以轻松地获取到这个列表中元素的总数。无论这个列表是通过 archiveListcategoryListpageList 还是 tagDataList 等标签获取的,length 过滤器都能准确地计算出其中的元素数量。

对于键值对(Map)类型的变量,length 过滤器同样适用。例如,如果你在后台为文档设置了多个自定义参数,并以非排序模式(sorted=false)通过 archiveParams 标签获取,它可能返回一个键值对结构。这时,你可以用 |length 来计算有多少个自定义参数:

{% archiveParams articleCustomParams with sorted=false %}
    {# 假设这里获取到了一个键值对集合,包含如'作者'、'来源'等参数 #}
    <p>这篇文档共设置了 {{ articleCustomParams|length }} 个自定义参数。</p>
{% endarchiveParams %}

需要注意的是,如果 archiveParams 使用 sorted=true(默认值),它会返回一个对象数组,每个对象包含 NameValue 属性,此时 |length 依然计算的是数组中对象的数量。

此外,一些标签(如 archiveDetailcategoryDetail)的某些属性本身就是列表,例如文档详情的 Images 属性(一组图片链接)或 ContentTitles 属性(文章内容的标题列表),你也可以直接在这些属性上使用 length 过滤器来获取它们的元素数量:

”`twig {% archiveDetail currentArticle with name=“Images” %}

{% if currentArticle|length > 0 %}
    <p>本文共有 {{ currentArticle|length }} 张配图。</p>
    {# 循环展示图片 #}
    {% for image in currentArticle %}
        <img src="{{ image }}" alt="图片描述" />
    {% endfor %}
{% else %}