安企CMS(AnQiCMS)作为一个功能强大的内容管理系统,在构建网站时提供了灵活多样的内容展示方式。其中,分页功能对于内容量较大的列表页至关重要,它不仅提升了用户体验,也优化了网站性能。熟练运用 pagination 标签,能够帮助我们精确控制分页的显示逻辑,从而打造更加友好和专业的网站。
本文将深入探讨 pagination 标签的用法,重点讲解如何从中获取当前页码、总页数以及构建首页和末页的导航链接。
了解 pagination 标签的基本结构
在安企CMS中,pagination 标签通常与列表类标签(如 archiveList、tagDataList 或 commentList 等)配合使用,且这些列表标签必须设置 type="page" 模式,以启用分页功能。
pagination 标签的基本使用方式如下:
{% pagination pages with show="5" %}
{# 在这里放置你的分页逻辑 #}
{% endpagination %}
在这里,pages 是我们为分页数据定义的变量名,你可以根据自己的习惯为它命名。with show="5" 则是一个可选参数,用于指定分页导航中最多显示多少个页码链接。例如,show="5" 意味着最多会显示当前页周围的5个页码。
获取核心分页信息:当前页码、总页数和总条数
pagination 标签会对外暴露一个包含丰富分页信息的 pages 对象。通过这个对象,我们可以轻松获取到页面的关键数据:
- 当前页码 (
CurrentPage){{pages.CurrentPage}}可以直接输出用户当前所处的页码。这对于在页面上显示“第 X 页”这样的信息非常有用。 - 总页数 (
TotalPages){{pages.TotalPages}}则返回所有内容共分为多少页。这让用户对内容的整体规模有一个直观的了解。 - 总条数 (
TotalItems) 虽然不直接包含在标题问题中,但{{pages.TotalItems}}也是一个非常有用的属性,它表示列表中所有内容的条目总数。在很多场景下,我们可能需要在分页旁边显示“共 X 条记录”之类的提示。
这些信息通常用于向用户展示分页状态,例如:共 {{pages.TotalItems}} 条记录,分为 {{pages.TotalPages}} 页,当前是第 {{pages.CurrentPage}} 页。
构建灵活的导航链接:首页、末页、上一页、下一页及中间页码
除了基础的页码信息,pages 对象还提供了构建完整分页导航所需的所有链接和状态:
首页链接 (
FirstPage)pages.FirstPage是一个对象,包含Link(首页的URL)和Name(通常是“首页”或“Home”)。我们还可以通过pages.FirstPage.IsCurrent来判断当前是否正处于首页,从而为其添加高亮样式。末页链接 (
LastPage) 与首页类似,pages.LastPage也是一个对象,包含Link(末页的URL)和Name(通常是“末页”或“Last”)。pages.LastPage.IsCurrent用于判断当前是否是末页。上一页/下一页链接 (
PrevPage/NextPage)pages.PrevPage和pages.NextPage分别代表上一页和下一页的导航对象。它们同样包含Link和Name属性。需要注意的是,当处于第一页时PrevPage将不存在,而处于最后一页时NextPage将不存在。因此,在模板中引用它们时,需要进行条件判断,例如{% if pages.PrevPage %}。中间页码链接 (
Pages)pages.Pages是一个数组,包含了分页导航中显示的所有中间页码(即除了首页、末页、上一页、下一页之外的具体页码)。我们可以通过for循环遍历这个数组:{% for item in pages.Pages %} <a class="{% if item.IsCurrent %}active{% endif %}" href="{{item.Link}}">{{item.Name}}</a> {% endfor %}每个
item同样包含Name(页码数字,如“1”、“2”)、Link(对应页码的URL)和IsCurrent(是否为当前页)。
完整的分页导航示例代码
结合上述所有知识点,一个完整且功能丰富的分页导航代码示例如下:
<div class="pagination">
{# 使用 archiveList 标签获取分页数据,确保 type="page" #}
{% archiveList archives with type="page" limit="10" %}
{# 这里是你的列表内容,例如文章标题、摘要等 #}
{% for item in archives %}
<div class="article-item">
<a href="{{ item.Link }}">
<h3>{{ item.Title }}</h3>
<p>{{ item.Description|truncatechars:100 }}</p>
</a>
<span class="info">发布于:{{ stampToDate(item.CreatedTime, "2006-01-02") }}</span>
</div>
{% empty %}
<p>暂无内容。</p>
{% endfor %}
{% endarchiveList %}
{# 分页导航区域 #}
<div class="pagination-nav">
{% pagination pages with show="5" %}
<p class="pagination-summary">
共 <span>{{pages.TotalItems}}</span> 条,总 <span>{{pages.TotalPages}}</span> 页,当前第 <span>{{pages.CurrentPage}}</span> 页
</p>
<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 %}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 %}
{# 末页链接 #}
<li class="page-item {% if pages.LastPage.IsCurrent %}active{% endif %}">
<a href="{{pages.LastPage.Link}}">{{pages.LastPage.Name}}</a>
</li>
</ul>
{% endpagination %}
</div>
</div>
<style>
/* 简单的分页样式,实际项目中请根据需要调整 */
.pagination-nav ul {
list-style: none;
padding: 0;
display: flex;
justify-content: center;
margin-top: 20px;
}
.pagination-nav li {
margin: 0 5px;
}
.pagination-nav a {
display: block;
padding: 8px 12px;
border: 1px solid #ddd;
text-decoration: none;
color: #333;
border-radius: 4px;
}
.pagination-nav .active a,
.pagination-nav a:hover {
background-color: #007bff;
color: white;
border-color: #007bff;
}
.pagination-summary {
text-align: center;
margin-bottom: 15px;
color: #666;
}
.pagination-summary span {
font-weight: bold;
color: #333;
}
</style>
这段代码展示了如何使用 pagination 标签,并通过其提供的 pages 对象,灵活地构建出包含当前页码、总页数、总条数、首页、末页、上一页、下一页以及中间页码的完整分页导航。通过 IsCurrent 属性,我们可以轻松地为当前页添加高亮样式,进一步提升用户体验。
总结
`