`archiveList` 标签如何精确筛选并展示特定分类、模型或推荐属性的文档列表?

在安企CMS中,archiveList 标签是构建动态内容列表的核心工具,它让你可以灵活地从网站的文档库中提取并展示你想要的内容。无论是展示特定分类下的最新文章,还是某个内容模型下的热门产品,抑或是带有特定推荐属性的专题文档,archiveList 都能通过其丰富的参数配置,帮助你精准地实现这些需求。

精准定位内容:分类、模型与推荐属性

首先,让我们了解archiveList标签在筛选内容方面最常用的几个维度:分类、内容模型和推荐属性。

1. 按分类筛选文档 (categoryId)

网站的内容通常会根据其主题被归类到不同的分类下,比如“公司新闻”、“行业动态”或“产品介绍”等。archiveList标签可以通过categoryId参数,让你轻松地指定要展示哪个或哪些分类下的文档。

  • 指定单个或多个分类:如果你想显示某个特定分类(例如ID为10)下的文档,可以这样使用:{% archiveList archives with categoryId="10" %}。如果需要显示多个分类(例如ID为10、12、15)下的文档,只需用逗号将它们隔开:{% archiveList archives with categoryId="10,12,15" %}
  • 控制子分类内容:在某些情况下,你可能只希望显示当前分类本身的文档,而不包含其子分类的内容。这时,child="false"参数就派上用场了。默认情况下,archiveList是会包含子分类内容的。如果你只想要当前分类(ID为10)的文档,可以这样写:{% archiveList archives with categoryId="10" child="false" %}
  • 不依赖当前页面分类:有时,即便你在分类页面,也可能不希望archiveList自动读取当前页面的分类ID。这时,你可以明确设置categoryId="0"来阻止这种自动行为,并自行指定需要筛选的分类ID。

2. 按内容模型筛选文档 (moduleId)

安企CMS的一大亮点在于其灵活的内容模型机制,它允许你为不同类型的内容(如文章、产品、案例等)定义独立的字段结构。archiveList标签通过moduleId参数,可以让你精确地筛选出属于特定内容模型的文档。

  • 识别内容模型:在安企CMS的后台,你可以为不同的内容类型创建内容模型(例如,系统默认的“文章模型”和“产品模型”)。每个内容模型都有一个唯一的ID。通过指定这个ID,archiveList就能只显示该模型下的文档。例如,如果你想显示产品模型下的文档,而产品模型ID为2,可以这样使用:{% archiveList products with moduleId="2" %}
  • 结合分类与模型:你还可以将moduleIdcategoryId结合使用,比如显示某个分类下,且属于产品模型的产品列表。

3. 按推荐属性筛选文档 (flag)

在发布文档时,安企CMS提供了多种推荐属性,如“头条”、“推荐”、“幻灯”等,这些属性用不同的字母标识(例如,h代表头条,c代表推荐)。archiveList标签可以通过flag参数,根据这些属性来筛选内容。

  • 指定推荐属性:如果你想在首页展示所有被标记为“推荐”的文档,可以这样使用:{% archiveList featuredDocs with flag="c" %}。你可以组合使用多个属性,例如flag="h,c"会显示既是头条又是推荐的文档。
  • 排除特定属性:如果想排除某些特定属性的文档,可以使用excludeFlag参数。例如,{% archiveList normalDocs with excludeFlag="h" %}会显示所有非头条的文档。
  • 显示属性标识:如果你需要在列表中显示文档的推荐属性,可以在archiveList标签中添加showFlag="true"参数。

扩展筛选能力:更多实用参数

除了上述核心筛选条件,archiveList还提供了其他多种参数来进一步优化你的内容列表:

  • 排序方式 (order):你可以根据文档ID(最新发布)、浏览量(最热门)或后台自定义排序来排列文档。例如,order="id desc"表示按ID降序(最新发布),order="views desc"表示按浏览量降序。
  • 显示数量与分页 (limit, type="page")limit参数用于控制显示多少条文档。如果你需要实现分页功能,可以将type参数设置为"page",并结合pagination标签来创建完整的分页导航。
  • 搜索关键词 (q):在搜索结果页,q参数可以用来匹配文档标题中包含特定关键词的内容。如果URL中已包含q参数,archiveList会自动读取并应用。
  • 自定义筛选参数:安企CMS允许你在后台为内容模型定义自定义字段。如果这些字段被设置为可筛选,archiveList可以根据URL中的查询参数进行进一步筛选,这对于创建高度定制化的筛选界面(如房产网站按面积、户型筛选)非常有用。你可以结合archiveFilters标签来构建这些筛选条件。
  • 多站点数据调用 (siteId):如果你使用了安企CMS的多站点管理功能,siteId参数可以让你调用其他站点的数据。
  • 组合文档展示 (combineId, combineFromId):这是一个高级用法,用于在列表中将多个文档组合显示,比如展示“从A地到B地的旅游线路”,它可以动态地组合文档标题和链接,常用于比较或组合信息场景。

