在安企CMS中,当我们希望在网站页面上展示一系列文章、产品或其他内容时,archiveList 标签是我们不可或缺的强大工具。它不仅能帮助我们灵活地提取和展示各类内容,还能根据多种条件进行精细筛选,并优雅地实现内容的分页显示,从而极大提升用户浏览体验和网站的信息组织效率。
灵活获取内容:archiveList 的基础用法
archiveList 标签的核心作用是获取指定的内容列表。最简单的使用方式,就像这样:
{% archiveList archives with type="list" limit="10" %}
{% for item in archives %}
<div class="article-item">
<a href="{{item.Link}}">
<h3>{{item.Title}}</h3>
<p>{{item.Description}}</p>
<span>发布时间:{{stampToDate(item.CreatedTime, "2006-01-02")}}</span>
</a>
</div>
{% empty %}
<p>当前没有任何内容可显示。</p>
{% endfor %}
{% endarchiveList %}
这里,我们通过 archiveList 标签将获取到的文档列表赋值给 archives 变量。type="list" 表示我们希望获取一个简单的列表,而 limit="10" 则限制了显示数量为 10 条。在 for 循环中,我们可以很方便地访问 item 对象的各种属性,如 Title(标题)、Link(链接)、Description(简介)以及 CreatedTime(创建时间)等。如果列表为空,{% empty %} 块中的内容就会显示出来,避免页面空白。
精细筛选,精准定位目标内容
archiveList 标签的真正强大之处在于其丰富的筛选参数,这些参数能帮助我们精确地控制显示哪些内容:
按内容模型筛选 (
moduleId) 如果你的网站有文章和产品等不同的内容类型(在安企CMS中称为“内容模型”),你可以通过moduleId参数来指定只显示某一类内容。例如,moduleId="1"通常用于获取文章列表,而moduleId="2"可能用于获取产品列表,具体取决于你在后台的模型设置。按分类筛选 (
categoryId,excludeCategoryId,child) 这是最常用的筛选方式之一。你可以指定一个或多个分类ID(用逗号隔开),来显示特定分类下的内容。categoryId="1":只显示ID为1的分类下的内容。categoryId="1,2,3":显示ID为1、2、3的分类下的内容。excludeCategoryId="4":排除ID为4的分类下的内容。- 默认情况下,
archiveList会自动包含子分类的内容。如果你只希望显示当前指定分类下的内容,而不包括其子分类,可以添加child=false。 - 一个特别有用的技巧是,如果你在分类列表页使用
archiveList但不指定categoryId,它会自动读取当前页面的分类ID。如果你不希望它自动读取,可以明确设置categoryId="0"。
按推荐属性筛选 (
flag,excludeFlag) 在后台发布文章或产品时,我们可以为其设置“头条”、“推荐”、“幻灯”等推荐属性。通过flag参数,你可以轻松调用这些被特殊标记的内容。例如,flag="c"可以用来显示所有被标记为“推荐”的文章,而excludeFlag="h"则可以排除所有“头条”内容。按关键词搜索 (
q) 当你在制作搜索结果页时,q参数就显得尤为重要。它允许你根据用户输入的关键词来筛选内容标题。如果你的URL中已经包含了q=关键词这样的查询参数,archiveList标签会自动读取并应用这个搜索条件,使得构建搜索功能非常便捷。按排序方式展示 (
order) 内容的排序可以显著影响用户获取信息的效率。order参数提供了多种排序方式:order="id desc":按内容ID倒序排列(最新发布的内容在前)。order="views desc":按浏览量倒序排列(热门内容在前)。order="sort desc":按后台设置的自定义排序字段倒序排列。
自定义筛选参数 安企CMS允许你为内容模型添加自定义字段。如果这些字段被设置为可筛选,那么你就可以通过URL中的查询参数进行高级筛选。例如,如果你的产品模型有一个“颜色”字段,你可以通过在URL中添加
color=红色来筛选出所有红色的产品。这通常需要配合archiveFilters标签来生成这些筛选链接。多站点与特殊组合 (
siteId,combineId,combineFromId) 如果你在使用安企CMS的多站点管理功能,siteId可以帮助你获取指定站点的内容。而combineId和combineFromId则是更高级的用法,用于在列表中将两篇内容组合展示,生成新的标题和链接,这在构建对比页面或复杂推荐逻辑时非常有用。
优雅呈现:实现内容分页
当内容数量庞大时,分页是保持页面整洁和提升加载速度的关键。archiveList 标签与 pagination 标签结合,可以轻松实现分页功能。
首先,你需要将 archiveList 的 type 参数设置为 "page":
{% archiveList archives with type="page" limit="10" categoryId="1" order="id desc" %}
{% for item in archives %}
<div class="product-card">
<a href="{{item.Link}}">
<img src="{{item.Thumb}}" alt="{{item.Title}}">
<h3>{{item.Title}}</h3>
<p>浏览量:{{item.Views}}</p>
</a>
</div>
{% empty %}
<p>此分类下暂无产品。</p>
{% endfor %}
{% endarchiveList %}
{# 分页代码将紧随其后 #}
<div class="pagination-area">
{% pagination pages with show="5" %}
{# 首页链接 #}
<a class="page-link {% if pages.FirstPage.IsCurrent %}active{% endif %}" href="{{pages.FirstPage.Link}}">{{pages.FirstPage.Name}}</a>
{# 上一页链接 #}
{% if pages.PrevPage %}
<a class="page-link" href="{{pages.PrevPage.Link}}">{{pages.PrevPage.Name}}</a>
{% endif %}
{# 中间页码链接 #}
{% for pageItem in pages.Pages %}
<a class="page-link {% if pageItem.IsCurrent %}active{% endif %}" href="{{pageItem.Link}}">{{pageItem.Name}}</a>
{% endfor %}
{# 下一页链接 #}
{% if pages.NextPage %}
<a class="page-link" href="{{pages.NextPage.Link}}">{{pages.NextPage.Name}}</a>
{% endif %}
{# 末页链接 #}
<a class="page-link {% if pages.LastPage.IsCurrent %}active{% endif %}" href="{{pages.LastPage.Link}}">{{pages.LastPage.Name}}</a>
{% endpagination %}
</div>
在这个例子中,limit="10" 定义了每页显示 10 条内容。pagination pages with show="5" 则会生成一个分页导航,其中 show="5" 表示最多显示 5 个页码按钮。pages 对象包含了所有与分页相关的信息,比如总页数 (TotalPages)、当前页 (CurrentPage)、首页链接 (FirstPage)、末页链接 (LastPage)、上一页 (PrevPage) 和下一页 (NextPage),以及所有可见页码的数组 (Pages)。通过循环 pages.Pages,我们可以构建出完整且可点击的页码导航。
总结
archiveList 标签是安