如何在产品列表或文章列表页实现多条件筛选,并显示过滤后的结果?

📅 👁️ 93

在内容管理系统中,为用户提供灵活的多条件筛选功能,是提升网站可用性和用户体验的关键一环。无论是电商网站的产品列表,还是内容门户的文章分类页面,用户都希望能快速定位到自己感兴趣的内容。安企CMS(AnQiCMS)凭借其强大的内容模型和模板标签系统,让您能够轻松实现这一需求,并直观地显示过滤后的结果。

1. 奠定基础:定义内容模型与自定义字段

所有筛选功能都离不开数据。在安企CMS中,实现多条件筛选的第一步,是在内容模型中定义相应的自定义字段。这些字段将作为您筛选条件的依据。

您可以前往后台的“内容管理”找到“内容模型”选项。安企CMS默认提供了“文章模型”和“产品模型”,您也可以根据业务需求创建新的内容模型。进入相应的模型编辑页面后,在“内容模型自定义字段”区域,您可以添加新的字段。

假设您正在运营一个房产信息网站,需要根据“房屋类型”(如住宅、商铺、公寓)和“建筑面积”进行筛选。您可以这样设置自定义字段:

  • 字段一:房屋类型
    • 参数名:房屋类型(方便后台识别)
    • 调用字段 (FieldName)housing_type (这个名称至关重要,前端模板和URL参数都会用到它)
    • 字段类型:单项选择(或下拉选择)
    • 默认值:每行输入一个选项,例如:住宅、商铺、公寓、别墅
  • 字段二:建筑面积
    • 参数名:建筑面积
    • 调用字段 (FieldName)area_size
    • 字段类型:下拉选择
    • 默认值:例如:50平米以下、50-80平米、80-120平米、120平米以上

完成字段定义后,您在发布文章或产品时,就可以为这些内容填写对应的“房屋类型”和“建筑面积”信息了。

2. 构建筛选界面:使用 archiveFilters 标签

一旦我们有了这些数据基础,下一步就是在前端页面展示筛选选项。安企CMS提供了一个非常方便的archiveFilters标签,可以帮助您动态生成这些筛选条件。这个标签通常用于产品列表页或文章列表页的侧边栏或顶部区域。

archiveFilters标签会自动读取您内容模型中定义的自定义字段,并根据这些字段生成筛选链接。您需要将它放置在您的列表模板文件(如{模型table}/list.html)中。

以下是构建筛选界面的示例代码:

