在运营网站时,高效地展示内容列表是吸引访客、提升用户体验的关键一环。对于使用 AnQiCMS 的朋友们来说,系统提供了非常灵活且强大的模板功能,可以轻松实现各种复杂的内容展示需求。今天,我们就来探讨如何在 AnQiCMS 网站中显示文章列表,并确保这些文章按照发布时间从最新到最旧的顺序排列,同时支持友好的分页功能。

AnQiCMS 的模板系统借鉴了 Django 模板引擎的语法,这使得内容开发者可以非常容易地上手。您会看到标签(以 {%%} 包裹)用于控制逻辑,而变量(以 {{}} 包裹)则用于输出数据。掌握这些基本语法,您就能轻松驾驭 AnQiCMS 的内容展示。

理解核心标签:archiveList 与时间排序

要在 AnQiCMS 中显示文章列表,最核心的标签莫过于 archiveList。它专门用于获取网站中的文档数据,包括文章、产品等。这个标签拥有丰富的参数,可以帮助我们精确地筛选、排序和展示内容。

要实现按发布时间降序排序,我们需要关注 archiveList 标签的 order 参数。AnQiCMS 内部存储了每篇文章的发布时间字段,通常是 CreatedTime。因此,将其设置为 order="CreatedTime desc" 就能达到我们想要的效果,desc 表示降序(descending)。如果希望文章能支持分页,我们还需要将 type 参数设置为 page

此外,由于 CreatedTime 字段通常是一个时间戳,为了让它以我们熟悉的日期格式显示,我们还需要配合使用 stampToDate 模板函数进行格式化。

第一步:准备模板文件

首先,您需要进入 AnQiCMS 的模板文件目录。通常,文章列表会存放在类似 template/your_theme_name/article/list.htmltemplate/your_theme_name/list.html 的位置。如果您正在创建一个新的列表页面,可以在 template/your_theme_name/ 下创建新的 HTML 文件,例如 blog_list.html

第二步:使用 archiveList 标签获取文章数据

在您的模板文件中,我们将使用 archiveList 标签来拉取文章数据。这里,我们指定获取文章模型(通常 moduleId="1" 代表文章模型,具体请以您的后台配置为准)下的所有文章,并按发布时间倒序排列。

{% archiveList archives with moduleId="1" type="page" order="CreatedTime desc" limit="10" %}
    {# 循环体将在第三步填充 #}
{% endarchiveList %}

在这段代码中:

  • archives 是我们定义的一个变量名,用来存储获取到的文章列表数据。
  • moduleId="1" 告诉系统获取文章模型下的内容。
  • type="page" 启用分页模式,这为后续添加分页导航做准备。
  • order="CreatedTime desc" 是实现按发布时间降序排序的关键。
  • limit="10" 则表示每页显示 10 篇文章。

第三步:循环展示文章内容并格式化时间

获取到文章数据后,我们需要通过 for 循环遍历 archives 变量,将每篇文章的标题、链接、发布时间等信息展示出来。

{% archiveList archives with moduleId="1" type="page" order="CreatedTime desc" limit="10" %}
    {% for item in archives %}
    <article class="article-item">
        <h2><a href="{{ item.Link }}">{{ item.Title }}</a></h2>
        <div class="article-meta">
            <span>发布时间:{{ stampToDate(item.CreatedTime, "2006-01-02 15:04") }}</span>
            <span>浏览量:{{ item.Views }}</span>
            {# 您还可以显示文章简介、分类等信息 #}
            <p>{{ item.Description }}</p>
        </div>
    </article>
    {% empty %}
    <p>抱歉,目前没有找到任何文章。</p>
    {% endfor %}
{% endarchiveList %}

这里:

  • {% for item in archives %} 遍历文章列表,item 代表当前循环到的文章对象。
  • {{ item.Link }}{{ item.Title }} 分别输出了文章的链接和标题。
  • {{ stampToDate(item.CreatedTime, "2006-01-02 15:04") }} 使用 stampToDate 函数将 CreatedTime(时间戳)格式化为 “年-月-日 时:分” 的可读形式。请注意,"2006-01-02 15:04" 是 Go 语言特有的日期时间格式化模板,代表 参考时间,不能随意更改
  • {% empty %} 块是一个非常实用的特性,当 archives 列表为空时,它会显示其中的内容,而不是空荡荡的页面。

第四步:添加分页功能(可选但强烈推荐)

如果您的文章数量较多,分页功能将极大地提升用户体验。AnQiCMS 提供了 pagination 标签,可以与 archiveListtype="page" 参数无缝衔接。

{% endarchiveList %} 标签之后,添加以下分页代码:

{# ... 文章列表循环结束 ... #}

<div class="pagination-container">
    {% pagination pages with show="5" %}
        {# 首页链接 #}
        <a class="page-link {% if pages.FirstPage.IsCurrent %}active{% endif %}" href="{{pages.FirstPage.Link}}">{{pages.FirstPage.Name}}</a>
        {# 上一页链接 #}
        {% if pages.PrevPage %}
        <a class="page-link" href="{{pages.PrevPage.Link}}">{{pages.PrevPage.Name}}</a>
        {% endif %}
        {# 中间页码 #}
        {% for pageItem in pages.Pages %}
        <a class="page-link {% if pageItem.IsCurrent %}active{% endif %}" href="{{pageItem.Link}}">{{pageItem.Name}}</a>
        {% endfor %}
        {# 下一页链接 #}
        {% if pages.NextPage %}
        <a class="page-link" href="{{pages.NextPage.Link}}">{{pages.NextPage.Name}}</a>
        {% endif %}
        {# 尾页链接 #}
        <a class="page-link {% if pages.LastPage.IsCurrent %}active{% endif %}" href="{{pages.LastPage.Link}}">{{pages.LastPage.Name}}</a>
    {% endpagination %}
</div>

这里:

  • pagespagination 标签自动生成的包含分页信息的变量。