AnQiCMS 如何实现文章列表的参数筛选功能(如按自定义属性筛选)?

📅 👁️ 65

当网站内容日益丰富,用户往往希望能够更精准地找到他们感兴趣的信息,而不是在一堆无序的内容中大海捞针。对于运营者而言,提供灵活的文章列表筛选功能,不仅能显著提升用户体验,还能有效帮助用户发现更多关联内容,从而增加网站的停留时间和互动。

AnQiCMS 深知这一需求,通过其高度灵活的内容模型和强大的模板标签系统,让实现文章列表的参数筛选功能变得异常简单和直观。即使是自定义的属性,也能轻松融入筛选体系,为网站内容的管理和展示带来无限可能。

幕后准备:定义和管理你的自定义内容属性

要实现文章列表的参数筛选,我们首先需要为文章定义可供筛选的“属性”。在 AnQiCMS 中,这得益于其核心功能之一——灵活的内容模型

想象一下,你正在运营一个房产信息网站,除了传统的文章标题、内容、发布时间,你可能还需要为每套房产(也就是每篇文章)添加“房屋类型”(如住宅、商铺、公寓)、“所在区域”、“户型”(如一室、两室、三室)等自定义属性。

在 AnQiCMS 的后台,你可以通过以下步骤轻松实现这些自定义属性的设置:

  1. 进入内容模型管理: 在后台导航中找到“内容管理”下的“内容模型”。AnQiCMS 默认提供了文章和产品模型,你也可以根据需要创建新的模型。
  2. 添加自定义字段: 选择你需要添加属性的模型(例如“文章模型”),点击编辑进入模型详情。在这里,你会看到“内容模型自定义字段”区域。点击“添加字段”,就可以定义新的属性了。
  3. 配置字段类型: 为你的自定义属性选择合适的字段类型。比如,“房屋类型”可以选择“单项选择”或“下拉选择”,并列出“住宅”、“商铺”、“公寓”等选项。而“面积”这样的属性则可以选择“数字”类型。值得注意的是,这里的“参数名”和“调用字段”对于后续在模板中的使用非常关键,建议使用易于理解的英文或拼音作为“调用字段”,因为它将作为模板中的变量名。
  4. 保存并应用: 完成自定义字段的添加后,保存内容模型。之后,当你发布或编辑该模型下的文章时,就能看到并填写这些新增的自定义属性了。

这些自定义属性,就是我们实现文章列表筛选的基石。它们让你的内容更加结构化,为用户提供更精细的查找维度。

前端呈现:在模板中巧妙运用筛选标签

在后台定义好自定义属性并为文章填充数据后,接下来就是在网站前端展示这些筛选选项,并让文章列表能够根据用户的选择动态变化。AnQiCMS 提供了两个强大的模板标签来完美配合这一需求:archiveFiltersarchiveList

archiveFilters 标签:生成筛选选项

archiveFilters 标签的职责是生成可供用户点击的筛选条件。它会根据你指定的内容模型,自动读取所有可用的自定义筛选字段及其对应的值,然后为每个值生成一个带有筛选参数的链接。

例如,要在你的房产网站文章列表页生成“房屋类型”和“户型”的筛选菜单,你可以在模板中这样使用 archiveFilters

<div class="filter-area">
    {% archiveFilters filters with moduleId="你的文章模型ID" 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 %}
                <li class="{% if val.IsCurrent %}active{% endif %}">
                    <a href="{{val.Link}}">{{val.Label}}</a>
                </li>
                {% endfor %}
            </ul>
        </div>
    {% endfor %}
    {% endarchiveFilters %}
</div>