{# 假设这是您的列表页模板(例如:archive/list.html) #}
<div>
    <h3 style="font-size: 20px; margin-bottom: 15px;">房产筛选</h3>
    {% archiveFilters filters with moduleId="1" allText="不限" %}
        {% for item in filters %}
        <div style="margin-bottom: 20px;">
            <strong style="display: block; margin-bottom: 8px;">{{ item.Name }}:</strong>
            <ul style="list-style: none; padding: 0;">
                {% for val in item.Items %}
                <li style="display: inline-block; margin-right: 10px; padding: 5px 10px; border: 1px solid #eee; border-radius: 4px; {% if val.IsCurrent %}background-color: #007bff; color: white; border-color: #007bff;{% endif %}">
                    <a href="{{ val.Link }}" style="text-decoration: none; color: inherit;">{{ val.Label }}</a>
                </li>
                {% endfor %}
            </ul>
        </div>
        {% endfor %}
    {% endarchiveFilters %}
</div>

这里需要注意几个关键点:

  • moduleId="1":这里的1代表文章模型。如果您的筛选是针对产品模型,那么这里可能是moduleId="2",或者是您自定义模型的ID。您可以在后台“内容模型”页面查看每个模型的ID。
  • allText="不限":这是为每个筛选维度设置的“全部”或“不限”选项的显示文本。用户点击后,会移除该维度的筛选条件。
  • filters变量:archiveFilters标签会将所有生成的筛选条件组织成一个名为filters的数组对象。
  • item.Name:显示自定义字段的“参数名”(例如“房屋类型”)。
  • item.Items:一个数组,包含了该筛选条件下的所有选项。
  • val.Label:显示每个筛选选项的文本(例如“住宅”)。
  • val.Link:这是最重要的部分。它会自动生成带有相应筛选参数的URL。当用户点击时,页面会跳转到新的URL,并携带筛选参数。
  • val.IsCurrent:一个布尔值,如果当前选项已被选中,它会是true。您可以利用它来为当前选中的筛选条件添加active样式,给用户视觉反馈。

3. 显示过滤结果:结合 archiveList 标签

用户点击筛选条件后,页面需要展示匹配的结果。幸运的是,安企CMS的archiveList标签非常智能,它会自动读取当前URL中的查询参数,并根据这些参数来过滤内容。这意味着,您无需在archiveList标签中额外编写筛选逻辑,它会与archiveFilters生成的URL无缝衔接。

在同一个列表模板中,紧接着筛选区域的下方,您可以放置内容列表的显示代码:

{# 列表内容展示 #}
<div style="margin-top: 30px;">
    <h3 style="font-size: 20px; margin-bottom: 15px;">筛选结果</h3>
    {% archiveList archives with moduleId="1" type="page" limit="10" %}
        {% for item in archives %}
        <div style="border: 1px solid #ddd; padding: 15px; margin-bottom: 15px; border-radius: 5px;">
            <a href="{{ item.Link }}" style="text-decoration: none; color: #333; display: flex; align-items: center;">
                {% if item.Thumb %}
                <img src="{{ item.Thumb }}" alt="{{ item.Title }}" style="width: 100px; height: 75px; object-fit: cover; margin-right: 15px; border-radius: 3px;">
                {% endif %}
                <div>
                    <h4 style="margin: 0 0 8px 0; color: #007bff;">{{ item.Title }}</h4>
                    <p style="margin: 0 0 5px 0; color: #666;">{{ item.Description|truncatechars:100 }}</p>
                    <div style="font-size: 13px; color: #999;">
                        <span>分类: {% categoryDetail with name="Title" id=item.CategoryId %}</span>
                        <span style="margin-left: 10px;">发布时间: {{ stampToDate(item.CreatedTime, "2006-01-02") }}</span>
                        <span style="margin-left: 10px;">浏览量: {{ item.Views }}</span>
                    </div>
                    {# 这里可以展示自定义字段,例如“房屋类型”和“建筑面积” #}
                    {% archiveParams params with id=item.Id %}
                        {% for param in params %}
                            {% if param.FieldName == 'housing_type' %}
                                <span style="margin-left: 10px; font-size: 13px; color: #999;">房屋类型: {{ param.Value }}</span>
                            {% elif param.FieldName == 'area_size' %}
                                <span style="margin-left: 10px; font-size: 13px; color: #999;">建筑面积: {{ param.Value }}</span>
                            {% endif %}
                        {% endfor %}
                    {% endarchiveParams %}
                </div>
            </a>
        </div>
        {% empty %}
        <p style="text-align: center; color: #888;">没有找到符合条件的房产信息。</p>
        {% endfor %}
    {% endarchiveList %}
</div>

关键参数说明:

  • moduleId="1":同样,指定要获取哪个内容模型的文档列表。
  • type="page":这个参数告诉系统,我们要显示一个分页列表,与后面的分页标签配合使用。
  • limit="10":每页显示10条内容。
  • archives变量:archiveList标签会将过滤后的内容存储到archives变量中。
  • item.Link:内容的详情链接。
  • item.Title:内容标题。
  • item.Description:内容简介。
  • item.Thumb:内容的缩略图。 *

相关文章

如何在详情页显示内容模型中自定义的额外字段内容?

AnQiCMS 的核心优势之一就是其灵活的内容模型功能。它允许我们根据不同业务场景,比如产品、服务、活动等,为内容添加各种独有的自定义字段。这些自定义字段极大地丰富了内容的表达形式,让我们的网站内容更加专业和贴合需求。但有了这些额外字段后,如何让它们在前台详情页中优雅地呈现出来呢?今天

2025-11-08

安企CMS如何实现文章或产品内容的关键词自动替换显示?

在内容运营中,我们经常需要确保文章或产品描述中的特定关键词保持一致,甚至自动关联到相关页面,这对于SEO优化和提升用户体验至关重要。但手动逐一修改不仅耗时,还容易出错,尤其当网站内容量庞大时,更是一个巨大的挑战。安企CMS深知这一点,因此为我们提供了一项非常实用的功能,那就是文章或产品内容的关键词自动替换显示。 这项功能能够智能地识别出你预设的关键词或词组,并将其自动替换为指定的文本、链接

2025-11-08

在循环显示文章列表时,如何判断当前项是否为第一个或最后一个,以便特殊样式显示?

在网站内容管理中,经常会遇到这样的需求:希望文章列表、产品列表或者其他数据列表中的第一个或最后一个元素能有特殊的样式,比如第一个文章标题特别醒目,或者最后一个产品详情没有底部分隔线。这不仅有助于突出重点,也能让页面的视觉效果更富有层次感。安企CMS(AnQiCMS)强大的模板引擎为我们提供了简洁而高效的方式来实现这些定制化需求。 在安企CMS的模板系统中,我们通常会使用 `{% for ...

2025-11-08

如何在模板中定义和临时存储变量,以方便内容的显示和复用?

在构建网站时,我们经常会遇到需要重复显示某些信息、或者根据不同上下文灵活调整内容的情况。如果每次都硬编码,不仅效率低下,后期维护起来也相当麻烦。安企CMS(AnQiCMS)深知这一点,它的模板系统提供了多种灵活的方式,让我们可以在模板中定义和临时存储变量,从而实现内容的便捷显示和高效复用。 ### 为什么需要在模板中定义和存储变量? 简单来说,定义变量就好像给数据起一个临时的名字

2025-11-08

如何在模板中安全地输出包含HTML标签的内容,避免被浏览器转义?

在网站运营中,我们经常需要展示包含丰富排版和媒体内容的信息,例如精心编辑的文章详情、产品介绍或自定义页面。这些内容往往包含 HTML 标签,如图片标签 `<img>`、链接标签 `<a>`、段落标签 `<p>` 等。然而,如果你直接将这些内容输出到网页上,可能会发现它们并没有按照预期渲染,而是以文本形式原样显示了 HTML 标签,大大影响了用户体验和页面的美观度。 这并非 AnQiCMS

2025-11-08

如何截取长字符串或HTML内容的一部分,并在末尾显示省略号?

在网站内容运营中,我们常常会遇到这样的情况:文章列表页需要显示内容的摘要,产品详情页需要展示简短的介绍,或者在某些特殊模块中,我们需要从冗长的文本或包含HTML标签的内容中截取一部分,并在末尾加上“...”来提示用户内容未完。这样做不仅能有效节省页面空间,保持版面整洁,更能提升用户阅读体验,吸引他们点击查看完整内容。 要实现这样的功能,如果每次都手动截取,无疑会耗费大量时间和精力。幸运的是

2025-11-08

如何将用户输入的纯文本内容(包含换行符)格式化为HTML段落和换行符显示?

在网站内容管理中,我们经常会遇到这样的需求:用户在后台输入了一段纯文本内容,其中包含了一些自然的分段和换行,我们希望这些分段和换行在网站前端能够被正确地渲染为HTML的段落(`<p>`标签)和换行(`<br/>`标签),而不是简单地挤成一团或者被浏览器忽略。安企CMS提供了非常便捷且强大的模板过滤器来解决这个问题,让纯文本内容也能优雅地呈现在网页上。 ###

2025-11-08

如何将后台存储的时间戳数据转换为可读的日期和时间格式显示?

在安企CMS中管理网站内容时,我们经常会遇到需要展示日期和时间的情况。然而,后台数据库里存储的这些时间信息,通常以时间戳(timestamp)的形式存在,这对于机器处理来说非常高效,但对用户而言却难以直接阅读。例如,你可能会看到一串像 `1609470335` 这样的数字,它代表的是某个特定时刻,但我们希望它能显示为“2021年1月1日 12:25:35”这种更友好的格式。 幸运的是

2025-11-08