AnQiCMS 作为一款高效的企业级内容管理系统,为用户提供了灵活多样的内容管理和展示能力。在构建网站时,我们经常需要根据特定的条件来显示文档列表,例如只展示某个分类下的文章,或者只列出特定内容模型(如产品、服务)的条目。这时,archiveList 标签就成为了我们手中的利器。它不仅功能强大,而且使用起来非常直观,能够帮助我们轻松实现这些需求。

archiveList:获取文档列表的核心标签

archiveList 标签是 AnQiCMS 模板系统中用于查询和显示“文档”列表的关键。这里的“文档”是一个广义的概念,它可以是您网站上的文章、产品信息、新闻动态,甚至是自定义内容模型中的任何条目。通过灵活配置 archiveList 的参数,我们可以精确控制需要显示哪些内容。

它的基本使用方式通常是这样的:

{% archiveList 变量名称 with 参数="值" %}
    {% for item in 变量名称 %}
        <!-- 在这里显示每个文档的具体信息 -->
    {% endfor %}
{% endarchiveList %}

其中,“变量名称”是我们为获取到的文档列表自定义的一个名字,例如 articlesproducts,后续在 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 设置为 1archiveList 便会聪明地只从“文章模型”中检索数据。同样,如果您需要展示“产品模型”下的内容,只需将 moduleId 的值替换为相应的 ID 即可。

按分类筛选:精准定位内容范围

除了按内容模型筛选,我们更常遇到的需求是根据内容分类来显示文档。比如,在文章列表页,我们可能只想展示“CMS教程”这个分类下的所有文章。archiveListcategoryId 参数正是为此而生。

您可以将 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 为 1011 的分类:

{% 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 参数自动匹配标题