实际应用场景示例

让我们通过几个常见场景,看看archiveList标签如何发挥作用:

场景一:在首页展示最新的5篇公司新闻

假设“公司新闻”分类的ID是10,且属于“文章模型”(ID为1)。

<div class="latest-news">
    <h2>最新公司新闻</h2>
    <ul>
        {% archiveList news with moduleId="1" categoryId="10" limit="5" order="id desc" %}
            {% for item in news %}
                <li>
                    <a href="{{ item.Link }}">{{ item.Title }}</a>
                    <span>发布日期:{{ stampToDate(item.CreatedTime, "2006-01-02") }}</span>
                </li>
            {% empty %}
                <li>暂无公司新闻。</li>
            {% endfor %}
        {% endarchiveList %}
    </ul>
</div>

场景二:在侧边栏展示热门推荐产品

假设“产品模型”的ID是2,并且产品被标记为“推荐”(c)。

<div class="hot-products">
    <h3>热门推荐产品</h3>
    <ul>
        {% archiveList hotProducts with moduleId="2" flag="c" limit="3" order="views desc" %}
            {% for item in hotProducts %}
                <li>
                    <a href="{{ item.Link }}">
                        <img src="{{ item.Thumb }}" alt="{{ item.Title }}">
                        {{ item.Title }}
                    </a>
                </li>
            {% empty %}
                <li>暂无推荐产品。</li>
            {% endfor %}
        {% endarchiveList %}
    </ul>
</div>

场景三:在分类页面展示当前分类及其子分类的文章列表,并支持分页

假设文章模型ID为1,并且在分类页面的模板中,archiveList会自动获取当前分类ID。

<div class="category-articles">
    <h1>{% categoryDetail with name="Title" %}</h1> {# 显示当前分类标题 #}
    <ul>
        {% archiveList articles with moduleId="1" type="page" limit="10" order="id desc" %}
            {% for item in articles %}
                <li>
                    <a href="{{ item.Link }}">{{ item.Title }}</a>
                    <span>所属分类:{% categoryDetail with name="Title" id=item.CategoryId %}</span>
                    <span>阅读量:{{ item.Views }}</span>
                </li>
            {% empty %}
                <li>当前分类下暂无文章。</li>
            {% endfor %}
        {% endarchiveList %}
    </ul>

    {# 分页导航 #}
    {% pagination pages with show="5" %}
        <div class="pagination-nav">
            {% if pages.PrevPage %}<a href="{{ pages.PrevPage.Link }}">上一页</a>{% endif %}
            {% for item in pages.Pages %}
                <a href="{{ item.Link }}" class="{% if item.IsCurrent %}active{% endif %}">{{ item.Name }}</a>
            {% endfor %}
            {% if pages.NextPage %}<a href="{{ pages.NextPage.Link }}">下一页</a>{% endif %}
        </div>
    {% endpagination %}
</div>

通过这些灵活的参数组合,archiveList标签可以帮助你构建出高度定制化且功能强大的内容列表,满足各种内容展示需求。


常见问题 (FAQ)

1. 如何在archiveList标签中同时应用多个筛选条件?

你可以在archiveList标签中直接同时添加多个参数,系统会自动将这些条件组合起来进行筛选。例如,如果你想获取“文章模型”(moduleId="1")下,“公司新闻”分类(categoryId="10"),且带有“推荐”属性(flag="c")的最新5篇文章,可以这样写: {% archiveList news with moduleId="1" categoryId="10" flag="c" limit="5" order="id desc" %}

2. archiveList标签可以在网站的哪些页面使用?

archiveList标签理论上可以在网站的任何模板文件(如首页、分类页、详情页、搜索结果页、自定义页面等)中使用。当你在非分类页或非模型页使用时,你可能需要更明确地指定moduleIdcategoryId等参数。但在分类页或模型页