安企CMS(AnQiCMS)为网站运营者提供了强大的内容管理能力,其中一项非常实用的功能便是通过筛选条件动态调整文档列表的显示内容。这不仅能极大地提升用户体验,帮助访问者快速找到所需信息,更能优化网站的内部链接结构,间接助力搜索引擎优化(SEO)。

想象一下,如果您的网站内容丰富,但用户每次查找特定信息都只能通过繁琐的翻页或单一的关键词搜索,这无疑会让人感到沮丧。而动态筛选功能,就像给您的网站内容配备了一个智能导航系统,用户只需点击几下,就能精准地筛选出他们最感兴趣的文档列表,让内容呈现更加智能和个性化。

核心机制:文档列表标签与筛选器的联动

安企CMS实现这一功能,主要依赖于其强大的模板标签系统,特别是archiveList(文档列表标签)和archiveFilters(文档参数筛选标签)的巧妙配合。

archiveList是您在模板中展示文档列表的核心工具,它本身就支持多种基本的筛选和排序参数,例如:

  • moduleId:指定展示哪个内容模型下的文档(比如文章模型或产品模型)。
  • categoryId:限定在特定分类或多个分类下查找文档。
  • flag:根据推荐属性(如头条、推荐、幻灯等)来筛选。
  • order:定义文档的排序方式,如按最新发布、浏览量等。
  • q:用于关键词搜索,实现模糊匹配。
  • limit:控制每页显示的文档数量,配合分页标签使用。

这些参数已经能满足大部分列表展示需求。然而,当您需要更细致、更多维度的筛选时,例如按”产品颜色”、”房屋户型”或”文章主题”进行筛选,archiveFilters标签便应运而生。

构建多维度筛选:从内容模型开始

要实现自定义的动态筛选,第一步是在安企CMS的后台内容模型中做好准备。

内容模型是安企CMS的灵活之处,它允许您为不同类型的内容(如文章、产品、案例等)定义专属的字段。当您需要按特定条件进行筛选时,就需要在相应的内容模型中创建“自定义字段”。

例如,您运营一个房产网站,希望用户能按“户型”、“面积区间”、“朝向”等条件筛选房源。您就可以在“房源模型”中添加这些字段:

  • 户型:字段类型可选“单项选择”或“下拉选择”,并预设选项如“一室一厅”、“两室两厅”等。
  • 面积区间:字段类型可选“数字”,让用户输入范围。
  • 朝向:字段类型可选“单项选择”,预设选项如“朝南”、“朝北”等。

这些自定义字段正是archiveFilters标签获取筛选条件的来源。

在模板中创建筛选界面

在内容模型中定义好字段后,接下来就是在前端模板中,使用archiveFilters标签来生成筛选界面。这个标签通常用于文档列表页或文档首页。

archiveFilters标签会自动解析当前内容模型中支持筛选的自定义字段,并生成相应的筛选选项列表。它提供了几个关键参数:

  • moduleId:指定要获取哪个模型下的筛选器(与archiveList中的moduleId保持一致)。
  • allText:定义“全部”或“不限”这类默认选项的显示文本。
  • siteId:如果您使用了多站点功能,可以指定获取特定站点的筛选器。

archiveFilters标签被执行时,它会返回一个包含所有筛选器组(对应您定义的自定义字段)的变量。每个筛选器组又包含多个筛选项(对应您为字段预设的选项)。最重要的是,每个筛选项都会自动生成一个带有相应筛选参数的URL链接。

例如,一段使用archiveFilters的模板代码可能看起来像这样:

{# 假设这是房产列表页,moduleId=10代表房源模型 #}
<div>
    <h3>筛选房源</h3>
    {% archiveFilters filters with moduleId="10" allText="不限" %}
        {% for filterGroup in filters %}
            <div class="filter-group">
                <span>{{ filterGroup.Name }}:</span> {# 例如:户型、朝向 #}
                <ul>
                    {% for option in filterGroup.Items %}
                        <li class="{% if option.IsCurrent %}active{% endif %}">
                            <a href="{{ option.Link }}">{{ option.Label }}</a> {# 例如:一室一厅、朝南 #}
                        </li>
                    {% endfor %}
                </ul>
            </div>
        {% endfor %}
    {% endarchiveFilters %}
</div>

这段代码会动态生成一系列的筛选链接,例如点击“一室一厅”后,页面的URL可能变成/fangyuan/list.html?huxing=yishiyiting

文档列表与筛选结果的动态匹配

一旦用户点击了某个筛选链接,页面的URL中就会包含相应的筛选参数(例如huxing=yishiyiting)。此时,神奇的地方在于archiveList标签,它能智能地识别并自动应用URL中的这些参数来调整文档列表的显示内容。

您无需在archiveList标签中手动解析URL参数。只需确保archiveListtype参数设置为page(表示启用分页功能,通常与筛选和搜索结合使用),它就会自动与archiveFilters生成的链接完美联动。

例如,展示房源列表的代码:

{# 房源列表部分 #}
<ul class="house-list">
    {% archiveList houses with moduleId="10" type="page" limit="12" %} {# type="page"是关键 #}
        {% for item in houses %}
            <li>
                <h4><a href="{{ item.Link }}">{{ item.Title }}</a></h4>
                <p>{{ item.Description }}</p>
                {# 这里还可以显示自定义字段,例如 item.huxing, item.chaoxiang #}
                <p>户型: {{ item.huxing }}</p>
            </li>
        {% empty %}
            <li>暂无符合条件的房源。</li>
        {% endfor %}
    {% endarchiveList %}
</ul>

{# 分页部分 #}
<div class="pagination">
    {% pagination pages with show="5" %}
        {# 渲染分页链接,这些链接也会自动带上筛选参数 #}
        {% for pageItem in pages.Pages %}
            <a href="{{ pageItem.Link }}" class="{% if pageItem.IsCurrent %}active{% endif %}">{{ pageItem.Name }}</a>
        {% endfor %}
    {% endpagination %}
</div>

当用户点击“一室一厅”的筛选链接后,archiveList会自动根据URL中的huxing=yishiyiting参数,只显示户型为“一室一厅”的房源。同时,pagination标签生成的分页链接也会自动包含这些筛选参数,确保用户在翻页时筛选条件依然有效。

搜索与筛选的整合

除了自定义筛选,您还可以将关键词搜索功能与动态筛选结合起来。archiveList标签的q参数就是为此设计的。当URL中同时存在q=关键词和自定义筛选参数时,archiveList会智能地将两者结合,提供更精准的搜索结果。

伪静态规则的重要性

为了让这些动态生成的筛选URL更美观、更利于SEO,配置合适的伪静态规则至关重要。安企CMS提供了灵活的伪静态配置选项,您可以根据需要设置URL结构,例如将/fangyuan/list.html?huxing=yishiyiting美化为/fangyuan/huxing-yishiyiting/,这不仅提升了用户体验,也让搜索引擎更容易理解页面的主题和结构。

通过上述机制,安企CMS让网站内容的动态筛选和展示变得简单高效。运营者只需在后台定义好内容模型和字段,并在模板中合理调用标签,就能为用户提供一个高度可定制和友好的内容浏览体验,从而提升网站的专业性和吸引力。


常见问题 (FAQ)

  1. 动态筛选条件能与普通关键词搜索同时使用吗? 当然可以。安企CMS的archiveList标签非常智能,它会同时识别并应用URL中的自定义筛选参数(由archiveFilters生成)和关键词搜索参数(q参数)。这意味着用户可以先筛选出“一室一厅”的房源,再在这些结果中搜索包含“学区房”的房源,系统会一并处理这些查询条件。

  2. 如果我在内容模型中定义了自定义字段,但archiveFilters没有显示这些字段怎么办? 首先,请检查您在`archiveFilters