如何为安企CMS模板中的文档列表创建可定制的页码分页组件?

📅 👁️ 67

在构建一个内容丰富的网站时,高效地展示和管理文档列表至关重要。尤其对于拥有大量内容的站点,一个设计合理、功能完善的页码分页组件不仅能大幅提升用户体验,还能优化网站的SEO表现,帮助搜索引擎更好地抓取和索引内容。安企CMS(AnQiCMS)凭借其灵活的模板引擎和强大的标签功能,让我们能够轻松为文档列表创建高度可定制的页码分页组件。

安企CMS的模板系统采用类似Django模板引擎的语法,通过{% 标签 %}来处理逻辑,{{ 变量 }}来输出内容。在实现分页功能时,我们主要会用到两个核心标签:archiveList(文档列表标签)和pagination(分页标签)。这两个标签协同工作,前者负责从数据库中按页获取文档数据,后者则基于这些数据生成可操作的页码导航。

第一步:准备分页数据源 - 使用 archiveList 标签

要创建一个可分页的文档列表,首先需要告诉安企CMS,我们希望以分页的形式获取数据。这通过archiveList标签的type="page"参数来实现。当type设置为page时,archiveList不再是简单地列出所有符合条件的文档,而是会根据当前页码和设定的每页显示数量来检索数据,并同时为pagination标签准备必要的分页信息。

例如,如果我们想获取某个分类下的文章列表,并希望每页显示10篇文章,模板代码可能看起来像这样:

{% archiveList archives with type="page" categoryId="1" limit="10" %}
    {% for item in archives %}
    <li>
        <a href="{{ item.Link }}">{{ item.Title }}</a>
        <p>{{ item.Description }}</p>
        <span>发布日期:{{ stampToDate(item.CreatedTime, "2006-01-02") }}</span>
    </li>
    {% empty %}
    <li>暂无内容</li>
    {% endfor %}
{% endarchiveList %}

在这段代码中,archives变量包含了当前页的文档数据,我们可以像处理普通列表一样遍历它。categoryId="1"指定了分类ID,limit="10"则设置了每页显示10篇文章。

第二步:构建分页导航组件 - 深入 pagination 标签

archiveList标签生成了分页数据后,紧接着就可以使用pagination标签来构建实际的页码导航了。pagination标签会自动获取由archiveList(或其他分页数据源标签)提供的分页上下文信息,并允许我们精细控制页码的显示方式。

