在运营网站时,我们经常会遇到内容展示的需求,其中一个常见场景就是在分类列表页如何精确控制显示内容。有时,我们希望在一个主分类页面,不仅展示该分类下的文档,也包括其所有子分类的文档,以提供更全面的信息。然而,在另一些情况下,为了保持页面主题的纯粹性和内容的聚焦性,我们可能只希望严格地展示当前分类下的文档,而不包含任何子分类的内容。

安企CMS作为一款功能灵活的内容管理系统,充分考虑了用户的多样化需求,提供了非常简洁高效的方式来处理这种内容展示逻辑。

核心功能揭秘:archiveList 标签与 child 参数

在安企CMS中,实现分类列表页只显示当前分类文档,而不包含子分类文档的关键在于使用 archiveList 模板标签的 child 参数。

archiveList 标签是安企CMS用于获取文档列表的核心工具,它支持多种参数来筛选、排序和控制文档的显示。其中,child 参数正是用来控制是否包含子分类文档的关键。

默认情况下,child 参数的值是 true,这意味着当你在分类列表页调用 archiveList 标签时,它会自动包含当前分类及其所有子分类下的文档。这种设计在多数情况下能提供丰富的内容展示。

但如果你的目标是精确地只显示当前分类的文档,那么只需在 archiveList 标签中将 child 参数设置为 false。系统接收到这个指令后,便会智能地过滤掉所有子分类的文档,只保留当前分类直接关联的内容。

下面是一个在分类列表页中使用 archiveList 标签,并确保只显示当前分类文档的简化示例:

{# 假设这是你的分类列表页模板,例如 /template/default/article/list.html 或 /template/default/article/list-123.html #}

<div class="category-document-list">
    {% archiveList archives with type="page" limit="10" child="false" %}
        {% for item in archives %}
        <div class="document-item">
            <a href="{{item.Link}}" title="{{item.Title}}">
                <h3>{{item.Title}}</h3>
                <p>{{item.Description|truncatechars:100}}</p>
                <span>发布日期:{{stampToDate(item.CreatedTime, "2006-01-02")}}</span>
                <span>浏览量:{{item.Views}}</span>
            </a>
        </div>
        {% empty %}
        <p>当前分类下暂无文档。</p>
        {% endfor %}
    {% endarchiveList %}

    {# 如果需要分页,可以结合 pagination 标签使用 #}
    {% pagination pages with show="5" %}
        {# 分页导航的代码,根据你的模板设计进行编写 #}
        {% if pages.TotalPages > 1 %}
            <div class="pagination-nav">
                <a href="{{pages.FirstPage.Link}}" class="{% if pages.FirstPage.IsCurrent %}active{% endif %}">{{pages.FirstPage.Name}}</a>
                {% if pages.PrevPage %}<a href="{{pages.PrevPage.Link}}">{{pages.PrevPage.Name}}</a>{% endif %}
                {% for p in pages.Pages %}<a href="{{p.Link}}" class="{% if p.IsCurrent %}active{% endif %}">{{p.Name}}</a>{% endfor %}
                {% if pages.NextPage %}<a href="{{pages.NextPage.Link}}">{{pages.NextPage.Name}}</a>{% endif %}
                <a href="{{pages.LastPage.Link}}" class="{% if pages.LastPage.IsCurrent %}active{% endif %}">{{pages.LastPage.Name}}</a>
            </div>
        {% endif %}
    {% endpagination %}
</div>

在这个示例中,archiveList 标签的 child="false" 参数确保了只有当前访问的分类(例如,分类ID为10的页面)下的文档会被列出,而该分类下的任何子分类(例如,分类ID为11、12等)的文档都会被排除在外。

值得一提的是,在分类列表页中使用 archiveList 时,通常无需额外指定 categoryId 参数。因为安企CMS足够智能,它会默认尝试读取当前页面的分类ID来获取文档。当然,如果你需要在其他页面或者希望更明确地指定某个分类ID,也可以通过 categoryId="你的分类ID" 来实现。

为何选择精准显示?背后的考量

采用这种只显示当前分类文档的策略,能带来多方面的益处:

  1. 提升用户体验和导航清晰度: 当用户点击一个分类时,他们期望看到与该分类主题直接相关的文档。如果混杂了子分类的内容,可能会让用户感到困惑,降低查找效率。精准显示能让页面主题更加明确,用户一眼就能找到所需信息。
  2. 优化SEO效果: 对于搜索引擎来说,页面内容的集中性和相关性是排名算法的重要考量因素。一个只包含当前分类文档的页面,其关键词密度和主题聚焦度会更高,这有助于搜索引擎更好地理解页面内容,从而提升该分类页面在相关搜索结果中的排名。
  3. 简化内容管理逻辑: 对于网站运营者而言,精确控制内容展示能够让内容结构更加清晰,方便日常的内容发布、维护和数据分析。
  4. 避免内容重复和稀释: 在某些复杂分类体系下,如果子分类内容也在父分类页面展示,可能会导致大量内容的重复展示,稀释了每个页面的独特价值。

更多 archiveList 参数搭配建议

在设置 child="false" 的基础上,你还可以结合其他 archiveList 参数,进一步精细化你的内容展示:

  • moduleId="1" (模型ID): 如果你的网站有多种内容模型(如文章、产品),可以通过 moduleId 参数指定只显示特定模型下的文档。
  • order="id desc" (排序方式): 控制文档的排序,例如按最新发布(id desc)、最多浏览(views desc)或自定义排序(sort desc)。
  • limit="10" (显示数量): 控制每页显示的文档数量。
  • flag="c" (推荐属性): 仅显示具有特定推荐属性(如推荐[c]、头条[h]等)的文档。

通过灵活运用这些参数,你可以在安企CMS中构建出高度定制化、功能强大的分类列表页,无论是为了提升用户体验、优化SEO,还是简化内容管理,都能得心应手。


常见问题 (FAQ)

1. 这种设置(child="false")会影响我网站的其他分类页面吗? 不会。child="false" 参数仅对你修改了 archiveList 标签的特定分类列表页模板生效。如果你在其他分类列表页的模板中没有添加或修改这个参数,它们将继续沿用原有的内容展示逻辑(通常是默认包含子分类文档)。

2. 我想同时显示当前分类和某个特定的子分类的文档,但排除其他子分类,可以实现吗? 可以的。在这种情况下,你可以不使用 child="false" 参数。而是直接在 categoryId 参数中传入你想要包含的分类ID,包括当前分类ID和你想显示的特定子分类ID,用英文逗号 , 隔开。例如:{% archiveList archives with categoryId="1,2,5" type="page" limit="10" %}

3. 如果我的分类列表页模板中根本没有 archiveList 标签,我该怎么做? 如果你的分类列表页模板中没有 archiveList 标签,那说明该页面目前可能没有正确配置文档列表的显示功能。你需要手动在模板中添加 archiveList 标签。首先确定你希望显示哪个内容模型(例如文章模型ID为1),然后按照上述示例进行配置,至少要包含 moduleIdtype 参数,例如:{% archiveList archives with moduleId="1" type="page" limit="10" child="false" %}。当然,如果你需要分页,也要记得添加 pagination 标签。