在使用安企CMS构建网站时,我们经常会遇到这样的需求:在一个分类页面,我们希望只展示属于当前这个分类下的文档,而不希望混入其子分类的文档内容。这在内容结构清晰、避免信息冗余的场景中尤为重要。今天,我们就来详细探讨如何通过安企CMS的模板标签,精准实现这一目标。
理解 AnQiCMS 分类与文档的关系
安企CMS在设计之初,就充分考虑了内容层级的灵活性。分类可以拥有子分类,文档则可以归属于任何一个分类。默认情况下,为了方便内容的聚合展示,文档列表标签在调用时通常会自动包含子分类中的内容。这种设计虽然在某些场景下提供了便利,但在另一些需要严格区分层级内容的场合,就需要我们进行精细化控制。
核心策略:archiveList 标签的 child 参数
要实现仅显示当前分类下文档而不包含子分类文档的目标,我们需要关注的核心是 archiveList 标签。这个标签专门用于获取文档列表,它提供了一个名为 child 的参数,正是控制这一行为的关键。
child 参数支持 true 和 false 两个值:
child=true(默认值):表示在查询文档时,不仅会包含当前指定分类下的文档,还会递归地包含其所有子分类(包括子分类的子分类,以此类推)中的文档。child=false:表示在查询文档时,将严格限定在当前指定分类内,不会获取其任何子分类中的文档。
因此,我们的解决方案就是在使用 archiveList 标签时,明确设置 child=false。
让我们通过一个具体的例子来理解。假设您正在设计一个分类页面模板,希望在这个页面上仅列出当前分类下的文章。
{# 假设这是分类页面模板,我们首先需要获取当前分类的ID和标题 #}
{% categoryDetail currentCategory with name="Id" %} {# 获取当前分类的ID,并赋值给 currentCategory 变量 #}
{% categoryDetail categoryTitle with name="Title" %} {# 获取当前分类的标题,并赋值给 categoryTitle 变量 #}
<div class="category-header">
<h1>{{categoryTitle}}</h1>
<p>以下是“{{categoryTitle}}”分类下的所有文档(不含子分类)。</p>
</div>
<div class="document-list">
{# 使用 archiveList 标签,并设置 categoryId 为当前分类ID,child=false 确保不包含子分类文档 #}
{% archiveList archives with type="page" categoryId=currentCategory child=false limit="10" %}
{% for item in archives %}
<div class="document-item">
<h3><a href="{{item.Link}}">{{item.Title}}</a></h3>
<p>{{item.Description}}</p>
<small>发布于: {{stampToDate(item.CreatedTime, "2006-01-02")}} | 浏览量: {{item.Views}}</small>
</div>
{% empty %}
<p>抱歉,当前分类({{categoryTitle}})下没有找到文档。</p>
{% endfor %}
{# 如果需要分页,可以在此处添加分页标签 #}
{% pagination pages with show="5" %}
<div class="pagination-controls">
{% if pages.PrevPage %}<a href="{{pages.PrevPage.Link}}">上一页</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}}">下一页</a>{% endif %}
</div>
{% endpagination %}
{% endarchiveList %}
</div>
在这个示例中:
- 我们首先使用
categoryDetail标签获取了当前页面的分类ID(currentCategory)和标题(categoryTitle)。 - 接着,在
archiveList标签中,我们将categoryId参数设置为currentCategory,确保文档查询限定在当前分类。 - 最关键的一步是设置
child=false。这个参数告诉AnQi