如何在安企CMS模板中进行循环遍历(for)来显示列表数据?

在构建网站页面时,我们常常需要展示各种列表数据,比如最新的文章、产品分类、导航菜单或是评论详情。安企CMS(AnQiCMS)的模板系统为我们提供了强大而灵活的循环遍历功能,让动态列表的展示变得非常简单。

安企CMS的模板语法借鉴了Django模板引擎,因此,熟悉这类语法的用户会感到非常亲切。它使用 for 循环标签来遍历数据集合,并将集合中的每个项目逐一展示出来。

安企CMS模板中的循环遍历基础

核心的循环遍历语法非常直观:

{% for item in collection %}
    {# 在这里放置你的 HTML 代码和变量,用于显示每个 item 的数据 #}
    <p>{{ item.Title }}</p>
{% endfor %}

在这里,collection 代表的是你想要遍历的数据集合,例如通过 archiveList 标签获取的文章列表,或者通过 categoryList 标签获取的分类列表。而 item 则是循环中当前正在处理的单个数据对象,你可以通过 item.属性名 的方式来访问这个数据对象的各项信息,比如标题(Title)、链接(Link)、ID(Id)等。

例如,如果我们想要展示一个简单的文章标题列表,可以这样操作:

{% archiveList archives with type="list" limit="5" %}
    <ul class="article-list">
        {% for article in archives %}
            <li>
                <a href="{{ article.Link }}">{{ article.Title }}</a>
            </li>
        {% endfor %}
    </ul>
{% endarchiveList %}

这段代码首先使用 archiveList 标签从后台获取了最新的5篇文章数据,并将这些数据赋值给了 archives 变量。接着,for article in archives 循环会逐一处理 archives 中的每篇文章,在每次循环中,当前文章的数据就被赋给了 article 变量,我们便可以利用 article.Linkarticle.Title 来构建文章的链接和标题。

深入探索:循环中的实用技巧

除了基本的循环,安企CMS的 for 循环还提供了一些实用的辅助功能,让列表展示更加灵活。

1. 处理空数据:{% empty %}

如果某个数据集合在循环时为空,你可能希望显示一条提示信息,而不是空白页面。empty 标签就能派上用场:

{% for item in archives %}
    <p>{{ item.Title }}</p>
{% empty %}
    <p>抱歉,目前还没有任何内容。</p>
{% endfor %}

archives 列表没有数据时,{% empty %} 标签内的内容就会被显示出来。

2. 获取循环信息:forloop对象

for 循环内部,你可以访问一个特殊的 forloop 对象,它提供了关于当前循环状态的有用信息。最常用的是:

  • forloop.Counter: 当前循环的迭代次数,从1开始计数。
  • forloop.Revcounter: 当前循环剩余的迭代次数,从总数倒数计数。

这在需要对列表中的特定项(如第一个或最后一个)进行特殊处理时非常方便。例如,给列表的第一个项目添加一个 active 类:

{% for item in archives %}
    <li {% if forloop.Counter == 1 %}class="active"{% endif %}>
        <a href="{{ item.Link }}">{{ item.Title }}</a>
    </li>
{% endfor %}

3. 排序与反转:reversedsorted

你可以在 for 循环中直接使用 reversedsorted 关键字来改变遍历的顺序:

  • {% for item in archives reversed %}:将 archives 列表反向遍历。
  • {% for item in archives sorted %}:尝试对 archives 列表进行排序(这通常要求列表中的元素是可比较的,例如数字或字符串)。

需要注意的是,更复杂的排序逻辑(例如按发布时间倒序、按浏览量排序等),通常是在获取数据的列表标签(如 archiveList)中使用 order 参数来实现,例如 order="views desc"

4. 结合不同的列表标签获取数据

安企CMS提供了多种列表标签来获取不同类型的数据集合,这些集合都可以通过 for 循环进行遍历:

  • archiveList:获取文章、产品等文档列表。
  • categoryList:获取分类列表。
  • navList:获取网站导航菜单。
  • pageList:获取单页面列表。
  • tagList:获取标签列表。
  • commentList:获取评论列表。
  • linkList:获取友情链接列表。
  • bannerList:获取首页Banner列表。

这些标签都接受不同的参数来精确控制获取哪些数据,并将数据集合赋值给一个变量名,供 for 循环使用。

实际应用场景与代码示例

让我们通过几个具体的例子来展示 for 循环在安企CMS模板中的应用。

1. 展示带有缩略图和发布时间的文章列表

{% archiveList articles with type="page" limit="10" order="id desc" %}
    <div class="article-grid">
        {% for item in articles %}
            <article class="article-card">
                {% if item.Thumb %}
                    <a href="{{ item.Link }}" class="article-thumb">
                        <img src="{{ item.Thumb }}" alt="{{ item.Title }}">
                    </a>
                {% endif %}
                <div class="article-info">
                    <h3><a href="{{ item.Link }}">{{ item.Title }}</a></h3>
                    <p class="article-desc">{{ item.Description|truncatechars:100 }}</p>
                    <div class="article-meta">
                        <span>发布日期:{{ stampToDate(item.CreatedTime, "2006年01月02日") }}</span>
                        <span>浏览量:{{ item.Views }}</span>
                    </div>
                </div>
            </article>
        {% empty %}
            <p>抱歉,目前没有找到任何文章。</p>
        {% endfor %}
    </div>
{% endarchiveList %}

这个例子中,我们使用 archiveList 获取文档,并设置了 type="page"(用于分页),limit="10"(每页10条),order="id desc"(按ID倒序,即最新发布)。在循环内部,我们展示了文章标题、链接、缩略图、简介,并通过 stampToDate 格式化了发布时间。truncatechars:100 过滤器则用于截取简介,避免过长。

2. 嵌套展示多级分类导航

许多网站都需要多级分类导航,这可以通过嵌套 categoryList 标签和 for 循环来实现:

”`twig {% categoryList mainCategories with moduleId=“1” parentId=“0” %}

<nav class="main-nav">
    <ul>
        {% for mainCat in mainCategories %}