在AnQiCMS中,文章列表的分页显示是内容运营中非常常见且重要的功能。它不仅能让访客更方便地浏览大量内容,提升用户体验,对于搜索引擎优化(SEO)也有着不可忽视的作用,可以帮助搜索引擎更好地抓取和索引网站内容。
AnQiCMS作为一个高效、可定制的内容管理系统,在设计之初就充分考虑了这一点,因此实现文章列表的分页功能非常直观和灵活。这主要得益于它强大的模板标签系统,特别是archiveList和pagination这两个核心标签。
核心标签:文章列表与分页
要在您的网站上展示文章列表并带有分页导航,您需要用到两个主要的模板标签:
archiveList标签:这个标签用于从数据库中获取文章(或其他自定义模型内容)的列表数据。在实现分页时,我们需要告诉它以“分页模式”来获取数据,并指定每页显示多少条内容。pagination标签:这个标签则负责根据archiveList提供的数据,生成美观且功能完整的分页导航链接,包括首页、上一页、下一页、末页以及中间的页码。
接下来,我们将详细了解如何在您的AnQiCMS模板中应用这些标签。
第一步:准备您的模板文件
通常,文章列表页会对应您的某个分类页面,或者是一个专门的搜索结果页、标签页等。在AnQiCMS中,模板文件通常存放在/template目录下您所选用的模板文件夹内。例如,如果您想为某个分类的文章列表制作模板,它可能位于{模型table}/list.html,比如article/list.html。
在这些模板文件中,您将使用AnQiCMS支持的类似Django模板引擎的语法来编写代码。
第二步:使用 archiveList 标签获取文章数据
要实现分页,首先需要使用archiveList标签来获取文章列表。关键在于设置type="page"参数,这会告诉系统您需要分页的数据,而不是一次性列出所有数据。同时,通过limit参数来定义每页显示的文章数量,例如limit="10"表示每页显示10篇文章。
一个基础的archiveList标签用法可能像这样:
{# page 分页列表展示 #}
<div>
{% archiveList archives with type="page" limit="10" %}
{% for item in archives %}
<li>
<a href="{{item.Link}}">
<h5>{{item.Title}}</h5>
<div>{{item.Description}}</div>
<div>
<span>{% categoryDetail with name="Title" id=item.CategoryId %}</span>
<span>{{stampToDate(item.CreatedTime, "2006-01-02")}}</span>
<span>{{item.Views}} 阅读</span>
</div>
</a>
{% if item.Thumb %}
<a href="{{item.Link}}">
<img alt="{{item.Title}}" src="{{item.Thumb}}">
</a>
{% endif %}
</li>
{% empty %}
<li>
该列表没有任何内容
</li>
{% endfor %}
{% endarchiveList %}
</div>
在这个示例中:
archiveList archives with type="page" limit="10":我们定义了一个名为archives的变量来存储文章列表数据,并指定了分页模式(type="page")和每页10条内容(limit="10")。{% for item in archives %}:我们遍历archives数组,item变量代表每一篇文章。{{item.Link}}、{{item.Title}}、{{item.Description}}:这些是文章常见的字段,分别对应文章链接、标题和简介。AnQiCMS的文章模型还提供了如Views(浏览量)、Thumb(缩略图)等丰富字段供您调用。{{stampToDate(item.CreatedTime, "2006-01-02")}}:CreatedTime通常是一个时间戳,这里我们使用了AnQiCMS内置的stampToDate过滤器将其格式化为年-月-日的日期形式,让显示更友好。
如果当前分类下没有文章,{% empty %}标签内的内容会显示,告诉访客“该列表没有任何内容”。
第三步:使用 pagination 标签构建分页导航
在archiveList标签的下方,紧接着使用pagination标签,它会根据archiveList获取的分页数据,自动生成分页导航。
{# 分页代码 #}
<div>
{% pagination pages with show="5" %}
{# 首页 #}
<a class="{% if pages.FirstPage.IsCurrent %}active{% endif %}" href="{{pages.FirstPage.Link}}">{{pages.FirstPage.Name}}</a>
{# 上一页 #}
{% if pages.PrevPage %}
<a href="{{pages.PrevPage.Link}}">{{pages.PrevPage.Name}}</a>
{% endif %}
{# 中间多页 #}
{% for item in pages.Pages %}
<a class="{% if item.IsCurrent %}active{% endif %}" href="{{item.Link}}">{{item.Name}}</a>
{% endfor %}
{# 下一页 #}
{% if pages.NextPage %}
<a href="{{pages.NextPage.Link}}">{{pages.NextPage.Name}}</a>
{% endif %}
{# 尾页 #}
<a class="{% if pages.LastPage.IsCurrent %}active{% endif %}" href="{{pages.LastPage.Link}}">{{pages.LastPage.Name}}</a>
{% endpagination %}
</div>
这里:
{% pagination pages with show="5" %}:我们定义了一个名为pages的变量来承载分页信息。show="5"参数表示在分页导航中最多显示5个页码链接(不包括首页、上一页、下一页、末页),这有助于保持分页导航的简洁性。pages变量中包含了丰富的分页信息,例如:pages.FirstPage:首页的链接和名称。pages.PrevPage:上一页的链接和名称,仅当存在上一页时显示。pages.Pages:一个包含所有中间页码链接的数组,我们通过{% for item in pages.Pages %}循环来逐一显示它们。pages.NextPage:下一页的链接和名称,仅当存在下一页时显示。pages.LastPage:末页的链接和名称。
{% if pages.FirstPage.IsCurrent %}active{% endif %}:IsCurrent属性可以帮助您判断当前页码,从而为当前页添加CSS样式,例如高亮显示。
将这两个标签组合起来,您的文章列表分页功能就基本完成了。别忘了为分页导航添加适当的CSS样式,使其在视觉上更符合您的网站设计。
进阶应用
- 结合筛选与搜索:
archiveList标签还支持q参数进行关键词搜索,以及通过URL查询参数实现自定义字段筛选(例如moduleId、categoryId)。当您在搜索页或带有筛选条件的列表页使用type="page"时,pagination标签也会智能地保留这些筛选和搜索参数,确保分页链接的正确性。 - 排序控制:通过
order参数,您可以控制文章的排序方式,例如按发布时间(order="id desc")或浏览量(order="views desc")排序。 - 灵活的伪静态配置:AnQiCMS提供了强大的伪静态规则管理功能,您可以自定义分页链接的URL结构,这对于SEO非常有利。您可以在后台的“功能管理”->“伪静态规则”中进行配置。
通过这些灵活的标签和配置选项,AnQiCMS让网站内容的分页显示变得简单而高效,无论您是运营中小企业网站、自媒体平台还是多站点管理,都能轻松驾驭,为用户提供流畅的浏览体验。
常见问题 (FAQ)
1. 为什么我的文章列表分页导航没有显示出来?
通常,这可能是因为以下几个原因:
archiveList标签未设置type="page":请确保您的archiveList标签中包含了type="page"参数。如果没有这个参数,系统会默认获取一个不带分页的列表数据,pagination标签就无法找到分页信息来生成导航。archiveList和pagination标签变量名不匹配:pagination标签依赖于archiveList标签生成的分页数据。请检查两个标签是否使用了相同的变量名来传递数据,例如都使用archives和pages。- 内容不足以触发分页:如果您的文章数量少于
limit参数设置的每页显示数量,或者总页数只有一页,那么分页导航是不会显示的。请确保您有足够多的文章来测试分页功能。
2. 如何调整每页显示的文章数量和分页链接的个数?
- **调整每页显示的文章数量