安企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 过滤器,我们可以轻松地获取到这个列表中元素的总数。无论这个列表是通过 archiveList、categoryList、pageList 还是 tagDataList 等标签获取的,length 过滤器都能准确地计算出其中的元素数量。
对于键值对(Map)类型的变量,length 过滤器同样适用。例如,如果你在后台为文档设置了多个自定义参数,并以非排序模式(sorted=false)通过 archiveParams 标签获取,它可能返回一个键值对结构。这时,你可以用 |length 来计算有多少个自定义参数:
{% archiveParams articleCustomParams with sorted=false %}
{# 假设这里获取到了一个键值对集合,包含如'作者'、'来源'等参数 #}
<p>这篇文档共设置了 {{ articleCustomParams|length }} 个自定义参数。</p>
{% endarchiveParams %}
需要注意的是,如果 archiveParams 使用 sorted=true(默认值),它会返回一个对象数组,每个对象包含 Name 和 Value 属性,此时 |length 依然计算的是数组中对象的数量。
此外,一些标签(如 archiveDetail、categoryDetail)的某些属性本身就是列表,例如文档详情的 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 %}