如何利用 AnQiCMS 的 `pagination` 标签在文章列表页实现分页导航功能?

📅 👁️ 74

在网站内容运营中,文章列表页的分页导航是提升用户体验和优化搜索引擎抓取效率的关键环节。AnQiCMS 作为一个功能丰富的企业级内容管理系统,为我们提供了简洁高效的 pagination 标签,让实现这一功能变得轻而易举。接下来,我们将详细探讨如何在 AnQiCMS 的文章列表页中,利用 pagination 标签实现分页导航功能。

理解分页导航的核心机制

在 AnQiCMS 中实现分页导航,主要依赖于两个核心模板标签的协同工作:archiveList 标签用于从数据库中检索文章列表数据,而 pagination 标签则负责根据 archiveList 生成的分页信息,渲染出用户界面上的分页链接。

要让这两个标签顺利配合,关键在于 archiveList 标签的一个特定参数:type="page"。当 archiveList 设置为 type="page" 时,它不仅会获取指定数量的文章,还会同时计算出总文章数、总页数、当前页码等一系列分页所需的数据,并将这些数据封装成一个 pages 对象。这个 pages 对象,正是 pagination 标签进行分页导航渲染的数据来源。

第一步:准备文章列表数据 (archiveList)

首先,我们需要在文章列表页的模板文件(例如:archive/list.htmltag/list.html)中,使用 archiveList 标签来获取文章数据并告知系统需要进行分页。

在您的模板中,您可以使用如下方式调用 archiveList

