AnQiCMS的文档列表标签`archiveList`如何根据不同条件(分类、模型、推荐属性)筛选并显示内容?

在使用安企CMS构建网站时,灵活地展示内容是实现出色用户体验和高效内容管理的关键。其中,archiveList标签无疑是内容展示的核心工具,它能帮助我们根据各种条件筛选并呈现文章、产品或其他自定义内容模型的数据。本文将深入探讨archiveList标签如何根据分类、内容模型、推荐属性等条件,精确地筛选并展示您想要的内容。

灵活驾驭内容展示:archiveList标签的核心作用

archiveList标签是安企CMS模板中用于获取文档列表的强大标签。无论您想在首页展示最新文章、在分类页列出特定产品、或者在侧边栏推荐热门内容,它都能通过丰富的参数配置来满足您的需求。它的基本使用方式通常是这样的:

{% archiveList archives with type="list" limit="10" %}
    {% for item in archives %}
        <!-- 在这里展示您的内容 -->
        <a href="{{ item.Link }}">{{ item.Title }}</a>
    {% endfor %}
{% endarchiveList %}

这里,archives是您定义的变量名,type="list"表示获取普通列表,limit="10"则限制显示10条内容。接下来,我们将看到如何通过更多参数,实现更精细化的内容筛选。

根据分类精确筛选内容

分类是组织网站内容的基石。archiveList标签提供了categoryIdexcludeCategoryId参数,让您可以轻松地根据分类来筛选内容。

如果您希望显示某个特定分类下的所有内容,只需使用categoryId参数并指定该分类的ID。例如,要显示ID为10的“公司新闻”分类下的文章:

{% archiveList latestNews with categoryId="10" type="list" limit="5" %}
    {% for news in latestNews %}
        <p><a href="{{ news.Link }}">{{ news.Title }}</a></p>
    {% endfor %}
{% endarchiveList %}

如果您的内容分布在多个不连续的分类中,categoryId也支持通过逗号分隔来指定多个分类ID,例如categoryId="10,12,15"

反之,如果您想列出网站所有内容,但排除掉某个或某些分类下的内容,可以使用excludeCategoryId。比如,您想在“所有文章”列表中排除“公司新闻”分类,就可以这样设置:

{% archiveList allArticles with excludeCategoryId="10" type="list" limit="10" %}
    {% for article in allArticles %}
        <h4><a href="{{ article.Link }}">{{ article.Title }}</a></h4>
    {% endfor %}
{% endarchiveList %}

此外,当您在某个分类页面使用archiveList时,它会默认读取当前分类的ID。如果您想明确指定不自动读取当前分类ID,或者只想显示当前分类而不包括其子分类的内容,child参数就派上用场了。child参数默认值为true,即包含子分类内容。将其设置为false,即可仅显示当前分类下的直接内容:

