在AnQiCMS中高效地展示文章列表,并支持多种排序、筛选与分页方式,是内容管理的核心环节。理解其模板标签的灵活运用,能帮助您构建出高度定制化且用户体验友好的内容展示页面。
要实现这一目标,我们主要依赖AnQiCMS强大的模板标签体系,特别是核心的archiveList 标签,配合pagination 标签以及各种辅助性过滤器和逻辑控制。
一、核心:archiveList 标签的使用
archiveList 标签是获取和展示文章(或其他内容模型)列表的基础。它如同一个数据查询器,能够根据您设定的条件从数据库中提取文章。
在模板中,您可以这样引入并使用它:
{% archiveList archives with type="list" limit="10" %}
{# 在这里循环展示每篇文章的详细信息 #}
{% endarchiveList %}
在这里,archives 是您自定义的一个变量名,用于存储获取到的文章列表。type="list" 表示我们获取的是一个固定数量的文章列表。limit="10" 则限定了只显示最新的10篇文章。
在 {% for item in archives %} 这样的循环中,item 变量会包含每篇文章的多种信息,例如 item.Title(标题)、item.Link(链接)、item.Description(简介)、item.Views(浏览量)和 item.CreatedTime(发布时间)等。这些字段可以被灵活地用于构建列表的显示内容。
二、实现文章列表的灵活展示
仅仅展示固定数量的文章列表是不够的,我们需要能够根据用户的需求或运营策略,对文章进行排序和筛选。
1. 智能排序
archiveList 标签提供了 order 参数,让您可以轻松地控制文章的排列顺序。
- 按发布时间排序: 默认情况下,文章通常按ID降序(即最新发布)排列,您可以显式指定
order="id desc"。 - 按浏览量排序: 如果您想展示热门文章,可以设置为
order="views desc"。 - 按后台自定义排序: 某些内容可能需要人工干预排序,AnQiCMS支持
order="sort desc"。
例如,要显示10篇浏览量最高的文章:
{% archiveList archives with type="list" limit="10" order="views desc" %}
{# 循环展示文章 #}
{% endarchiveList %}
2. 丰富的筛选方式
筛选功能是内容展示个性化的关键。AnQiCMS提供了多种筛选途径。
基于分类与属性筛选: 您可以使用
categoryId参数来显示特定分类下的文章,例如categoryId="1"。如果文章被赋予了推荐属性(如头条[h]、推荐[c]等),则可以通过flag="c"参数来筛选。如果您希望排除某些分类或属性,还可以使用excludeCategoryId和excludeFlag参数。例如,显示文章模型(
moduleId="1")下,ID为5的分类中的所有推荐文章:{% archiveList articles with moduleId="1" categoryId="5" flag="c" type="list" %} {# 循环展示推荐文章 #} {% endarchiveList %}全文搜索筛选: 对于用户输入的搜索关键词,
archiveList的q参数能够派上用场。通常,搜索页面会将用户输入的关键词通过URL参数q传递,archiveList会自动捕获并根据文章标题进行匹配。例如,搜索结果页面:
{% archiveList searchResults with type="page" q=urlParams.q %} {# 循环展示搜索结果 #} {% endarchiveList %}(
urlParams.q会自动获取URL中?q=关键词的关键词部分)高级自定义参数筛选: AnQiCMS最强大的筛选功能之一是支持基于内容模型自定义字段的筛选。这对于构建垂直领域网站(如房产、招聘、商品)非常有用。您可以在后台为内容模型添加诸如“户型”、“薪资范围”、“品牌”等自定义字段,并将其设置为可筛选。
要实现这种筛选,我们需要用到
archiveFilters标签来生成筛选条件,然后archiveList会自动响应这些条件。archiveFilters标签会返回一个包含每个筛选维度及其可选值的列表,并且会根据当前URL参数自动标记已选中的筛选项。例如,在房产网站中,您可以根据“户型”和“区域”进行筛选:
{# 生成筛选条件 #} {% archiveFilters filters with moduleId="1" allText="不限" %} {% for item in filters %} <div> <span>{{item.Name}}: </span> {% for val in item.Items %} <a href="{{val.Link}}" class="{% if val.IsCurrent %}active{% endif %}">{{val.Label}}</a> {% endfor %} </div> {% endfor %} {% endarchiveFilters %} {# 结合筛选条件展示文章列表,archiveList会自动识别URL中的筛选参数 #} {% archiveList properties with type="page" moduleId="1" %} {# 循环展示房产列表 #} {% endarchiveList %}当用户点击筛选条件时,URL会自动携带相应的参数(如
?huxing=三室一厅&quyu=朝阳区),archiveList会根据这些参数动态调整查询结果。
三、精准控制分页显示
对于文章数量庞大的网站,分页是必不可少的功能。AnQiCMS将文章列表数据获取和分页链接的生成解耦,提供了清晰的实现路径。
要启用分页,首先在 archiveList 标签中将 type 参数设置为 "page":
{% archiveList articles with type="page" limit="10" %}
{# 循环展示当前页的文章 #}
{% endarchiveList %}
limit="10" 在这里表示每页显示10篇文章。
接下来,利用pagination 标签来渲染分页链接:
{% pagination pages with show="5" %}
<a href="{{pages.FirstPage.Link}}">首页</a>
{% if pages.PrevPage %}
<a href="{{pages.PrevPage.Link}}">上一页</a>
{% endif %}
{% for item in pages.Pages %}
<a href="{{item.Link}}" class="{% if item.IsCurrent %}active{% endif %}">{{item.Name}}</a>
{% endfor %}
{% if pages.NextPage %}
<a href="{{pages.NextPage.Link}}">下一页</a>
{% endif %}
<a href="{{pages.LastPage.Link}}">末页</a>
{% endpagination %}
pagination 标签会生成一个 pages 对象,其中包含当前页、总页数、首页、末页、上一页、下一页以及中间页码列表等信息。show="5" 参数控制了中间页码链接的最大显示数量。通过循环 pages.Pages,您可以构建出常见的分页导航。
四、结合其他标签提升列表信息维度
为了让文章列表更加丰富和实用,我们经常需要集成其他信息。
显示文章分类信息: 在文章列表中,除了文章标题,通常还需要显示其所属分类。虽然
item.CategoryId提供了分类ID,但要获取分类名称和链接,可以使用categoryDetail标签:<span>所属分类:{% categoryDetail with name="Title" id=item.CategoryId %}</span>格式化时间与日期: 文章的发布时间通常是时间戳格式,为了便于阅读,可以使用
stampToDate过滤器进行格式化:<span>发布时间:{{stampToDate(item.CreatedTime, "2006-01-02")}}</span>其中的 “2006-01-02” 是Go语言的时间格式化标准,代表“年-月-日”。
展示文章标签: 如果文章关联了标签,可以使用
tagList标签来获取并展示:{% tagList tags with itemId=item.Id %} {% for tag in tags %} <a href="{{tag.Link}}">{{tag.Title}}</a> {% endfor %} {% endtagList %}访问自定义字段: 当内容模型定义了额外的自定义字段时,可以通过
archiveParams标签或直接通过 `item.自定义字段名