{% archiveList archives with type="page" limit="10" %}
    {# 在这里循环显示文章列表内容 #}
    {% for item in archives %}
    <div class="article-item">
        <a href="{{item.Link}}">
            <h2>{{item.Title}}</h2>
            <p>{{item.Description}}</p>
            <small>{{stampToDate(item.CreatedTime, "2006-01-02")}} | 阅读量: {{item.Views}}</small>
        </a>
    </div>
    {% empty %}
    <p>当前分类下还没有文章哦。</p>
    {% endfor %}
{% endarchiveList %}

这里,我们通过 archiveList 标签定义了一个名为 archives 的变量来存储文章数据。其中:

  • type="page":明确告诉系统,这个列表需要进行分页处理。
  • limit="10":指定每页显示的文章数量为10篇。您可以根据实际需求调整这个数字。

archiveListtype="page" 模式运行时,它会自动生成一个全局可用的 pages 变量(如果您未给 archiveList 定义变量名,那么 pagination 标签可以直接使用 pages 变量;如果像示例中定义了 archives,则 pagination 标签会使用 pages 变量,这是 AnQiCMS 内部约定好的)。这个 pages 变量将包含所有分页所需的信息。

第二步:引入分页导航 (pagination)

接下来,在 archiveList 标签块的外部(通常是在文章列表下方),我们就可以使用 pagination 标签来渲染分页导航了。

<nav class="pagination-container">
    {% pagination pages with show="5" %}
    <ul class="pagination-list">
        {# 显示总条数、总页数、当前页码等信息 #}
        <li class="info">共 {{pages.TotalItems}} 篇文章,{{pages.TotalPages}} 页,当前第 {{pages.CurrentPage}} 页</li>

        {# 首页链接 #}
        {% if pages.FirstPage %}
            <li class="page-item {% if pages.FirstPage.IsCurrent %}active{% endif %}">
                <a href="{{pages.FirstPage.Link}}">{{pages.FirstPage.Name}}</a>
            </li>
        {% endif %}

        {# 上一页链接 #}
        {% if pages.PrevPage %}
            <li class="page-item">
                <a href="{{pages.PrevPage.Link}}">{{pages.PrevPage.Name}}</a>
            </li>
        {% endif %}

        {# 中间页码链接 #}
        {% for item in pages.Pages %}
            <li class="page-item {% if item.IsCurrent %}active{% endif %}">
                <a href="{{item.Link}}">{{item.Name}}</a>
            </li>
        {% endfor %}

        {# 下一页链接 #}
        {% if pages.NextPage %}
            <li class="page-item">
                <a href="{{pages.NextPage.Link}}">{{pages.NextPage.Name}}</a>
            </li>
        {% endif %}

        {# 尾页链接 #}
        {% if pages.LastPage %}
            <li class="page-item {% if pages.LastPage.IsCurrent %}active{% endif %}">
                <a href="{{pages.LastPage.Link}}">{{pages.LastPage.Name}}</a>
            </li>
        {% endif %}
    </ul>
    {% endpagination %}
</nav>

在这个 pagination 标签块中:

  • pages:这是 archiveList 标签在 type="page" 模式下自动生成的包含分页信息的对象。
  • show="5":这个参数决定了在分页导航中最多同时显示5个页码按钮(例如:1, 2, 3, 4, 5 或 …, 3, 4, 5, 6, …)。您可以根据界面设计调整这个值。
  • pages.TotalItems, pages.TotalPages, pages.CurrentPage:直接获取总条目数、总页数和当前页码。
  • pages.FirstPage, pages.LastPage, pages.PrevPage, pages.NextPage:这些是包含首页、尾页、上一页和下一页链接的对象。它们内部有 Link (链接地址) 和 Name (显示名称,如”首页”、”上一页”) 属性,以及 IsCurrent 属性来判断是否为当前页。
  • pages.Pages:这是一个数组,包含了中间的页码链接。我们通过 {% for item in pages.Pages %} 循环遍历它,item.Link 提供页码链接,item.Name 提供页码数字,item.IsCurrent 用于标记当前页。

完整代码示例

将上述两个部分结合起来,一个完整的带有分页导航的文章列表页模板大致如下:

”`twig {# 假设这是一个名为 list.html 的模板文件 #} <!DOCTYPE html>

<meta charset="UTF-8">
<title>{% tdk with name="Title" siteName=true %}</title>
<meta name="description" content="{% tdk with name="Description" %}">
<link rel="stylesheet" href="{% system with name="TemplateUrl" %}/css/style.css">

<header>
    <h1>{% tdk with name="Title" %}</h1>
</header>

<main class="container">
    <section class="article-list">
        {% archiveList archives with type="page" limit="10" %}
            {% for item in archives %}
            <article class="article-item">
                <a href="{{item.Link}}">
                    <h3>{{item.Title}}</h3>
                    <p>{{item.Description}}</p>
                    <div class="meta">
                        <span>发布日期: {{stampToDate(item.CreatedTime, "2006-01-02")}}</span>
                        <span>浏览量: {{item.Views}}</span>
                    </div>
                </a>
            </article>
            {% empty %}
            <p>当前分类下还没有文章哦。</p>
            {% endfor %}
        {% endarchiveList %}
    </section>

    {# 分页导航区域 #}
    <nav class="pagination-container">
        {% pagination pages with show="5" %}
        <ul class="pagination-list">
            <li class="info">共 {{pages.TotalItems}} 篇文章,{{pages.TotalPages}} 页,当前第 {{pages.CurrentPage}} 页</li>

            {% if pages.FirstPage %}
                <li class="page-item {% if pages.FirstPage.IsCurrent %}active{% endif %}">
                    <a href="{{pages.FirstPage.Link}}">{{pages.FirstPage.Name}}</a>
                </li>
            {% endif %}

            {% if pages.PrevPage %}
                <li class="page-item">
                    <a href="{{pages.PrevPage

相关文章

AnQiCMS 模板中如何对图片进行缩略图处理,并显示不同尺寸的图片?

在AnQiCMS中管理网站内容时,图片处理无疑是提升用户体验和页面加载速度的关键一环。一个网站如果能根据不同展示场景,智能地呈现合适尺寸的图片缩略图,不仅能大幅提高页面响应速度,还能让视觉布局更加协调美观。安企CMS为此提供了强大而灵活的图片缩略图处理机制,无论是通过后台统一设置,还是在前端模板中按需调用,都能轻松实现。 ### 后台内容设置

2025-11-09

如何在 AnQiCMS 文档详情页显示文章所属的分类名称和分类链接?

在 AnQiCMS 中管理内容,我们常常希望访问者在浏览文档详情时,能清晰地看到这篇文章所属的分类名称,并且能够方便地点击分类链接,进一步探索同一分类下的更多内容。这不仅能优化用户体验,让网站结构更直观,也有助于搜索引擎更好地理解网站内容层级,提升SEO效果。 要在 AnQiCMS 的文档详情页实现这一功能,我们需要对模板文件进行一些简单的修改。AnQiCMS 采用类似 Django

2025-11-09

AnQiCMS 如何确保多站点管理下,每个站点的页面内容独立显示?

AnQiCMS 在设计之初便充分考虑了企业和内容运营者对多站点管理的需求,并致力于提供一套高效、独立的解决方案。当您在 AnQiCMS 中创建多个站点时,系统通过一系列精巧的机制,确保每个站点的页面内容能够独立显示,互不干扰,同时又允许在需要时进行有限的跨站点内容交互。 ### 站点的逻辑隔离与数据独立 AnQiCMS 确保多站点内容独立显示的核心在于其对每个站点的逻辑隔离和数据管理

2025-11-09

在 AnQiCMS 模板中,如何对文章内容进行字数截取并显示“...”?

在 AnQiCMS 模板中,如何优雅地截取文章内容并显示“...”? 在网站内容运营中,我们经常需要在列表页、聚合页或搜索结果中展示文章、产品或单页内容的摘要。这些摘要不仅能让页面看起来更整洁,还能帮助访客快速了解内容梗概,从而决定是否点击阅读全文。然而,直接显示完整内容显然是不切实际的,这就引出了一个常见需求:如何对文章内容进行字数截取,并在末尾加上“...”来提示读者内容尚未结束

2025-11-09

AnQiCMS 模板如何根据用户组权限显示或隐藏特定内容?

在网站运营中,根据用户身份展示或隐藏特定内容是一种常见的策略,它能帮助我们实现会员专享、付费内容、内部信息分发等多种业务需求。AnQiCMS 提供了灵活的用户组管理功能,结合其强大的模板引擎,可以轻松实现基于用户组权限的内容控制。 ### 了解 AnQiCMS 的用户组机制 AnQiCMS 内置了完善的用户组管理与 VIP 系统。在后台,我们可以创建不同的用户组

2025-11-09

如何在 AnQiCMS 的评论列表中显示用户昵称、评论内容和发布时间?

在 AnQiCMS 中,评论功能是增强网站互动性的重要一环。如何将用户在网站上留下的宝贵评论清晰、美观地展示出来,是网站运营者关注的焦点。AnQiCMS 提供了灵活的模板标签,让我们能够轻松定制评论列表的显示,包括用户昵称、评论内容和发布时间等核心信息。 要实现评论列表的展示,我们主要会用到 AnQiCMS 的模板标签系统。这通常涉及编辑网站模板文件中的特定部分。 ### 1.

2025-11-09

AnQiCMS 模板中如何将时间戳格式化为“年-月-日 时:分”的显示格式?

在网站内容管理中,时间信息的清晰展示对于用户体验至关重要。无论是文章的发布日期,还是评论的提交时间,一个符合阅读习惯的格式都能让信息传达更有效。AnQiCMS 提供了灵活的模板功能,让我们可以轻松地对时间戳进行格式化。 ### 核心功能:AnQiCMS 的时间戳格式化标签 `stampToDate` AnQiCMS 模板引擎内置了一个名为 `stampToDate` 的标签

2025-11-09

如何在 AnQiCMS 网站中显示针对不同语言用户的 hreflang 标签?

在多语言网站的运营中,确保搜索引擎能够准确理解您的内容所针对的语言和地区,对于提升用户体验和搜索引擎优化(SEO)至关重要。`hreflang` 标签正是解决这一问题的关键工具。它告诉搜索引擎,您的网站上存在针对不同语言或地区的内容变体,从而避免重复内容问题,并帮助搜索引擎为不同语言用户展示最相关的页面。 AnQiCMS 作为一款支持多语言内容管理系统,已经为实现 `hreflang`

2025-11-09