AnQiCMS 作为一款高效的企业级内容管理系统,为用户提供了灵活多样的内容管理和展示能力。在构建网站时,我们经常需要根据特定的条件来显示文档列表,例如只展示某个分类下的文章,或者只列出特定内容模型(如产品、服务)的条目。这时,archiveList 标签就成为了我们手中的利器。它不仅功能强大,而且使用起来非常直观,能够帮助我们轻松实现这些需求。
archiveList:获取文档列表的核心标签
archiveList 标签是 AnQiCMS 模板系统中用于查询和显示“文档”列表的关键。这里的“文档”是一个广义的概念,它可以是您网站上的文章、产品信息、新闻动态,甚至是自定义内容模型中的任何条目。通过灵活配置 archiveList 的参数,我们可以精确控制需要显示哪些内容。
它的基本使用方式通常是这样的:
{% archiveList 变量名称 with 参数="值" %}
{% for item in 变量名称 %}
<!-- 在这里显示每个文档的具体信息 -->
{% endfor %}
{% endarchiveList %}
其中,“变量名称”是我们为获取到的文档列表自定义的一个名字,例如 articles 或 products,后续在 for 循环中就可以通过 item(或您自定义的其他循环变量)来访问列表中的每个文档数据。
按内容模型筛选:定义内容的边界
AnQiCMS 的一大亮点就是其灵活的内容模型。您可以根据业务需求创建不同的内容模型,比如“文章模型”、“产品模型”、“案例模型”等。当您想只显示某一特定模型下的文档时,archiveList 标签的 moduleId 参数就能派上用场。
moduleId 参数允许您指定要获取哪个内容模型下的文档列表。每个内容模型在后台都有一个唯一的 ID。例如,假设“文章模型”的 ID 是 1,而“产品模型”的 ID 是 2。如果您想在页面上展示最新的 5 篇“文章”,您可以这样写:
{% archiveList articles with moduleId=1 limit=5 %}
{% for item in articles %}
<li><a href="{{ item.Link }}">{{ item.Title }}</a></li>
{% endfor %}
{% endarchiveList %}
通过将 moduleId 设置为 1,archiveList 便会聪明地只从“文章模型”中检索数据。同样,如果您需要展示“产品模型”下的内容,只需将 moduleId 的值替换为相应的 ID 即可。
按分类筛选:精准定位内容范围
除了按内容模型筛选,我们更常遇到的需求是根据内容分类来显示文档。比如,在文章列表页,我们可能只想展示“CMS教程”这个分类下的所有文章。archiveList 的 categoryId 参数正是为此而生。
您可以将 categoryId 设置为某个分类的 ID。例如,如果“CMS教程”分类的 ID 是 10,您可以这样获取该分类下的文档列表:
{% archiveList tutorialArticles with categoryId=10 limit=10 %}
{% for item in tutorialArticles %}
<h3><a href="{{ item.Link }}">{{ item.Title }}</a></h3>
<p>{{ item.Description }}</p>
{% endfor %}
{% endarchiveList %}
categoryId 参数不仅支持单个分类 ID,还可以接收多个分类 ID,它们之间用逗号 , 分隔。这样,您就可以一次性显示来自多个指定分类的文档:
{% archiveList mixedContent with categoryId="10,12,15" limit=10 %}
{% for item in mixedContent %}
<p>来自分类ID {{ item.CategoryId }}:<a href="{{ item.Link }}">{{ item.Title }}</a></p>
{% endfor %}
{% endarchiveList %}
有时,我们可能需要排除某些分类,这时可以使用 excludeCategoryId 参数。比如,您想显示所有文章,但排除 ID 为 10 和 11 的分类:
{% archiveList allButExcluded with moduleId=1 excludeCategoryId="10,11" limit=10 %}
{% for item in allButExcluded %}
<li><a href="{{ item.Link }}">{{ item.Title }}</a></li>
{% endfor %}
{% endarchiveList %}
值得一提的是,分类常常是分层级的(有父分类和子分类)。archiveList 默认会显示当前分类及其所有子分类的文档。如果您只想显示当前分类直接包含的文档,而不包括其子分类的文档,可以设置 child=false:
{# 只显示分类ID为10的直接文档,不包含其子分类 #}
{% archiveList directArticles with categoryId=10 child=false limit=10 %}
{% for item in directArticles %}
<li><a href="{{ item.Link }}">{{ item.Title }}</a></li>
{% endfor %}
{% endarchiveList %}
组合筛选条件:实现更复杂的查询
archiveList 的强大之处在于,您可以将上述筛选条件与其他参数灵活组合,实现更精细的文档查询。
- 推荐属性 (
flag):如果您在后台为文档设置了“头条”、“推荐”、“幻灯”等属性,可以通过flag参数来筛选。例如,显示所有被标记为“推荐”的文章:{% archiveList recommendedArticles with moduleId=1 flag="c" limit=5 %} {% for item in recommendedArticles %} <li><a href="{{ item.Link }}">[推荐] {{ item.Title }}</a></li> {% endfor %} {% endarchiveList %} - 排序方式 (
order):您可以根据文档的 ID(最新发布)、浏览量(最热门)或后台自定义排序来排列列表。例如,按浏览量降序排列:{% archiveList hotArticles with moduleId=1 order="views desc" limit=5 %} {% for item in hotArticles %} <li>{{ item.Title }} ({{ item.Views }} 阅读)</li> {% endfor %} {% endarchiveList %} - 显示数量 (
limit):控制列表显示多少条文档。您也可以使用offset,limit格式来实现跳过前几条再获取指定数量。例如,从第 2 条开始获取 5 条:limit="2,5"。 - 列表类型 (
type):除了默认的list类型(固定数量),type="page"用于配合pagination标签实现分页功能,而type="related"则用于获取当前文档的相关文档。 - 搜索关键词 (
q):当type="page"时,可以结合q参数进行关键词搜索,它会根据 URL 中的q参数自动匹配标题