pagination标签的使用方式通常是将其包裹在一个容器元素内,并且它会向其内部提供一个名为pages的对象,这个pages对象包含了所有与分页相关的详细信息,例如:

  • TotalItems:总文档数量
  • TotalPages:总页码数量
  • CurrentPage:当前页码
  • FirstPage:首页对象(包含NameLink
  • LastPage:末页对象(包含NameLink
  • PrevPage:上一页对象(包含NameLink
  • NextPage:下一页对象(包含NameLink
  • Pages:一个包含中间页码对象的数组,每个对象都有Name(页码数字)、Link(链接地址)和IsCurrent(是否当前页)属性。

pagination标签还支持一个非常实用的参数:showshow参数用于控制在页码导航中同时显示多少个页码链接,例如show="5"表示最多显示5个连续的页码。

现在,我们来看一个完整的、可定制的页码分页组件示例:

<div class="pagination-container">
    {% archiveList archives with type="page" categoryId="1" limit="10" %}
        <ul class="document-list">
        {% for item in archives %}
            <li>
                <h3><a href="{{ item.Link }}">{{ item.Title }}</a></h3>
                <p>{{ item.Description }}</p>
                <div class="meta">
                    <span>发布于:{{ stampToDate(item.CreatedTime, "2006年01月02日") }}</span>
                    <span>阅读量:{{ item.Views }}</span>
                </div>
            </li>
        {% empty %}
            <li class="no-content">当前分类暂无文档。</li>
        {% endfor %}
        </ul>

        {% pagination pages with show="7" %}
            <nav class="page-numbers">
                <ul>
                    {# 显示首页链接 #}
                    <li class="page-item {% if pages.FirstPage.IsCurrent %}active{% endif %}">
                        <a href="{{ pages.FirstPage.Link }}">{{ pages.FirstPage.Name }}</a>
                    </li>

                    {# 显示上一页链接 #}
                    {% 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 %}current{% 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 %}

                    {# 显示末页链接 #}
                    <li class="page-item {% if pages.LastPage.IsCurrent %}active{% endif %}">
                        <a href="{{ pages.LastPage.Link }}">{{ pages.LastPage.Name }}</a>
                    </li>
                </ul>
                <div class="page-info">
                    <span>总计 {{ pages.TotalItems }} 篇文档,共 {{ pages.TotalPages }} 页</span>
                    <span>当前第 {{ pages.CurrentPage }} 页</span>
                </div>
            </nav>
        {% endpagination %}
</div>

代码解析:

  • archiveList 标签: 外层首先使用archiveList获取需要分页的文档。type="page"是关键,它激活了分页模式。
  • pagination pages with show="7": 紧随其后,pagination标签被调用,并将分页数据赋值给pages变量。show="7"意味着除了首页、尾页、上一页、下一页之外,最多显示7个连续的页码数字。
  • 首页、末页、上一页、下一页: 通过pages.FirstPagepages.LastPagepages.PrevPagepages.NextPage对象,我们可以轻松地构建这些导航链接。{% if %}判断确保只有当这些页面存在时(例如,不是第一页时才显示上一页),链接才会被渲染出来。
  • 中间页码: {% for item in pages.Pages %}

相关文章

`commentList`标签如何判断评论是否正在审核中,并进行条件显示?

在网站运营中,评论是提升用户互动和社区活力的重要元素。然而,为了保障网站内容的健康与质量,对用户提交的评论进行审核是不可或缺的环节。在安企CMS中,我们如何灵活地展示这些评论,尤其是在它们尚处于审核阶段时,成为了许多运营者关心的问题。好在安企CMS的模板标签体系为我们提供了强大的控制力,特别是`commentList`标签,能够帮助我们轻松实现评论的条件显示。 ###

2025-11-08

如何在安企CMS模板中显示一个文档的评论列表,包括回复和分页功能?

在安企CMS中为文档内容添加评论列表,并使其具备回复和分页功能,能够极大地提升网站的用户互动性。用户可以就特定文档发表看法、进行讨论,这不仅丰富了内容生态,也为网站带来了更多活跃度。 ### 一、显示评论列表:构建互动的基础 要在文档页面显示评论,主要依赖安企CMS内置的`commentList`标签。这个标签能帮助我们轻松地获取到与当前文档关联的评论数据。 首先

2025-11-08

`guestbook`标签如何动态生成自定义字段的留言表单,并适配不同输入类型?

在安企CMS中管理网站留言是日常运营中常见的需求,特别是当我们需要收集特定信息时,一个能够灵活定制的留言表单就显得尤为重要。安企CMS充分考虑了这一需求,提供了强大的`guestbook`标签,让我们可以轻松动态生成包含自定义字段的留言表单,并适配多种输入类型。 ### 留言表单标签(`guestbook`)的力量 核心在于`guestbook`标签

2025-11-08

如何在`navList`循环中判断当前导航项是否为当前页面?

在网站运营中,清晰的导航结构对于提升用户体验至关重要。一个好的导航不仅能帮助访客快速找到所需信息,还能通过视觉提示(如高亮显示当前页面)指引用户,让他们始终明确自己所处的位置。在安企CMS中,实现这一功能是相当直观且高效的,这得益于其强大的模板标签系统。 ### 核心功能揭秘:`navList` 标签的 `IsCurrent`

2025-11-08

`pagination`标签如何获取当前页码、总页数和首页/末页链接?

安企CMS(AnQiCMS)作为一个功能强大的内容管理系统,在构建网站时提供了灵活多样的内容展示方式。其中,分页功能对于内容量较大的列表页至关重要,它不仅提升了用户体验,也优化了网站性能。熟练运用 `pagination` 标签,能够帮助我们精确控制分页的显示逻辑,从而打造更加友好和专业的网站。 本文将深入探讨 `pagination` 标签的用法,重点讲解如何从中获取当前页码

2025-11-08

如何在安企CMS模板中列出某个特定标签下的所有文档,并支持分页?

在内容管理系统中,有效地组织和展示文章是提升用户体验的关键。当内容通过标签进行细致分类时,我们常常需要在一个页面上列出某个特定标签下的所有文章,并且为了保持页面的整洁和加载速度,分页功能也变得不可或缺。安企CMS提供了强大且灵活的模板标签,让这一需求能够轻松实现。 本篇文章将详细介绍如何在安企CMS模板中,结合 `tagDataList` 标签和 `pagination` 标签

2025-11-08

如何在安企CMS模板中显示文档、分类或单页面关联的图片组(如Banner图集)?

在构建网站时,精美的图片组,如轮播Banner,是吸引访客目光、展示核心内容的重要元素。安企CMS(AnQiCMS)提供了灵活且强大的模板功能,让您可以轻松地将这些与文档、分类或单页面关联的图片组呈现在网站上。 本文将深入探讨如何在安企CMS的模板中,调用并展示这些图片组,帮助您更好地利用视觉内容提升网站的吸引力。 --- ###

2025-11-08

`dump`过滤器在安企CMS模板调试中有什么实际用途?

在安企CMS的模板开发和维护过程中,我们常常会遇到一些数据无法正确显示,或者变量结构与预期不符的情况。这时候,如何快速有效地查明问题所在,是摆在每一位模板开发者面前的挑战。幸运的是,安企CMS提供了一个极其有用的工具——`dump`过滤器,它能像“X光”一样,帮助我们透视模板中变量的真实面貌。 ### `dump`过滤器是什么? 顾名思义,`dump`过滤器就像一个数据探测器

2025-11-08