在网站运营中,为内容列表提供清晰、易用的分页导航,不仅能极大提升用户体验,还能优化搜索引擎抓取效率,帮助内容更好地被发现。安企CMS(AnQiCMS)深知这一点,因此在模板设计中提供了强大而灵活的分页标签,让内容运营者能够轻松为文档列表、标签列表等生成分页导航。

接下来,我们将一起探讨如何在安企CMS的模板中实现这一功能,让你的网站内容组织得井井有条。


理解安企CMS的分页核心:数据获取与导航展示

在安企CMS中实现分页功能,主要围绕两个核心要素:

  1. 以分页形式获取内容列表:这需要使用特定的模板标签来指示系统,你希望获取的内容是分批次的,而不是一次性全部加载。
  2. 展示分页导航:一旦内容以分页形式返回,就需要一个导航组件来让访客在不同页面之间跳转。

下面,我们逐一来看这些步骤的具体实现。

第一步:获取分页内容列表

安企CMS提供了 archiveListtagDataList 等标签来获取不同类型的内容列表。要启用分页功能,关键在于在这些标签中加入 type="page" 参数和 limit 参数。

type="page" 是一个非常重要的指示符,它告诉安企CMS,你希望返回的数据是一个可分页的结果集。而 limit 参数则用于定义每页显示多少条内容。

例如,如果你想在一个分类页面显示文章列表并开启分页,可以这样使用 archiveList 标签:

{# 假设我们正在一个分类页面,要获取该分类下的文章列表,每页显示10条 #}
{% archiveList archives with type="page" limit="10" %}
    {% for item in archives %}
        <div class="article-item">
            <h2><a href="{{item.Link}}">{{item.Title}}</a></h2>
            <p>{{item.Description}}</p>
            <span class="date">{{stampToDate(item.CreatedTime, "2006-01-02")}}</span>
        </div>
    {% empty %}
        <p>该分类下暂时没有文章。</p>
    {% endfor %}
{% endarchiveList %}

在上述代码中:

  • archives 是一个你自定义的变量名,用于存储分页后的文章数据。
  • type="page" 明确指定了这是一次分页查询。
  • limit="10" 则设置了每页显示 10 篇文章。

类似地,如果你想展示某个具体标签下的文档列表并开启分页,可以使用 tagDataList 标签,它的用法与 archiveList 类似,同样需要 type="page"limit 参数。

第二步:展示分页导航

获取到分页内容后,下一步就是添加实际的分页导航链接了。安企CMS为此提供了一个非常方便的 pagination 标签。这个标签会根据当前页面的分页数据,自动生成“首页”、“上一页”、“下一页”以及中间页码等链接。

pagination 标签通常会与 show 参数一起使用,这个参数用于控制中间页码链接显示的页数。例如,show="5" 就会在当前页附近显示最多 5 个页码链接,保证导航的简洁性。

在使用 pagination 标签时,你需要定义一个变量(例如 pages)来接收分页对象,这个对象包含了当前分页状态的所有信息:

  • pages.TotalItems:总共的内容条数。
  • pages.TotalPages:总页码数。
  • pages.CurrentPage:当前所在的页码。
  • pages.FirstPage:首页对象(包含 LinkIsCurrent 属性)。
  • pages.LastPage:尾页对象(包含 LinkIsCurrent 属性)。
  • pages.PrevPage:上一页对象(如果存在)。
  • pages.NextPage:下一页对象(如果存在)。
  • pages.Pages:一个数组,包含中间页码的对象(每个对象同样有 NameLinkIsCurrent)。

以下是 pagination 标签的一个典型用法示例:

<div class="pagination-nav">
    {% pagination pages with show="5" %}
        {# 可以显示一些分页概览信息 #}
        <span class="page-info">共 {{pages.TotalItems}} 条内容,{{pages.TotalPages}} 页,当前第 {{pages.CurrentPage}} 页</span>

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

        {# 上一页链接 - 仅当存在上一页时显示 #}
        {% if pages.PrevPage %}
            <a class="page-link" href="{{pages.PrevPage.Link}}">上一页</a>
        {% endif %}

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

        {# 下一页链接 - 仅当存在下一页时显示 #}
        {% if pages.NextPage %}
            <a class="page-link" href="{{pages.NextPage.Link}}">下一页</a>
        {% endif %}

        {# 尾页链接 #}
        <a class="page-link {% if pages.LastPage.IsCurrent %}active{% endif %}" href="{{pages.LastPage.Link}}">尾页</a>
    {% endpagination %}
</div>

通过灵活组合 pages 对象中的属性,你可以构建出各种样式和布局的分页导航。例如,你可以判断 pages.FirstPage.IsCurrent 来为当前页的链接添加 active 类,以便通过 CSS 进行高亮显示。

综合示例:为文档列表添加分页

将上述两个步骤结合起来,一个完整的带有分页的文档列表页面在模板中可能会是这样的:

”`twig {# /template/{模型table}/list.html 或 /template/search/index.html #}

{% archiveList archives with type="page" limit="10" %}
    {% for item in archives %}
        <article class="article-card">
            <h3><a href="{{item.Link}}">{{item.Title}}</a></h3>
            <p class="description">{{item.Description|truncatechars:150}}</p>
            <div class="meta-info">
                <span>发布于:{{stampToDate(item.CreatedTime, "2006-01-02")}}</span>
                <span>阅读量:{{item.Views}}</span>
            </div>
        </article>
    {% empty %}
        <p class="no-content">抱歉,这里还没有相关内容。</p>
    {% endfor %}
{% endarchiveList %}

{% pagination pages with show="5" %}
    <nav aria-label="Page navigation">
        <ul class="pagination-list">
            <li class="page-item {% if pages.FirstPage.IsCurrent %}active{% endif %}">
                <a class="page-link" href="{{pages.FirstPage.Link}}" aria-label="首页">首页</a>
            </li>
            {% if pages.Prev