这里:

  • moduleId="你的文章模型ID" 告诉 AnQiCMS 你想为哪个内容模型生成筛选器(例如,文章模型通常是 1)。
  • allText="不限" 定义了“全部”选项的显示文本。
  • filters 变量会包含一个列表,其中每个 item 代表一个可筛选的自定义字段(如“房屋类型”),它的 Name 是字段的中文名,FieldName 是字段的英文标识。
  • 每个 item.Items 则是一个子列表,包含该字段的所有可选值(如“住宅”、“商铺”)。val.Label 是显示名称,val.Link 是点击后跳转的 URL,而 val.IsCurrent 则可以帮助你为当前选中的筛选条件添加 active 样式。

archiveList 标签:动态响应筛选结果

archiveList 标签用于在页面上展示文章列表。它的强大之处在于,当与 type="page" 参数结合使用时,它能智能地自动识别并响应 URL 中的筛选参数,从而动态地调整显示的文章内容。这意味着,你无需在 archiveList 标签中手动传递 archiveFilters 生成的筛选值,AnQiCMS 会自动完成匹配。

继续上面的房产网站例子,你的文章列表部分可以这样编写:

<div class="article-list">
    {% archiveList archives with moduleId="你的文章模型ID" type="page" limit="10" %}
        {% for item in archives %}
        <div class="article-item">
            <h3><a href="{{item.Link}}">{{item.Title}}</a></h3>
            <p>{{item.Description}}</p>
            {%- archiveParams params with id=item.Id %}
            {%- for param in params %}
                {%- if param.FieldName == "房屋类型" %} {# 假设你的自定义字段调用字段是"房屋类型" #}
                <span>房屋类型: {{param.Value}}</span>
                {%- endif %}
                {%- if param.FieldName == "面积" %} {# 假设你的自定义字段调用字段是"面积" #}
                <span>面积: {{param.Value}} 平方米</span>
                {%- endif %}
            {%- endfor %}
            {%- endarchiveParams %}
            <span>发布日期: {{stampToDate(item.CreatedTime, "2006-01-02")}}</span>
        </div>
        {% empty %}
        <p>抱歉,没有找到符合条件的房产信息。</p>
        {% endfor %}
    {% endarchiveList %}

    {# 分页功能同样无缝衔接 #}
    {% pagination pages with show="5" %}
        <div class="pagination-controls">
            <a class="{% if pages.FirstPage.IsCurrent %}active{% endif %}" href="{{pages.FirstPage.Link}}">{{pages.FirstPage.Name}}</a>
            {% if pages.PrevPage %}<a href="{{pages.PrevPage.Link}}">{{pages.PrevPage.Name}}</a>{% endif %}
            {% for page in pages.Pages %}<a class="{% if page.IsCurrent %}active{% endif %}" href="{{page.Link}}">{{page.Name}}</a>{% endfor %}
            {% if pages.NextPage %}<a href="{{pages.NextPage.Link}}">{{pages.NextPage.Name}}</a>{% endif %}
            <a class="{% if pages.LastPage.IsCurrent %}active{% endif %}" href="{{pages.LastPage.Link}}">{{pages.LastPage.Name}}</a>
        </div>
    {% endpagination %}
</div>

这里:

  • moduleId 确保我们获取的是正确内容模型的文章。
  • type="page" 开启了分页模式,同时也让 archiveList 能够监听 URL 中的筛选参数。
  • limit="10" 控制每页显示的文章数量。

相关文章

如何在 AnQiCMS 模板中显示 Markdown 格式的文章内容并正确渲染为HTML?

在内容管理系统中,Markdown 已经成为许多内容创作者偏爱的写作格式,它简洁、高效,并且易于转换为结构化的 HTML。对于 AnQiCMS 的用户而言,利用 Markdown 来撰写文章,不仅能提升写作效率,还能更好地组织内容结构。幸运的是,AnQiCMS 深度支持 Markdown 格式的文章内容,并提供了完善的机制来确保它们在网站前端被正确渲染成美观的 HTML 页面。 ### 开启

2025-11-07

AnQiCMS 模板如何引用其他模板文件(如`header.html`、`footer.html`)以实现代码复用?

在网站建设和维护中,如何高效地管理代码、避免重复劳动,是提升开发效率和确保网站一致性的关键。对于使用 AnQiCMS 构建网站的用户来说,其灵活的模板引擎提供了强大的代码复用机制,让我们可以轻松地引用其他模板文件,例如通用的页眉 (header) 和页脚 (footer),从而实现模块化开发。 AnQiCMS 的模板设计借鉴了 Django 模板引擎的语法特性

2025-11-07

如何在 AnQiCMS 模板中定义并使用临时变量,以简化复杂数据处理?

在 AnQiCMS 模板开发中,我们常常会遇到需要处理或重用复杂数据的情况。直接在模板中重复书写复杂的逻辑或数据路径不仅会让代码变得冗长、难以阅读,还会影响维护效率。这时候,巧妙地利用临时变量,就能让模板代码变得更加清晰、简洁,数据处理也更加灵活。 AnQiCMS 的模板引擎提供了强大且灵活的变量定义机制,可以帮助我们有效地管理和处理页面数据。它主要通过 `{% with %}` 和 `{%

2025-11-07

AnQiCMS 模板如何遍历数组或对象列表并显示循环计数和剩余数量?

在网站内容管理中,动态展示列表数据是一项基本而又关键的功能。无论是文章列表、产品展示还是用户评论,我们都需要高效地将数据呈现在用户面前。而在这个过程中,如何清晰地标示列表项的顺序,或者告知用户还有多少内容未浏览,就能极大地提升用户体验和内容的可读性。安企CMS(AnQiCMS)凭借其灵活的模板引擎,能够帮助我们轻松实现这些需求。 AnQiCMS的模板系统采用了类似Django的语法

2025-11-07

如何在 AnQiCMS 模板中显示文章的评论列表并支持分页?

在 AnQiCMS 模板中优雅地展示文章评论列表与分页 文章评论是网站互动的重要组成部分,它不仅能提升用户参与度,还能为网站内容带来更丰富的讨论和价值。对于运营者来说,如何在页面上清晰、高效地展示这些评论,并支持分页功能,是提升用户体验的关键。AnQiCMS 提供了一套直观且强大的模板标签,让您轻松实现这一目标。 ### 了解 AnQiCMS 模板基础 AnQiCMS 采用类似

2025-11-07

AnQiCMS 模板如何集成留言表单,并动态显示后台配置的自定义表单字段?

在当今的数字世界里,网站不仅仅是信息展示的平台,更是与用户互动沟通的重要桥梁。一个设计精良、功能完备的留言表单,能够极大地提升用户体验,帮助网站收集反馈、获取商机。安企CMS(AnQiCMS)深谙此道,提供了强大的留言表单集成能力,尤其令人赞叹的是,它允许我们通过后台灵活配置自定义表单字段,并在前端模板中动态地呈现这些字段,从而满足各种个性化的业务需求

2025-11-07

如何在 AnQiCMS 模板中获取并显示当前年份?

在构建和维护网站时,我们经常需要在页面上显示一些动态信息,例如当前年份。这对于版权声明、年度报告或任何需要实时年份信息的场景都非常实用。AnQiCMS 凭借其简洁高效的模板系统,让获取并显示当前年份变得轻而易举。 AnQiCMS 的模板系统借鉴了 Django 模板引擎的语法,这意味着它提供了直观的标签和变量来操作内容。接下来,我们将探讨如何在你的 AnQiCMS 模板中轻松实现这一功能

2025-11-07

AnQiCMS 如何在模板中实现多语言站点的切换链接显示,并设置`hreflang`?

在AnQiCMS中构建多语言网站,并提供便捷的语言切换功能以及正确的SEO设置,是拓展国际市场和提升用户体验的关键一步。作为一个基于Go语言开发的现代化内容管理系统,AnQiCMS在这方面提供了强大而灵活的支持,让内容运营者能够轻松驾驭全球化的内容发布需求。 ### 理解AnQiCMS的多语言能力 AnQiCMS在设计之初就充分考虑了全球化内容推广的需求

2025-11-07