如何通过`archiveFilters`标签构建产品筛选或房产筛选等复杂搜索界面?

📅 👁️ 67

在当今内容爆炸的时代,用户访问网站时,常常希望能够快速找到他们感兴趣的内容。无论是浏览电商平台上的海量商品,还是寻找房产网站上符合心意的住房,一个强大且易用的筛选搜索界面都是提升用户体验的关键。

安企CMS(AnQiCMS)深知这一点,并为此提供了强大的archiveFilters标签。这个标签能帮助您轻松构建复杂的产品或房产筛选界面,让您的网站内容更具发现性和互动性,无需编写复杂的后端逻辑。

理解筛选界面的核心要素

要构建一个高效的筛选界面,我们需要几个核心组件协同工作:

  1. 内容模型与自定义字段: 这是筛选功能的基础。您需要在安企CMS后台的内容模型中定义好各种筛选属性。例如,对于一个房产网站,您可以定义“房屋类型”(住宅、商铺、公寓)、“面积范围”、“卧室数量”、“装修情况”等字段。对于产品网站,可以是“颜色”、“尺寸”、“品牌”、“内存大小”等。关键在于,这些字段需要被设置为“单项选择”或“多项选择”等适合筛选的类型,并在其中预设好可供选择的值。这些预设值将直接转化为前端的筛选选项。

  2. archiveFilters标签的魔力: 这个标签是筛选界面生成器。它根据您指定的内容模型和其自定义字段,自动生成一系列可供筛选的选项。更棒的是,它会为每个选项生成一个带有正确URL参数的链接。当用户点击这些链接时,页面会重新加载,但URL中会携带用户选择的筛选条件。

  3. archiveList标签的响应: archiveFilters生成的URL参数,会被同页面上的archiveList标签自动识别并应用。这意味着,您不需要为archiveList标签额外编写复杂的参数来处理筛选逻辑,它会自动读取URL中的筛选条件,并根据这些条件从数据库中检索出符合条件的文档进行展示。

这三者紧密配合,形成了一个无需额外开发就能实现动态筛选的强大机制。

实践:一步步构建筛选界面

现在,我们来一步步看看如何在安企CMS中构建一个房产筛选界面。

第一步:准备工作——定义内容模型与筛选字段

首先,您需要在安企CMS后台定义或编辑您的内容模型。假设我们有一个名为“房产”的内容模型。进入“内容管理”->“内容模型”,点击“房产”模型进行编辑,然后添加一些自定义字段,例如:

  • 房屋类型 (FieldName: houseType):
    • 字段类型:单项选择
    • 默认值:住宅、商铺、公寓、别墅 (每行一个选项)
  • 卧室数量 (FieldName: bedrooms):
    • 字段类型:单项选择
    • 默认值:一室、二室、三室、四室以上
  • 装修情况 (FieldName: decoration):
    • 字段类型:单项选择
    • 默认值:精装修、毛坯、简装修

请确保这些字段已经保存,并且您已经在“房产”内容模型下发布了一些包含这些自定义字段的文档。

第二步:在列表页模板中插入archiveFilters标签

接下来,打开您用于展示房产列表的模板文件,通常是您的“房产”内容模型对应的{模型table}/list.html{模型table}/index.html

在这个模板中,找到您希望放置筛选条件的位置。我们可以使用archiveFilters标签来生成筛选器。这个标签会输出一个包含所有筛选选项的数据结构,我们需要遍历它来构建实际的HTML界面。

