在网站运营中,为内容列表提供清晰、易用的分页导航,不仅能极大提升用户体验,还能优化搜索引擎抓取效率,帮助内容更好地被发现。安企CMS(AnQiCMS)深知这一点,因此在模板设计中提供了强大而灵活的分页标签,让内容运营者能够轻松为文档列表、标签列表等生成分页导航。
接下来,我们将一起探讨如何在安企CMS的模板中实现这一功能,让你的网站内容组织得井井有条。
理解安企CMS的分页核心:数据获取与导航展示
在安企CMS中实现分页功能,主要围绕两个核心要素:
- 以分页形式获取内容列表:这需要使用特定的模板标签来指示系统,你希望获取的内容是分批次的,而不是一次性全部加载。
- 展示分页导航:一旦内容以分页形式返回,就需要一个导航组件来让访客在不同页面之间跳转。
下面,我们逐一来看这些步骤的具体实现。
第一步:获取分页内容列表
安企CMS提供了 archiveList 和 tagDataList 等标签来获取不同类型的内容列表。要启用分页功能,关键在于在这些标签中加入 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:首页对象(包含Link和IsCurrent属性)。pages.LastPage:尾页对象(包含Link和IsCurrent属性)。pages.PrevPage:上一页对象(如果存在)。pages.NextPage:下一页对象(如果存在)。pages.Pages:一个数组,包含中间页码的对象(每个对象同样有Name、Link、IsCurrent)。
以下是 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