如何通过文档参数筛选标签,实现多条件的列表内容组合显示?

在内容运营中,我们常常需要展示不同主题、不同属性的内容列表,并允许访问者根据自身需求进行多条件筛选,例如一个房产网站可能需要按“房屋类型”、“所在区域”、“面积范围”等多维度组合筛选房源。如果每次都通过人工组织或开发定制,不仅效率低下,也难以维护。安企CMS(AnQiCMS)提供了一套灵活且强大的文档参数筛选机制,能够帮助我们轻松实现这种多条件的列表内容组合显示。

接下来,我们将深入探讨如何利用安企CMS的文档参数筛选标签,构建出既满足用户需求又便于管理的动态内容列表。

构建灵活筛选体系的基石:自定义内容模型

在安企CMS中,实现多条件筛选的第一步,是为我们的内容定义清晰、可筛选的属性。这得益于其强大的“灵活的内容模型”功能。我们可以根据业务需求创建或修改内容模型(例如“文章模型”、“产品模型”,甚至可以自定义“房源模型”、“商品模型”等),并在其中添加各种“自定义字段”。

这些自定义字段正是我们实现多条件筛选的源头。当我们添加字段时,可以选择不同的字段类型,如单行文本、数字、多行文本、单项选择、多项选择和下拉选择。其中,单项选择、多项选择和下拉选择这三种类型尤其适合用作筛选条件。例如,在“房源模型”中,我们可以添加:

  • 房屋类型(下拉选择:住宅、商铺、公寓)
  • 户型(单项选择:一室、两室、三室)
  • 装修情况(多项选择:精装、简装、毛坯)
  • 所属区域(单行文本,但在后台可配置为筛选条件)

在定义这些字段时,我们还需要为选择、单选、多选类型的字段提供预设的“默认值”,这些值将作为前端筛选界面上的可选项目。

内容发布:为筛选提供数据

自定义内容模型和字段定义完成后,我们在发布或编辑文档时,就需要针对性地填写这些自定义字段的内容。只有当文档包含了这些参数信息,它们才能够在前端的筛选列表中被正确地检索和展示。例如,发布一篇房源信息时,我们会选择其“房屋类型”、“户型”和“装修情况”,并填写“所属区域”。

设计前端筛选界面:archiveFilters标签的妙用

现在,我们有了可筛选的内容和定义好的筛选维度。接下来,就是如何在网站前端展现这些筛选条件。安企CMS提供了archiveFilters标签,专门用于生成这些筛选器。

这个标签会智能地读取您在内容模型中定义的自定义字段,并根据当前页面的URL动态生成筛选链接。我们可以将其放置在任何需要展示筛选器的地方,例如列表页的侧边栏或顶部。

以下是一个典型的archiveFilters标签及其使用示例:

{# 参数筛选代码 #}
<div class="filter-section">
    <div class="filter-title">参数筛选:</div>
    {% archiveFilters filters with moduleId="1" allText="全部" %}
        {% for item in filters %}
        <ul class="filter-group">
            <li class="group-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>

在这个代码片段中:

  • filters是我们自定义的变量名,用于接收archiveFilters标签返回的数据。
  • moduleId="1"指定了我们希望筛选的是ID为1的内容模型(例如“文章模型”)。如果我们要筛选“产品模型”或“房源模型”,就需要替换成对应的模型ID。
  • allText="全部"设置了每个筛选组中“全部”选项的显示文本,如果不想显示,可以设为allText=false
  • {% for item in filters %} 循环遍历所有可用的筛选参数,item.Name会显示参数的中文名(如“房屋类型”),item.FieldName是其对应的字段名。
  • {% for val in item.Items %} 接着,我们遍历每个参数下的可选值,val.Label是选项的显示文本(如“住宅”),而val.Link则是由安企CMS自动生成的、包含了当前筛选条件的URL。
  • {% if val.IsCurrent %}active{% endif %} 这一行代码非常实用,它会自动判断当前选项是否已被选中,从而方便我们为选中项添加CSS样式,提升用户体验。

通过这种方式,archiveFilters标签不仅帮我们构建了筛选器UI,更重要的是,它自动处理了筛选逻辑,将选中的参数作为URL的查询字符串(例如 ?house_type=住宅&area=市中心)附加到链接上。

动态展示内容列表:archiveList标签的智能响应

有了筛选界面,我们就需要一个能够根据这些筛选条件动态展示内容的列表。安企CMS的archiveList标签在这里展现了它的智能之处。

archiveList标签在type="page"模式下,不仅能够实现分页功能,它还会自动解析当前URL中的查询参数,并将这些参数作为筛选条件来查询匹配的文档内容。这意味着,我们无需在模板中手动获取URL参数,再传递给archiveList,一切都是自动进行的!

以下是一个与上述筛选器配合使用的archiveList标签示例:

”`twig {# 文档列表代码 #}

{% archiveList archives with moduleId=“1” type=“page” limit=“10” %}

{% for item in archives %}
<div class="list-item">
    <a href="{{item.Link}}">
        <h5 class="item-title">{{item.Title}}</h5>
        <p class="item-description">{{item.Description}}</p>
        <div class="item-meta">
            <span>分类:{% categoryDetail with name="Title" id=item.CategoryId %}</span>
            <span>发布日期:{{stampToDate(item.CreatedTime, "2006-01-02")}}</span>
            <span>阅读量:{{item.Views}}</span>
        </div>
    </a>
    {% if item.Thumb %}
    <a href="{{item.Link}}" class="item-thumb">
        <img alt="{{item.Title}}" src="{{item.Thumb}}">
    </a>
    {% endif %}
</div>
{% empty %}
<p class="no-content">该列表没有任何内容</p>
{% endfor %}

{% endarchiveList %}

{# 分页代码 #}
<div class="pagination-section">
    {% pagination pages with show="5" %}
        <a class="pagination-link {% if pages.FirstPage.IsCurrent %}active{% endif %}" href="{{pages.FirstPage.Link}}">首页</a>
        {% if pages.PrevPage %}
        <a class="pagination-link" href="{{pages.PrevPage.Link}}">上一页</a>
        {% endif %}
        {% for item in pages.Pages %}
        <a class="pagination-link {% if item.IsCurrent %}active{% endif %