{# 假设您的房产模型ID是2,请根据实际情况修改 #}
<div>
    <div class="filter-group">
        <h3>房产筛选</h3>
        {% archiveFilters filters with moduleId="2" allText="不限" %}
            {% for item in filters %}
                <ul class="filter-category">
                    <li class="filter-label">{{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="property-list">
        {% archiveList archives with moduleId="2" type="page" limit="10" %}
            {% for item in archives %}
            <div class="property-card">
                <a href="{{item.Link}}">
                    {% if item.Thumb %}
                    <img src="{{item.Thumb}}" alt="{{item.Title}}" class="property-thumbnail">
                    {% endif %}
                    <h4>{{item.Title}}</h4>
                    <p>
                        {% archiveDetail houseType with name="houseType" id=item.Id %}
                        <span>类型: {{ houseType }}</span>
                        {% archiveDetail bedrooms with name="bedrooms" id=item.Id %}
                        <span> | 卧室: {{ bedrooms }}</span>
                        {% archiveDetail decoration with name="decoration" id=item.Id %}
                        <span> | 装修: {{ decoration }}</span>
                    </p>
                    <p class="description">{{item.Description}}</p>
                    <span class="views">{{item.Views}} 浏览</span>
                </a>
            </div>
            {% empty %}
            <p>暂无符合条件的房产信息。</p>
            {% endfor %}
        {% endarchiveList %}

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

在这个示例中:

  • moduleId="2":替换为您的内容模型实际的ID。您可以在后台“内容管理”->“内容模型”中查看模型的ID。
  • allText="不限":这是筛选条件中“全部”选项的显示文本。
  • filters:这是archiveFilters标签输出的主变量,它包含了所有可筛选的字段和选项。
  • item.Name:显示自定义字段的名称,例如“房屋类型”、“卧室数量”。
  • item.FieldName:是自定义字段在数据库中的实际字段名,例如houseType
  • item.Items:是当前自定义字段下所有可用的筛选选项。
  • val.Label:显示筛选选项的文本,例如“住宅”、“商铺”。
  • val.Link:是点击该选项后会跳转到的URL,这个URL包含了对应的筛选参数。
  • val.IsCurrent:一个布尔值,用于判断当前选项是否被选中,方便您通过CSS添加“active”样式。

第三步:展示筛选结果——结合archiveList

在上面的代码示例中,我们已经将archiveList标签与筛选器放在了同一个页面。当用户点击筛选条件时,页面会重新加载,archiveList标签会自动读取URL中的筛选参数,并根据这些参数从“房产”模型中查询出符合条件的文档进行展示。

例如,如果用户点击了“房屋类型:住宅”,URL可能会变成/fangchan/list.html?houseType=住宅。此时,archiveList会自动理解这个参数,并只显示房屋类型为“住宅”的房产。

相关文章

`archiveParams`标签如何将文档的自定义字段数据呈现在前端页面?

在安企CMS中,内容的灵活性是我们进行网站运营和内容管理的核心优势之一。除了标题、正文等标准化字段,我们经常需要为不同类型的内容添加特定的自定义信息,比如产品的“品牌”、“型号”、“产地”,或者文章的“作者”、“来源”等。这些自定义字段极大地丰富了内容展示的维度,但如何将这些精心录入的后台数据准确、灵活地呈现在前端页面上,是模板开发时一个重要的考量。 这时

2025-11-08

如何使用`archiveList`标签的`type="related"`功能显示相关文章推荐?

在您的网站上,当访客阅读完一篇文章时,如果能及时看到其他相关联的内容,这不仅能显著提升用户的阅读体验,降低跳出率,还能有效地增加网站的页面浏览量和停留时间。安企CMS为此提供了一个非常方便的标签:`archiveList`,配合其`type="related"`属性,就能轻松实现这一功能。 ###

2025-11-08

`prevArchive`和`nextArchive`标签如何实现文档的上一篇/下一篇功能?

在您运营网站时,为用户提供流畅的阅读体验是提升网站粘性的关键之一。当用户阅读完一篇文档,如果能轻松跳转到相关联的上一篇或下一篇,无疑会大大增加他们在您网站上的停留时间。安企CMS(AnQiCMS)深知这一点,并提供了非常直观且强大的`prevArchive`和`nextArchive`标签,帮助您轻松实现这一功能。 ### 开启文档间的无缝导航 文档的“上一篇/下一篇”功能

2025-11-08

文档详情页如何通过`archiveDetail`标签显示文章标题、内容、图片等信息?

在安企CMS中管理网站内容,文档详情页无疑是用户获取信息最核心的阵地。如何将每一篇精心撰写的文章,其标题、内容、图片以及各种附加信息,准确而生动地呈现在用户眼前,这就要巧妙运用我们的`archiveDetail`标签了。这个标签是专门为展示单篇文档详情而设计的,它的灵活运用将帮助您轻松构建出功能丰富、体验流畅的详情页面。 首先,让我们来认识一下`archiveDetail`标签的核心作用

2025-11-08

`tagList`标签如何展示文档的关联标签,并实现标签云效果?

## 巧用 AnQiCMS 的 `tagList` 标签,轻松实现文档关联与标签云展示 在网站内容运营中,标签(Tag)扮演着至关重要的角色。它们不仅能帮助用户快速找到感兴趣的内容,提升站内导航的便捷性,还能通过关键词的聚合,优化搜索引擎对网站内容的理解,从而带来更好的 SEO 表现。AnQiCMS 充分考虑了这一需求,内置了强大的标签功能,并提供了灵活的模板标签 `tagList`

2025-11-08

`tagDetail`标签如何获取并显示特定标签的详细信息?

安企CMS (AnQiCMS) 提供了一系列强大的模板标签,帮助网站运营者高效地展示内容。其中,`tagDetail` 标签是用于获取并显示特定标签详细信息的关键工具。无论是构建精美的标签详情页,还是在其他页面引用标签的相关数据,`tagDetail` 都能提供灵活且直观的解决方案。 ### `tagDetail` 标签:获取标签详细信息的利器 在安企CMS中

2025-11-08

`tagDataList`标签如何显示某个具体标签下的所有文档列表?

在安企CMS中管理和展示内容,标签(Tag)无疑是一个极为实用的工具。它能帮助我们更灵活地组织文档,实现多维度内容聚合,对于提升网站的SEO表现和用户体验都大有裨益。当我们需要在一个特定的标签页面,或者在网站的任意位置,展示某个具体标签下的所有文档列表时,`tagDataList` 标签就是我们不可或缺的利器。 ###

2025-11-08

`commentList`标签如何展示文章详情页的评论列表及分页?

在安企CMS中,文章详情页的评论列表是提升用户互动和内容活力的重要组成部分。要将这些评论自然流畅地展示出来,并实现友好的分页体验,我们需要巧妙地运用`commentList`和`pagination`这两个模板标签。接下来,我们就一起看看如何在文章详情页中实现评论的展示与分页功能。 --- ### 一、`commentList`标签

2025-11-08