在管理网站内容时,我们经常需要在不同的列表页展示特定类型或主题的内容,例如文章列表、产品展示页或是自定义模型的详情汇总。这不仅关乎用户能否高效地找到所需信息,也直接影响到网站的整体布局和用户体验。安企CMS以其灵活的内容模型和高效的系统架构,为我们提供了强大的工具,让我们能够精准地筛选和个性化展示内容。

内容组织的核心:模型与分类

在安企CMS中,网站内容的组织离不开“内容模型”和“文档分类”。“内容模型”定义了内容的结构和属性,比如“文章”模型可以有标题、正文、发布时间等字段,而“产品”模型则可能包含产品名称、价格、库存等字段。通过自定义内容模型,我们可以根据业务需求创建各种类型的内容。

“文档分类”则像图书馆的书架,用于对内容进行归类。每一篇文档都会归属于一个特定的分类,而这个分类本身又隶属于一个内容模型。这样的层级结构,让内容管理变得井然有序。

要在前端页面上灵活地展示这些内容,核心工具就是模板标签。具体来说,archiveList 标签是我们在列表页展示内容的得力助手。

如何按分类筛选内容

最常见的内容筛选需求,莫过于按照特定的“文档分类”来展示内容了。例如,你可能希望在某个页面只显示“新闻中心”下的所有文章。

这时,我们只需要在 archiveList 标签中,通过 categoryId 参数指定分类的ID即可。这个ID通常可以在后台的“文档分类”管理中找到。

{% archiveList articles with categoryId="1" limit="10" %}
    {% for item in articles %}
        <li><a href="{{item.Link}}">{{item.Title}}</a></li>
    {% empty %}
        <li>目前该分类下没有内容。</li>
    {% endfor %}
{% endarchiveList %}

有时,一个分类下面可能还有子分类。默认情况下,archiveList 标签在指定父分类ID时,也会一并显示其子分类下的所有文档。如果你只想显示当前分类下的文档,而不包含其子分类的内容,可以额外添加 child=false 参数:

{% archiveList articles with categoryId="1" child=false limit="10" %}
    {# 仅显示分类ID为1的文档,不包含子分类 #}
{% endarchiveList %}

依据内容模型筛选展示

安企CMS的“灵活内容模型”功能是其一大亮点,它允许我们定义不同结构的内容,例如“文章”、“产品”或自定义的其他模型。如果你想在列表页只展示特定模型下的内容,比如只显示所有“产品”,而不是“文章”,那么 moduleId 参数就派上用场了。

你可以在后台的“内容模型”管理中找到对应模型的ID。例如,假设“文章”模型的ID是1,“产品”模型的ID是2。

{% archiveList products with moduleId="2" limit="10" %}
    {% for item in products %}
        <li><a href="{{item.Link}}">产品名称:{{item.Title}}</a></li>
    {% empty %}
        <li>目前没有产品信息。</li>
    {% endfor %}
{% endarchiveList %}

这样,你的列表页就只会展示产品模型下的内容,而不会混入文章。

结合自定义参数进行高级筛选

对于更复杂、多维度的内容筛选需求,比如一个房产网站需要根据“房屋类型”(住宅、商铺)和“面积大小”(小户型、大户型)同时进行筛选,安企CMS提供了“文档参数筛选标签”—— archiveFilters

首先,你需要确保在后台的“内容模型”中为模型添加好这些可筛选的“自定义字段”。例如,为房产模型添加“房屋类型”和“面积大小”字段,并设置好对应的可选值。

接下来,在模板中,archiveFilters 标签负责生成筛选条件的用户界面,而 archiveList 标签则会根据用户选择的筛选条件,自动展示相应的内容。

使用 archiveFilters 时,同样需要通过 moduleId 参数指定是哪个内容模型的筛选条件。这个标签会生成一个包含所有筛选条件的数据结构,你可以在模板中遍历它,为用户创建点击筛选的链接。

当用户点击这些筛选链接时,链接会将筛选参数作为URL中的查询参数(Query Parameter)传递。神奇的是,archiveList 标签会自动识别并应用这些URL中的筛选参数,无需额外配置,就能自动展示符合筛选条件的内容。

一个典型的用法可能像这样:

”`twig

<h3>筛选房产:</h3>
{% archiveFilters filterOptions with moduleId="1" allText="不限" %}
    {% for filterGroup in filterOptions %}
        <p>{{ filterGroup.Name }}:</p>
        <div>
            {% for option in filterGroup.Items %}
                <a class="{% if option.IsCurrent %}active{% endif %}" href="{{ option.Link }}">{{ option.Label }}</a>
            {% endfor %}
        </div>
    {% endfor %}