{# 仅显示当前分类下的文档,不包括子分类 #}
{% archiveList currentCategoryDocs with categoryId="0" child=false type="list" limit="10" %}
    {% for doc in currentCategoryDocs %}
        <p>{{ doc.Title }}</p>
    {% endfor %}
{% endarchiveList %}

请注意,当categoryId="0"时,archiveList不会自动从当前页面获取分类ID,这在某些特殊布局中会非常有用。

基于内容模型定义内容结构

安企CMS的“内容模型”功能非常强大,它允许您自定义内容的结构,例如定义一个“文章”模型,一个“产品”模型,甚至是“案例”或“服务”模型。archiveList标签通过moduleId参数,可以轻松地从特定的内容模型中获取数据。

要使用这个功能,您需要首先了解您所需要调用的内容模型的ID。例如,假设您的“文章”模型的ID是1,“产品”模型的ID是2。那么,要在一个页面上分别展示最新的文章和推荐的产品,您可以这样操作:

{# 显示最新的文章,假设文章模型ID为1 #}
<h3>最新文章</h3>
{% archiveList latestArticles with moduleId="1" order="id desc" type="list" limit="5" %}
    {% for article in latestArticles %}
        <p><a href="{{ article.Link }}">{{ article.Title }}</a></p>
    {% endfor %}
{% endarchiveList %}

{# 显示推荐的产品,假设产品模型ID为2 #}
<h3>推荐产品</h3>
{% archiveList recommendedProducts with moduleId="2" flag="c" order="id desc" type="list" limit="5" %}
    {% for product in recommendedProducts %}
        <p><a href="{{ product.Link }}">{{ product.Title }}</a></p>
    {% endfor %}
{% endarchiveList %}

通过moduleId,您可以确保只检索和显示符合特定内容结构的数据,这对于构建多类型内容网站至关重要。

利用推荐属性突出重点内容

在安企CMS的文档发布界面,内容可以被标记上各种“推荐属性”,例如“头条[h]”、“推荐[c]”、“幻灯[f]”、“特荐[a]”等。这些属性是为了在网站前端灵活地突出显示特定内容而设计的。archiveList标签的flagexcludeFlag参数正是用来利用这些属性进行筛选。

如果您想在网站的某个区域(比如首页的轮播图)展示被标记为“幻灯”的内容,您可以这样做:

{# 显示标记为“幻灯”的内容,假设属性为f #}
<div class="slideshow">
    {% archiveList slideshowItems with flag="f" type="list" limit="5" %}
        {% for item in slideshowItems %}
            <img src="{{ item.Thumb }}" alt="{{ item.Title }}">
            <h3>{{ item.Title }}</h3>
        {% endfor %}
    {% endarchiveList %}
</div>

flag参数可以指定一个或多个推荐属性的字母(例如flag="c"表示推荐,flag="h,f"表示头条或幻灯)。

同样,您也可以使用excludeFlag来排除掉带有特定属性的内容。比如,您想列出所有文章,但排除掉已经被设为“头条”的文章,就可以这样写:

{# 显示所有文章,但排除掉“头条”内容 #}
{% archiveList regularArticles with moduleId="1" excludeFlag="h" type="list" limit="10" %}
    {% for article in regularArticles %}
        <p>{{ article.Title }}</p>
    {% endfor %}
{% endarchiveList %}

如果您希望在内容列表中,除了显示内容本身,还能看到它被标记了哪些推荐属性,可以使用showFlag=true参数。然后,在循环内部,通过{{item.Flag}}来获取并显示这些属性。

结合多种条件,实现更灵活的内容展示

archiveList标签的强大之处在于可以组合使用上述的多种筛选条件,以及其他辅助参数,来构建高度定制化的内容列表。

例如,您可能需要在一个“产品中心”页面,展示“产品模型(moduleId=2)”下“推荐(flag=c)”的、且属于“电子产品(categoryId=20)”分类的最新五款产品:

{% archiveList featuredElectronics with moduleId="2" categoryId="20" flag="c" order="id desc" type="list" limit="5" %}
    {% for product in featuredElectronics %}
        <div class="product-card">
            <img src="{{ product.Thumb }}" alt="{{ product.Title }}">
            <h4><a href="{{ product.Link }}">{{ product.Title }}</a></h4>
            <p>{{ product.Description }}</p>
        </div>
    {% endfor %}
{% endarchiveList %}

除了上述的核心筛选参数,archiveList还提供了其他实用参数:

  • order:控制内容的排序方式,例如order="id desc"(按ID倒序,即最新发布)、order="views desc"(按浏览量倒序,即最热门)。
  • limit:限制显示的内容数量,例如limit="10"。它还支持offset模式,如limit="2,10"表示从第3条内容开始取10条。
  • type:决定列表的类型。type="list"用于普通列表,type="page"用于需要分页的列表(通常与pagination标签配合使用),type="related"用于获取相关内容(根据当前文档的关键词或指定关系)。
  • q:用于搜索关键词,仅在type="page"时生效,实现站内搜索功能。
  • combineId / combineFromId: 用于在列表中附加或前置一个文档进行组合显示,这在旅游线路、产品对比等场景中非常有用。

通过这些参数的巧妙组合,您可以轻松地在网站的任何位置构建出符合业务逻辑和用户需求的动态内容模块,极大提升了安企CMS在内容运营方面的灵活性。


常见问题 (FAQ)

Q1: 我想在分类页面显示该分类下所有文章,并且需要分页功能,应该怎么做? A1: 您可以使用archiveList标签,并将type参数设置为page。例如:{% archiveList articles with type="page" limit="10" %}。该标签会默认读取当前分类的ID。然后,您还需要结合pagination标签来渲染分页导航。

Q2: 如果我的内容模型自定义了额外的字段,我可以通过archiveList标签筛选这些自定义字段吗? A2: archiveList标签本身不直接提供自定义字段的筛选参数,但它支持通过URL的query参数进行筛选,前提是在内容模型的额外自动配置中,将这些字段设置为可筛选的。例如,如果您的内容模型有一个可筛选的color字段,当用户访问yourwebsite.com/products?color=red时,archiveList会自动根据URL中的color=red来筛选内容。

Q3: 如何在一个页面中展示多个不同条件筛选出的内容列表,比如“最新文章”和“热门产品”? A3: 您完全可以在同一个页面上使用多个archiveList标签。关键在于为每个archiveList指定一个不同的变量名称。例如,{% archiveList latestArticles ... %}{% archiveList popularProducts ... %}。这样,每个标签都会独立地获取并管理自己的内容列表,互不干扰。