在安企CMS中,内容的自定义属性显示与筛选是实现灵活、个性化网站功能的核心。借助模板标签中的archiveParamsarchiveFilters,我们可以轻松地在前端展示自定义内容字段,并为用户提供基于这些字段进行内容筛选的强大功能,从而极大提升网站的用户体验和内容的可发现性。

archiveParams 标签:自定义属性的灵活展示

在安企CMS中,我们首先通过“内容模型”功能为不同类型的内容(例如文章、产品)定义各自独特的字段。除了标题、内容、发布时间等系统内置字段外,我们还可以添加像“作者”、“来源”、“价格”、“尺寸”等自定义字段。这些自定义字段是网站内容个性化的基础。

当我们需要在文档详情页(比如一篇产品介绍或一篇专业文章)上展示这些自定义属性时,archiveParams标签便派上了用场。它的主要作用是获取当前文档或指定文档所关联的全部自定义参数。

使用archiveParams非常直观。你可以将其放置在文档详情页的模板中,它会自动获取当前页面文档的自定义参数。如果需要获取特定ID文档的参数,也可以通过id参数来指定。

archiveParams标签返回的自定义参数有两种常见的访问方式:

  1. 作为固定排序的数组(默认行为,sorted=true): 当我们想按顺序展示所有自定义字段时,这种方式非常适用。标签会返回一个包含每个自定义字段名称(Name)和值(Value)的对象数组。我们可以在模板中通过{% for item in params %}这样的循环结构,遍历并展示所有自定义参数,例如:

    {% archiveParams params %}
    <div>
        {% for item in params %}
        <p>{{item.Name}}:{{item.Value}}</p>
        {% endfor %}
    </div>
    {% endarchiveParams %}
    

    这在产品详情页显示所有规格参数时特别方便,无需预设字段名,系统会自动列出后台添加的所有参数。

  2. 作为无序的Map对象(sorted=false): 如果我们只想精确地获取某个特定自定义字段的值,并且知道其调用字段名(例如,后台自定义字段的“调用字段”设置为author),我们可以将sorted参数设置为false。这样,archiveParams将返回一个Map,我们可以直接通过.操作符加上调用字段名来访问其值,例如:

    {% archiveParams params with sorted=false %}
    <p>作者:{{params.author.Value}}</p>
    {% endarchiveParams %}
    

    这种方式适合在模板中需要引用单个、已知自定义字段的场景。

结合文档详情标签archiveDetail,我们甚至可以直接通过自定义字段的调用名称来获取其值,例如{% archiveDetail with name="author" %}。这为模板开发者提供了极大的灵活性,可以根据实际需求选择最合适的展示方式。

archiveFilters 标签:驱动动态筛选的用户体验

当我们拥有大量内容,并且希望用户能够根据这些自定义属性来缩小搜索范围时,archiveFilters标签就显得尤为重要。它主要用于在文档列表页或分类页,生成基于自定义属性的筛选条件链接。设想一个房产网站,用户可能需要按“户型”、“价格区间”、“地区”等自定义属性来筛选房源。archiveFilters正是为此而生。

这个标签需要与archiveList(用于展示文档列表)和pagination(用于分页)标签配合使用,共同构建一个功能完善的筛选与列表展示页面。

archiveFilters标签会返回一个包含多个筛选条件组的数组,每个组对应一个自定义属性。每个筛选条件组又包含一系列可供选择的筛选值,每个值都带有一个用于执行筛选的URL链接,以及一个IsCurrent状态,指示当前是否已选中该筛选值。

使用archiveFilters的基本流程如下:

  1. 定义筛选属性: 首先,在安企CMS后台的“内容模型”中,确保你已经为你的内容模型定义了可用于筛选的自定义字段(例如:户型面积)。
  2. 在模板中使用: 在文档列表页的模板中,使用archiveFilters标签来获取筛选条件数据。通常会将其结果赋值给一个变量,例如filters
    
    {% archiveFilters filters with moduleId="1" allText="不限" %}
        {% for item in filters %}
        <div class="filter-group">
            <span>{{item.Name}}:</span> {# 筛选属性的名称,如“户型” #}
            <ul>
                {% 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 %}
    
    这里的moduleId参数非常重要,它告诉标签应该获取哪个内容模型的自定义筛选属性。allText则用于设置表示“不限”或“全部”选项的显示文本。

当用户点击{{val.Link}}生成的筛选链接时,页面会重新加载,并且archiveList标签会根据URL中携带的筛选参数,展示符合条件的内容。IsCurrent属性可以帮助我们为当前选中的筛选条件添加样式(例如高亮),提升用户体验。

通过archiveParamsarchiveFilters这两个标签,安企CMS为网站运营者提供了极高的灵活性,无论是展示单个内容的丰富细节,还是为用户提供多维度的内容筛选,都能轻松实现,让内容管理和用户交互更加高效和个性化。


常见问题 (FAQ)

Q1: 我应该如何定义自定义字段才能让archiveParamsarchiveFilters识别并使用它们?

A1: 您需要在安企CMS后台的“内容管理”模块下找到“内容模型”功能。选择您希望添加自定义字段的模型(例如“文章模型”或“产品模型”),然后点击编辑。在这里,您可以添加新的“自定义字段”,为每个字段设置“参数名”(用于后台显示)、“调用字段”(用于模板调用)、“字段类型”以及其他选项。特别是,如果您希望该字段能够用于前端筛选,确保它的数据类型和设置符合筛选要求。

Q2: archiveFilters是否可以筛选所有类型的文档字段,包括分类ID、标签等?

A2: archiveFilters标签主要设计用于筛选您在“内容模型”中自定义的属性字段。对于像分类ID(categoryId)、推荐属性(flag)等系统内置字段的筛选,您应该直接在archiveList标签中通过相应的参数(例如categoryId="1"flag="c")进行设置。archiveFilters的优势在于,它能够动态生成您自定义字段的筛选选项和链接,让用户通过界面交互来筛选这些特定的自定义属性。

Q3: 如果我的自定义字段没有值,archiveParams会如何处理?archiveFilters又会如何表现?

A3: 如果一个自定义字段在文档中没有填写值:

  • archiveParams 在循环遍历时,该字段的Value可能会为空字符串或nil,您可以通过模板中的if判断来决定是否展示。如果通过sorted=false直接访问,params.yourFieldName.Value也会是空值。
  • archiveFilters 通常不会将没有值的自定义字段作为筛选条件展示出来。如果某个自定义字段的所有文档都没有填写值,或者没有设定可选值,那么archiveFilters标签可能就不会生成针对该字段的筛选组。如果设置了allText参数,它会显示“全部”或“不限”选项,但如果没有其他具体的筛选值,该字段的筛选可能就没有实际意义。