在AnQiCMS中构建一个充满活力的网站,内容列表的展示是不可或缺的一环。无论是展示最新发布的文章、热门产品,还是特定分类下的内容,AnQiCMS强大的模板引擎都能帮助我们轻松实现。本文将深入探讨如何在AnQiCMS中获取并循环显示文章或产品的列表,助您灵活构建多样化的内容展示页面。
认识AnQiCMS的内容列表机制
AnQiCMS采用了类似Django的模板引擎语法,让内容展示变得直观且易于掌握。在AnQiCMS中,文章和产品都被视为内容的一种,它们共同使用一套灵活的内容模型体系。这意味着我们可以用统一的方式来获取和展示不同类型的内容列表。
核心的模板标签是我们操作内容的入口,它们通常以{% tag %}的形式出现,而要输出的变量则用{{ variable }}包裹。对于循环展示内容,for循环标签是我们的得力助手。
获取文章或产品列表:核心标签archiveList
要获取文章或产品的列表,archiveList标签是您的首选。这个标签非常灵活,能够根据您的需求筛选、排序和限制内容。
使用archiveList标签时,通常会指定一个变量名来存储获取到的内容列表,例如archives或products。基本的结构如下:
{% archiveList archives with moduleId="1" limit="5" %}
{% for item in archives %}
{# 在这里展示每个内容项的详细信息 #}
{% endfor %}
{% endarchiveList %}
接下来,我们详细了解archiveList的一些常用参数,它们是定制内容列表的关键:
moduleId:指定内容模型 AnQiCMS支持自定义内容模型,常见的有文章模型(通常moduleId="1")和产品模型(通常moduleId="2")。通过这个参数,您可以明确指定要获取哪种类型的内容。- 例如,获取文章列表:
moduleId="1" - 例如,获取产品列表:
moduleId="2"
- 例如,获取文章列表:
categoryId:筛选特定分类 如果您只想显示某个或某些特定分类下的内容,可以使用categoryId。您可以传入单个分类的ID,也可以用逗号分隔传入多个ID。- 例如,获取分类ID为10的文章:
categoryId="10" - 例如,获取分类ID为10、12、15的产品:
categoryId="10,12,15" - 如果您希望它不自动读取当前页面分类的ID,而是获取全站内容,可以设置为
categoryId="0"。
- 例如,获取分类ID为10的文章:
limit:控制显示数量或分页范围limit参数用于限制显示的内容数量。它有两种工作模式:- 限制数量:
limit="5"将只显示前5条内容。 - 偏移模式:
limit="2,10"将从第2条内容开始,获取接下来的10条内容(常用于“从…开始显示”的场景)。
- 限制数量:
order:指定排序方式 内容的显示顺序非常重要。order参数允许您根据多种条件进行排序:id desc:按内容ID倒序排列(最新发布的内容在前)。views desc:按浏览量倒序排列(热门内容在前)。sort desc:按后台设置的自定义排序字段倒序排列。
type:列表类型决定功能type参数定义了列表的用途,这会影响到其他参数的生效方式:type="list":默认模式,只显示limit指定数量的内容,不带分页。type="page":分页模式,结合pagination标签可以实现完整的翻页功能。type="related":相关内容模式,通常用于详情页,自动查找与当前内容相关的其他内容。
flag:筛选推荐属性 在后台发布内容时,可以为内容设置多种推荐属性(如头条[h]、推荐[c]、幻灯[f]等)。通过flag参数,您可以只显示具有特定属性的内容。- 例如,只显示“推荐”属性的文章:
flag="c" - 您也可以使用
excludeFlag来排除特定属性的内容。
- 例如,只显示“推荐”属性的文章:
q:搜索关键词 当type="page"时,q参数可以用于搜索内容标题中包含特定关键词的内容。如果您在URL中包含?q=关键词的参数,AnQiCMS也会自动读取并应用搜索。
循环遍历与数据访问
一旦使用archiveList获取到内容列表,您就可以通过{% for item in archives %}这样的结构来逐一访问列表中的每个内容项。在循环内部,item就是当前的内容对象,您可以访问它的各种属性,例如:
{{ item.Id }}:内容ID{{ item.Title }}:内容标题{{ item.Link }}:内容链接{{ item.Description }}:内容摘要/描述{{ item.Thumb }}:内容缩略图{{ item.Logo }}:内容封面大图{{ item.Views }}:内容浏览量{{ stampToDate(item.CreatedTime, "2006-01-02") }}:格式化后的发布时间(stampToDate是日期格式化标签,"2006-01-02"是Go语言的时间格式化标准)
示例:展示最新文章标题和链接
<div class="latest-articles">
<h3>最新文章</h3>
<ul>
{% archiveList articles with moduleId="1" order="id desc" limit="5" %}
{% for item in articles %}
<li><a href="{{ item.Link }}">{{ item.Title }}</a></li>
{% empty %}
<li>暂无文章</li>
{% endfor %}
{% endarchiveList %}
</ul>
</div>
实现分页功能:pagination标签
对于内容量较大的列表,分页是提升用户体验的关键。当archiveList标签的type参数设置为"page"时,它会配合pagination标签一同工作,实现完整的分页导航。
pagination标签的使用方式:
{% pagination pages with show="5" %}
{# 在这里组织分页链接,例如上一页、下一页、页码等 #}
{% endpagination %}
pagination标签会创建一个pages对象,其中包含丰富的分页信息:
pages.TotalItems:总内容数量pages.TotalPages:总页数- `pages.Current