如何使用AnQiCMS的筛选功能展示特定条件下的文档列表?

在AnQiCMS中管理海量内容时,如何让用户快速找到他们所需的信息,是内容运营的关键之一。幸运的是,AnQiCMS提供了强大的筛选功能,让您能够根据特定条件灵活展示文档列表,从而极大地提升网站的用户体验和内容检索效率。

明确您的筛选需求:从后台内容模型开始

要利用AnQiCMS的筛选功能,首先需要明确您希望用户通过哪些条件来查找内容。这通常需要您在后台的内容模型中进行一些预设。AnQiCMS支持高度灵活的内容模型,您可以根据业务需求自定义文章、产品、活动等各种类型的内容结构。

比如,如果您运营一个房产网站,可能希望用户能根据“房屋类型”(如住宅、商铺)、“区域”(如市中心、郊区)和“价格区间”来筛选房源信息。要实现这些筛选,您需要在后台的“内容管理”菜单下,进入“内容模型”设置。在这里,您可以编辑或创建新的内容模型,并为其添加自定义字段。

在添加自定义字段时,选择合适的“字段类型”至关重要。例如,对于“房屋类型”或“区域”,您可以选择“单项选择”或“下拉选择”,并预设好所有可能的选项(如住宅、商铺;市中心、郊区)。这些预设的选项,就是未来用户在前端页面上可以点击选择的筛选条件。确保这些字段被合理定义,是前端筛选功能正常工作的基础。

巧妙布局前端:利用archiveFilters标签构建筛选界面

完成了后台内容模型的设置,并为您的文档内容填充了相应的字段信息后,接下来我们就可以在网站的前端模板中,利用AnQiCMS内置的标签来构建用户可见的筛选界面了。

AnQiCMS的模板系统采用了类似Django的语法,其中archiveFilters标签就是专门用来生成筛选条件的。这个标签会根据您指定的内容模型,自动提取出可供筛选的字段及其预设值,并将其转化为用户可以点击的链接。

假设我们要在产品列表页添加筛选功能,通常会在模板文件中这样使用archiveFilters标签:

{# 假设我们的产品模型ID是2,并希望筛选条件显示“全部”选项 #}
<div class="filter-section">
    {% archiveFilters filters with moduleId="2" allText="不限" %}
        {% for item in filters %}
        <div class="filter-group">
            <span class="filter-label">{{item.Name}}: </span> {# 输出筛选组的名称,如“房屋类型” #}
            <ul class="filter-options">
                {% for val in item.Items %}
                {# val.IsCurrent 会判断当前选项是否被选中,方便添加样式 #}
                <li class="filter-option {% if val.IsCurrent %}active{% endif %}">
                    <a href="{{val.Link}}">{{val.Label}}</a> {# 输出筛选选项的名称和点击链接 #}
                </li>
                {% endfor %}
            </ul>
        </div>
        {% endfor %}
    {% endarchiveFilters %}
</div>

在这段代码中,moduleId="2"指定了我们想要筛选的是ID为2的内容模型(例如“产品模型”)。allText="不限"则设置了每个筛选组中“全部”选项的显示文字。archiveFilters标签会返回一个filters变量,它是一个包含多个筛选组的数组。我们通过两层for循环,分别遍历筛选组(item)和每个组内的筛选选项(val),从而动态生成筛选界面。每个选项的Link属性会自动生成带有相应筛选参数的URL,IsCurrent属性则可以帮助我们为当前选中的筛选条件添加高亮样式,提升用户体验。

联动展示:archiveList标签让筛选结果一目了然

当用户在筛选界面上点击某个筛选条件时,页面会跳转到带有特定查询参数的URL。此时,就需要archiveList标签登场,它能够根据这些URL中的查询参数,智能地展示符合条件的文档列表。

archiveList标签是AnQiCMS中用于获取文档列表的核心标签。当您在模板中配置它时,如果URL中包含了由archiveFilters生成的筛选参数,archiveList会自动识别并应用这些筛选条件。

以下是一个结合了筛选和分页功能的文档列表示例:

<div class="document-list">
    {% archiveList archives with moduleId="2" type="page" limit="10" %}
        {% for item in archives %}
        <div class="document-item">
            <a href="{{item.Link}}">
                <img src="{{item.Thumb}}" alt="{{item.Title}}" class="document-thumb">
                <h3 class="document-title">{{item.Title}}</h3>
                <p class="document-desc">{{item.Description}}</p>
            </a>
            <div class="document-meta">
                {# 假设“房屋类型”是您自定义的字段,可以直接通过item.字段名调用 #}
                <span>房屋类型: {{item.房屋类型}}</span> 
                <span>发布日期: {{stampToDate(item.CreatedTime, "2006-01-02")}}</span>
            </div>
        </div>
        {% empty %}
        <p>抱歉,没有找到符合条件的文档。</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}}">{{pages.FirstPage.Name}}</a>
            {% if pages.PrevPage %}
            <a class="pagination-link" href="{{pages.PrevPage.Link}}">{{pages.PrevPage.Name}}</a>
            {% endif %}
            {% for page in pages.Pages %}
            <a class="pagination-link {% if page.IsCurrent %}active{% endif %}" href="{{page.Link}}">{{page.Name}}</a>
            {% endfor %}
            {% if pages.NextPage %}
            <a class="pagination-link" href="{{pages.NextPage.Link}}">{{pages.NextPage.Name}}</a>
            {% endif %}
            <a class="pagination-link {% if pages.LastPage.IsCurrent %}active{% endif %}" href="{{pages.LastPage.Link}}">{{pages.LastPage.Name}}</a>
        {% endpagination %}
    </div>
</div>

在这个例子中,archiveList同样指定了moduleId="2"type="page"表示我们希望内容分页显示,limit="10"则控制每页显示10条文档。当URL中带有筛选参数(比如.../products?房屋类型=住宅&区域=市中心)时,archiveList会自动根据这些参数筛选出对应的产品文档,并配合pagination标签生成正确的分页链接。您还可以直接通过{{item.您自定义的字段名}}来调用文档中的自定义字段内容,丰富列表展示。

总结

AnQiCMS的筛选功能通过后台灵活的内容模型定义和前端archiveFiltersarchiveList标签的联动,为网站提供了强大且易于实现的内容筛选能力。从定义筛选维度、构建筛选界面到展示筛选结果,整个过程流畅且高度可定制,能有效帮助您的用户快速定位所需信息,从而提升整体网站的实用性和用户满意度。

常见问题解答 (FAQ)

1. 我可以在一个页面上同时使用多个筛选条件吗?AnQiCMS会如何处理? 是的,AnQiCMS的筛选功能支持同时应用多个筛选条件。当用户选择多个条件时,archiveFilters标签生成的链接会将所有条件作为URL查询参数附加。archiveList标签会自动解析这些参数,并执行“与”(AND)逻辑的筛选,即只显示同时满足所有选中条件的文档。例如,如果同时选择了“房屋类型:住宅”和“区域:市中心”,则只会显示市中心的住宅房源。

2. 如何设置某个筛选条件默认被选中,或者在加载页面时显示一个特定的筛选结果? archiveFilters标签本身会根据当前URL中的查询参数,自动标记相应的筛选选项为IsCurrent=true。如果您想在页面初始加载时就显示特定筛选结果,可以在页面URL中直接加入对应的查询参数。例如,如果希望默认显示“房屋类型为住宅”的文档,可以将页面URL设置为 `您的域名/