如何使用`archiveFilters`标签在前台实现多条件组合筛选功能?

📅 👁️ 64

AnQiCMS 提供了灵活强大的内容管理能力,其中一项非常实用的功能就是利用 archiveFilters 标签在前台实现多条件组合筛选。这对于内容丰富、需要用户根据不同维度查找信息的网站来说,例如产品展示、房产租赁、招聘信息等,无疑大大提升了用户体验和内容的可发现性。

让我们深入了解如何使用 archiveFilters 标签,为您的网站构建一个直观高效的筛选系统。

构建筛选功能的基础:自定义内容模型字段

在您能够使用 archiveFilters 标签进行筛选之前,首先需要确保您的内容模型中已经设置了可用于筛选的自定义字段。安企CMS 允许您根据业务需求灵活地定义内容模型。

例如,如果您正在创建一个房产网站,可能会有以下筛选条件:

  • 房屋类型:住宅、商铺、公寓等(单项选择或下拉选择)
  • 户型:一室、两室、三室等(单项选择或下拉选择)
  • 装修情况:精装修、毛坯、简装修(单项选择或下拉选择)
  • 面积范围:例如 50-70 平米、70-90 平米(数字范围,这需要后端逻辑来处理,但前端展示可以是预设选项)

这些筛选条件在安企CMS 后台的“内容管理”->“内容模型”中进行定义。当您编辑或创建模型时,可以为模型添加自定义字段,并选择合适的字段类型,如“单项选择”或“下拉选择”。这些字段的“默认值”将作为前端筛选的具体选项。安企CMS 会自动识别这些定义为可筛选的参数。

认识 archiveFilters 标签

archiveFilters 标签的主要作用是根据您内容模型中定义的筛选字段,自动生成前端筛选条件的 HTML 结构和对应的链接。这些链接会巧妙地携带查询参数,供内容列表标签 archiveList 识别并进行数据筛选。

它的基本用法是这样:

{% archiveFilters filters with moduleId="1" allText="全部" %}
    {# 在这里循环输出筛选条件 #}
{% endarchiveFilters %}

这里我们定义了一个名为 filters 的变量来接收标签输出的数据。

标签接受几个重要参数:

  • moduleId:指定要筛选的内容模型 ID。这是必不可少的,因为它告诉系统您要针对哪个模型(例如,文章模型 ID 是 1,产品模型 ID 是 2)来生成筛选条件。
  • allText:用于设置“全部”或“不限”这类默认选项的显示文本。如果您不希望显示“全部”选项,可以设置为 allText=false

filters 变量会返回一个数组对象,数组中的每个 item 代表一个可筛选的字段(比如“房屋类型”、“户型”)。每个 item 自身又包含一个 Items 数组,这个数组里就是该字段下所有可供选择的筛选值(比如“住宅”、“商铺”)。

每个筛选值 (val) 都包含了以下信息:

  • Label:筛选值的显示文本,如“住宅”。
  • Link:点击该筛选值后跳转的 URL,这个 URL 会自动包含筛选参数。
  • IsCurrent:一个布尔值,指示当前筛选值是否已被选中,可以用来添加 active 样式。

将筛选条件与内容列表结合:archiveListpagination

archiveFilters 标签本身只生成筛选选项的 UI 和链接,它需要与 archiveListpagination 标签协同工作,才能实现完整的筛选和分页功能。

关键在于,archiveList 标签在 type="page" 模式下,会自动读取 URL 中的查询参数,并根据这些参数对文档进行筛选。archiveFilters 生成的链接正是利用了这一点。

让我们看一个完整的示例,假设我们有一个模型 ID 为 1 的“房产”模型,并且已经为它定义了“房屋类型”和“户型”等自定义筛选字段。

<div class="filter-area">
    <h3>房产筛选</h3>
    {% archiveFilters filters with moduleId="1" allText="不限" %}
        {% for item in filters %}
        <ul class="filter-group">
            <li class="filter-name">{{ item.Name }}: </li>
            {% for val in item.Items %}
            <li class="filter-option {% if val.IsCurrent %}active{% endif %}">
                <a href="{{ val.Link }}">{{ val.Label }}</a>
            </li>
            {% endfor %}
        </ul>
        {% endfor %}
    {% endarchiveFilters %}
</div>

<div class="content-list">
    {% archiveList archives with moduleId="1" type="page" limit="10" %}
        {% for item in archives %}
        <div class="article-card">
            <a href="{{ item.Link }}">
                <h4>{{ item.Title }}</h4>
                <p>{{ item.Description|truncatechars:100 }}</p>
                <div class="meta-info">
                    <span>发布于:{{ stampToDate(item.CreatedTime, "2006-01-02") }}</span>
                    <span>阅读量:{{ item.Views }}</span>
                    {# 如果有自定义字段,例如“户型”,可以直接调用 #}
                    <span>户型:{% archiveDetail with name="户型" id=item.Id %}</span>
                </div>
            </a>
            {% if item.Thumb %}
            <a href="{{ item.Link }}" class="thumb">
                <img alt="{{ item.Title }}" src="{{ item.Thumb }}">
            </a>
            {% endif %}
        </div>
        {% empty %}
        <p class="no-content">很抱歉,当前筛选条件下没有找到相关内容。</p>
        {% endfor %}
    {% endarchiveList %}

    <div class="pagination-area">
        {% pagination pages with show="5" %}
            <a class="page-link {% if pages.FirstPage.IsCurrent %}active{% endif %}" href="{{ pages.FirstPage.Link }}">首页</a>
            {% if pages.PrevPage %}
            <a class="page-link" href="{{ pages.PrevPage.Link }}">上一页</a>
            {% endif %}
            {% for item in pages.Pages %}
            <a class="page-link {% if item.IsCurrent %}active{% endif %}" href="{{ item.Link }}">{{ item.Name }}</a>
            {% endfor %}
            {% if pages.NextPage %}
            <a class="page-link" href="{{ pages.NextPage.Link }}">下一页</a>
            {% endif %}
            <a class="page-link {% if pages.LastPage.IsCurrent %}active{% endif %}" href="{{ pages.LastPage.Link }}">尾页</a>
        {% endpagination %}
    </div>
</div>

在这个示例中:

  1. archiveFilters 生成了“房屋类型”、“户型”等筛选选项,每个选项的 Link 会自动添加相应的查询参数(例如 ?房屋类型=住宅&户型=三室)。
  2. archiveList 使用 moduleId="1"type="page",它会检查当前 URL 中的查询参数,并根据这些参数筛选出对应的房产文档。
  3. pagination 标签则确保了筛选结果在多页时能够正确地进行翻页,并且翻页链接也会保留当前的筛选条件。

实践中的小贴士

  • 样式美化是关键:筛选功能的用户界面(UI)至关重要。您需要为 .filter-group.filter-option.active 类添加合适的 CSS 样式,让筛选条件清晰可见,选中状态一目了然。
  • 自定义筛选参数的命名:在后台定义自定义字段时,建议使用简洁且有意义的英文名称作为“调用字段”(FieldName),这会体现在 URL 查询参数中。虽然系统支持中文,但英文参数更通用。
  • 确保 archiveList 设置正确:一定要在 archiveList 中设置 type="page",否则筛选和分页功能将无法正常工作。
  • 筛选参数与 URL:当用户点击筛选条件时,您会在浏览器地址栏中看到类似于 yourdomain.com/module/list.html?户型=三室&房屋类型=住宅 这样的 URL。安企CMS 会自动解析这些参数并进行筛选。

通过这种方式,您可以在 AnQiCMS 中轻松实现强大的多条件组合筛选功能,极大地提升网站内容的互动性和用户满意度。

常见问题 (FAQ)

1. 我的自定义字段在 archiveFilters 中没有显示,或者显示了但无法筛选,这是为什么?

这通常是因为您的自定义字段没有正确配置为可筛选类型。请确保在后台“内容管理”->“内容模型”中,编辑您正在使用的模型,为该模型添加的自定义字段

相关文章

如何实现网站流量统计数据在后台以图表形式显示?

在网站运营中,了解并分析流量数据是制定有效策略、优化网站表现的关键环节。安企CMS(AnQiCMS)深知这一点,因此在后台提供了直观便捷的流量统计功能,让运营者能够以图表形式轻松掌握网站的各项数据,从而更好地驱动内容和营销决策。 安企CMS的流量统计功能旨在提供全面的网站表现视图。它不仅记录了用户的访问行为,还特别关注了搜索引擎爬虫的活动,这对于SEO工作至关重要。通过后台的数据统计模块

2025-11-07

如何在模板中使用`tdk`标签显示当前页面的规范链接(Canonical URL)?

在网站运营中,我们都希望自己的内容能够被搜索引擎准确理解和高效收录。其中,Canonical URL(规范链接)是一个非常重要的概念。它能帮助我们解决因内容相似或可从多个URL访问而可能产生的重复内容问题,清晰地告诉搜索引擎哪个是内容的“主版本”,从而集中页面的排名权重,避免分散。 安企CMS作为一个高效、灵活的内容管理系统,充分考虑了SEO优化的需求,内置了强大的TDK(Title

2025-11-07

怎样在前台页面显示网站的Logo图片?

网站Logo是品牌形象的核心,它不仅提升了网站的专业度,也加深了用户对品牌的认知。在AnQiCMS中,将您的Logo图片展示在前台页面上是一个直观且灵活的过程,主要涉及后台设置和模板代码的调整。 ### 第一步:在AnQiCMS后台上传和配置您的Logo 在AnQiCMS中,管理网站的Logo图片非常便捷。首先,您需要将Logo图片上传到系统的后台。 进入后台管理界面后

2025-11-07

如何在AnQiCMS中启用和配置网站留言表单并显示自定义字段?

在 AnQiCMS 中,建立一个能与访客互动、收集反馈的留言表单,并灵活配置自定义字段,是一项非常实用的功能。AnQiCMS 提供了简洁高效的方式来实现这一目标,无论是后台设置还是前端展示,都能轻松上手。 ### 后台启用和配置留言功能 通常,当你希望网站访客能与你取得联系,或者收集他们的反馈时,留言表单便是首选。在 AnQiCMS 中启用和配置留言功能,首先需要进入后台管理界面

2025-11-07

如何利用`tagList`标签显示文章的关联标签(Tag)云?

AnqiCMS 提供了一系列强大且灵活的标签,帮助我们更高效地管理和展示网站内容。在众多功能中,文章的标签(Tag)是一个非常实用的特性,它能够有效地组织内容,提升网站的内部链接结构,并方便访问者快速找到感兴趣的相关主题。今天,我们就来深入探讨一下如何利用 `tagList` 标签,在AnqiCMS模板中优雅地显示文章的关联标签,甚至是构建一个动态的“标签云”。 ###

2025-11-07

如何在后台批量修改文章内容中的关键词并同步到前台显示?

在网站内容运营中,关键词的精准度和时效性至关重要。随着市场变化或SEO策略调整,我们经常需要对网站上大量文章的关键词进行批量修改。如果逐一手动操作,无疑会耗费大量时间和精力。幸运的是,安企CMS(AnQiCMS)提供了高效的批量关键词替换功能,让这一过程变得得心应手,并能确保修改后的内容无缝同步到前台显示。 ### 高效批量修改文章内容关键词 在安企CMS后台,您会发现一个强大的功能

2025-11-07

如何在自定义页面(单页)中显示其特有的内容和图片?

在网站运营中,我们经常需要创建一些内容独特、设计布局也需要个性化的页面,比如“关于我们”、“联系方式”或者某个特定的活动详情页。安企CMS(AnQiCMS)为我们提供了强大的自定义页面(单页)功能,不仅能让我们轻松管理这些页面的文字内容,还能灵活地展示它们专属的图片和定制化的布局。 那么,具体如何操作,才能让自定义页面拥有自己独有的内容和图片展示方式呢?这主要分为几个步骤

2025-11-07

如何在前台页面显示AnQiCMS内置的系统语言包切换功能?

安企CMS提供了一套灵活的机制,让您的网站能够更好地服务于全球不同语言的用户。当您希望在前台页面实现语言切换功能时,AnQiCMS内置的标签和后台配置能够很好地满足这一需求。 ### 理解AnQiCMS的语言包机制 首先,我们需要明确AnQiCMS中“语言包”的概念。AnQiCMS内置的系统语言包主要负责切换网站后台界面以及前端页面中**系统内置的提示信息、标签等**的语言。例如,日期格式

2025-11-07