在使用安企CMS管理网站内容时,我们经常需要根据特定的关键词来查找并展示相关的文档列表。无论是为了创建一个站内搜索结果页,还是在特定专题页面展示与某个主题紧密关联的内容,掌握关键词筛选的方法都至关重要。安企CMS提供了灵活且强大的模板标签功能,使得这项任务变得直观而高效。

关键词筛选的基础:archiveList 标签的 q 参数

安企CMS通过其核心的archiveList标签来处理文档列表的获取。这个标签不仅能根据分类、模型等常规条件筛选,还提供了一个非常实用的q参数,专门用于基于关键词的标题搜索。

当你需要在网站前端根据用户输入的关键词来显示文档时,q参数就派上了用场。例如,如果用户在搜索框中输入“安企CMS教程”,我们就可以将这个关键词传递给archiveList标签,它便会自动从文档标题中匹配包含“安企CMS教程”的所有文档,并将它们列出来。

一个基本的应用场景是在搜索结果页。用户通过搜索表单提交关键词后,后端会接收到这个关键词,然后将它作为q参数的值,在模板中调用archiveList标签:

<form method="get" action="/search">
    <div>
        <input type="text" name="q" placeholder="请输入搜索关键词" value="{{urlParams.q}}">
        <button type="submit">搜索</button>
    </div>
</form>

{% archiveList archives with type="page" q=urlParams.q limit="10" %}
    {% for item in archives %}
    <li>
        <a href="{{item.Link}}">
            <h5>{{item.Title}}</h5>
            <p>{{item.Description}}</p>
            <div>发布日期:{{stampToDate(item.CreatedTime, "2006-01-02")}}</div>
        </a>
    </li>
    {% empty %}
    <li>
        抱歉,没有找到符合“{{urlParams.q}}”关键词的文档。
    </li>
    {% endfor %}
{% endarchiveList %}

{% pagination pages with show="5" %}
    <!-- 分页导航代码 -->
{% endpagination %}

在上面的示例中,urlParams.q会动态获取URL中名为q的查询参数值,然后将其作为关键词传递给archiveListtype="page"参数则表示我们希望对结果进行分页处理,结合pagination标签可以方便地生成分页导航。

利用内容模型自定义字段进行高级筛选

除了对文档标题进行关键词筛选,安企CMS更强大的地方在于它支持自定义内容模型。这意味着我们可以为不同的内容类型(如文章、产品、案例等)添加专属的自定义字段。这些自定义字段不仅可以丰富内容详情,还能作为筛选条件,实现更精准的关键词筛选。

在文档的“其他参数”中定义的这些自定义字段,例如“房屋类型”、“地区”、“价格区间”等,都可以在前端作为筛选条件。实现这种高级筛选的关键在于:

  1. 在后台内容模型中定义可筛选字段:在内容模型设置中,为需要筛选的字段勾选“可筛选”选项。
  2. 通过URL查询参数传递筛选值:在前端,我们可以将自定义字段的名称和值以URL查询参数的形式(例如?房屋类型=住宅&地区=上海)添加到文档列表页的URL中。
  3. 使用archiveFilters标签生成筛选选项:为了方便用户选择筛选条件,可以使用archiveFilters标签在页面上动态生成这些自定义字段的筛选选项。这个标签会根据你定义的内容模型和当前URL的筛选状态,自动生成带有正确链接和选中状态的筛选列表。

例如,如果我们有一个房产模型,并定义了“房屋类型”和“地区”等自定义字段,我们可以在列表页这样组织:

<div>
    <h3>房源筛选</h3>
    {% archiveFilters filters with moduleId="1" allText="不限" %}
        {% for item in filters %}
        <ul>
            <li>{{item.Name}}: </li> {# 例如:房屋类型 #}
            {% for val in item.Items %}
            <li class="{% if val.IsCurrent %}active{% endif %}">
                <a href="{{val.Link}}">{{val.Label}}</a>
            </li>
            {% endfor %}
        </ul>
        {% endfor %}
    {% endarchiveFilters %}
</div>

{# 文档列表会根据URL中的筛选参数自动调整 #}
{% archiveList archives with type="page" moduleId="1" limit="10" %}
    {% for item in archives %}
    <li>
        <a href="{{item.Link}}">
            <h5>{{item.Title}}</h5>
            <p>{{item.Description}}</p>
        </a>
    </li>
    {% endfor %}
    {% empty %}
    <li>
        没有找到符合条件的房源。
    </li>
{% endarchiveList %}

{% pagination pages with show="5" %}
    <!-- 分页导航 -->
{% endpagination %}

在这个例子中,archiveFilters标签会生成“房屋类型”、“地区”等筛选条件,每个条件选项都会生成一个链接,点击后会更新URL参数并重新加载文档列表,archiveList标签则会根据URL中传递的所有筛选参数(包括关键词q和自定义字段)来展示匹配的文档。

模板集成与展示要点

在将这些筛选功能集成到您的网站模板时,请注意以下几点:

  • 一致性:确保搜索表单的name属性(如name="q")与archiveList标签中的q参数对应。
  • 用户体验:当用户进行筛选或搜索后,保持筛选条件在页面上可见,并清晰地指示当前选中的筛选状态,可以显著提升用户体验。archiveFilters标签的IsCurrent属性在这方面提供了很好的支持。
  • 分页处理:筛选后的文档列表通常也需要分页显示,所以别忘了搭配pagination标签。
  • 空结果提示:使用for循环的empty块来优雅地处理没有找到匹配文档的情况,给用户友好的提示。

通过上述方法,安企CMS使得根据关键词筛选并显示特定文档列表变得非常灵活和强大,无论是简单的站内搜索还是复杂的 faceted navigation(多维度筛选),都能轻松实现。


常见问题 (FAQ)

1. 我想创建一个专门的搜索页面,用户输入关键词后显示结果,应该如何实现? 您可以通过创建一个名为search/index.html的模板文件来实现。在该模板中,放置一个搜索表单,action属性指向/searchinput字段的name属性设置为q。然后,使用archiveList标签,并将q参数的值设置为urlParams.q来获取用户输入的关键词对应的文档列表。同时,结合pagination标签可以实现搜索结果的分页显示。

2. 除了关键词搜索,我还能同时根据文档的“地区”和“房屋类型”进行筛选吗? 当然可以。安企CMS的archiveList标签支持接收多个URL查询参数作为筛选条件。如果您的内容模型中定义了“地区”和“房屋类型”等自定义字段,并且这些字段被标记为可筛选,那么您只需在URL中同时包含这些参数即可,例如/search?q=公寓&地区=上海&房屋类型=住宅archiveList会根据所有匹配的条件来筛选文档。您也可以使用archiveFilters标签在前端生成这些多维度的筛选选项。

3. 如果搜索或筛选后没有找到任何文档,页面会显示什么?archiveList标签内部的for循环中,您可以添加一个{% empty %}块。当没有任何文档匹配筛选条件时,for循环将执行empty块内的内容,而不是循环遍历文档。这样,您就可以在这里放置一个友好的提示信息,例如“抱歉,没有找到符合条件的文档。”