在网站运营中,为用户提供便捷、精准的内容查找体验至关重要。当网站内容日益丰富,简单的分类或关键词搜索往往不足以满足用户的个性化需求。这时,文章列表页的多条件筛选功能就显得尤为关键。对于 AnQiCMS 用户来说,巧妙利用 archiveFilters 标签,便能轻松实现这一目标,让您的文章列表页瞬间拥有强大的筛选能力。

核心功能揭秘:archiveFilters 的工作原理

archiveFilters 标签在 AnQiCMS 中扮演着一个智能向导的角色,它的主要任务并非直接过滤内容,而是根据您网站内容模型的定义,动态生成一系列可供用户点击的筛选链接。当用户点击这些链接时,页面URL会携带相应的筛选参数,而 archiveList 标签(当设置为分页模式 type="page" 时)则会自动识别并根据这些参数,从数据库中提取出符合条件的文章,从而实现多条件筛选显示。

简单来说,archiveFilters 标签的独特之处在于,它无需您手动编写复杂的筛选逻辑,只需在后台定义好内容模型的自定义字段,它就能自动读取这些字段的筛选选项,并为每个选项生成一个带有特定URL参数的链接。这种设计极大地简化了前端开发工作,让您能更专注于用户体验和内容呈现。

幕后准备:内容模型的自定义字段

要让 archiveFilters 标签发挥作用,首先需要在 AnQiCMS 后台做好“幕后准备”——即在您的内容模型中定义好可用于筛选的自定义字段。

想象一下,如果您的网站是一个房产信息平台,您可能希望用户能够根据“房屋类型”(如:住宅、公寓、别墅)、“面积范围”(如:50-80平米、80-120平米)等条件来筛选房源。

在 AnQiCMS 后台,您可以前往“内容管理”下的“内容模型”,选择或创建一个模型(例如“房产模型”),然后为其添加自定义字段。这些字段的类型非常关键:

  • 单项选择:适用于选项固定且用户只能选择一个的情况,如“房屋类型”。
  • 多项选择:如果用户可以同时选择多个标签或属性,例如“房源特色”(带花园、学区房等)。
  • 下拉选择:与单项选择类似,但在UI上以下拉菜单形式呈现。

当您为这些自定义字段设置好预设选项后,archiveFilters 标签就能智能地识别这些选项,并将其作为筛选条件呈现给用户。

手把手操作:如何在模板中使用 archiveFilters

了解了 archiveFilters 的工作原理和后台准备后,我们来看看如何在前端模板中实际应用它。

假设我们有一个“房产模型”,其中定义了 house_type (房屋类型) 和 area_range (面积范围) 两个自定义字段。

1. 引入 archiveFilters 标签

首先,在您的文章列表页模板(例如 article/list.htmlarchive/list.html)中,使用 archiveFilters 标签来获取筛选条件:

{# 引入 archiveFilters 标签,变量名为 filters,指定模型ID为1,所有选项的文本为“不限” #}
{% archiveFilters filters with moduleId="1" allText="不限" %}
    {# 遍历每个筛选组,例如“房屋类型”、“面积范围” #}
    {% for item in filters %}
    <div class="filter-group">
        <span class="filter-name">{{item.Name}}: </span> {# 输出筛选组的名称,如“房屋类型” #}
        <ul class="filter-options">
            {# 遍历当前筛选组下的所有选项,例如“住宅”、“公寓” #}
            {% for val in item.Items %}
            <li class="filter-item {% if val.IsCurrent %}active{% endif %}">
                <a href="{{val.Link}}">{{val.Label}}</a> {# 输出选项的文本和链接 #}
            </li>
            {% endfor %}
        </ul>
    </div>
    {% endfor %}
{% endarchiveFilters %}

在这段代码中:

  • archiveFilters filters with moduleId="1" allText="不限":我们告诉系统,获取模型ID为1(通常是文章或默认内容模型)的所有筛选条件,并将“全部”选项的显示文本设置为“不限”。filters是我们定义的一个变量,用来接收筛选数据。
  • {% for item in filters %}:外层循环遍历的是每一个筛选条件组,例如“房屋类型”、“面积范围”等。
    • {{item.Name}}:显示筛选组的友好名称(如“房屋类型”)。
    • {{item.FieldName}}:这是该筛选组对应的数据库字段名(如 house_type),虽然这里没有直接显示,但它在生成 val.Link 时起着核心作用。
  • {% for val in item.Items %}:内层循环遍历的是每个筛选组下的具体选项,例如“住宅”、“公寓”。
    • {{val.Label}}:显示筛选选项的文本(如“住宅”)。
    • {{val.Link}}:这是最关键的部分,它会自动生成一个