网站内容的组织方式对于用户体验和信息检索效率至关重要。一个清晰的分类结构不仅能帮助访客快速找到所需信息,也能有效提升网站的专业度和用户留存率。在安企CMS(AnQiCMS)中,灵活的模板标签系统让显示指定分类的子分类列表变得非常简便。
核心工具:categoryList 标签的妙用
要实现在安企CMS中显示指定分类的子分类列表,我们主要会用到 categoryList 模板标签。这个标签专门用于获取网站的分类数据,并通过其强大的参数配置,精准地定位到我们所需的子分类。
安企CMS的模板语法类似Django模板引擎,变量用双花括号 {{变量}} 定义,逻辑控制标签如 if、for 则用单花括号和百分号 {% 标签 %} 定义。
理解关键参数:moduleId 与 parentId
在使用 categoryList 标签时,有两个核心参数需要您深入理解:
moduleId(模型 ID): 安企CMS支持灵活的内容模型,如文章模型、产品模型等。每个分类都归属于特定的内容模型。moduleId参数用于指定您希望获取哪个内容模型下的分类。- 您可以在安企CMS后台的“内容管理” -> “内容模型”中查看或创建模型,并找到对应的模型ID。通常情况下,文章模型ID为
1,产品模型ID为2。如果您不确定,查看模型详情即可。
- 您可以在安企CMS后台的“内容管理” -> “内容模型”中查看或创建模型,并找到对应的模型ID。通常情况下,文章模型ID为
parentId(上级分类 ID): 这是控制分类层级关系的关键参数。- 当
parentId设置为0时,categoryList会获取指定模型下的所有顶级分类。 - 当
parentId设置为某个具体的分类ID时(例如parentId="123"),它会获取该ID所代表分类的所有直接子分类。 - 另外,
parentId还可以设置为parent,这在一个分类详情页特别有用,它会获取当前分类的兄弟分类(即与当前分类拥有相同父分类的其他分类)。
- 当
现在,我们围绕“如何在安企CMS中显示指定分类的子分类列表”这个主题,通过实际的模板代码演练来具体说明。
实践演练:显示指定分类的子分类列表
假设您有一个分类,其ID已知(比如通过URL参数获取,或者在模板中硬编码指定,再或者通过其他标签获取),您希望显示这个分类下的所有直接子分类。
以下是一个实现这一目标的模板代码示例:
{# 假设您要获取ID为X的分类(例如文章模型下ID为5的分类)的子分类列表 #}
{# 首先,如果需要动态获取指定分类的ID,可以使用 categoryDetail 标签 #}
{% categoryDetail parentCategory with id="5" %} {# 这里的 "5" 就是您要指定的分类ID #}
{% if parentCategory %}
<div class="subcategory-section">
<h3>{{ parentCategory.Title }} 的子分类:</h3>
<ul>
{# 使用 categoryList 标签,通过 parentId 参数指定父分类ID #}
{% categoryList subCategories with parentId=parentCategory.Id %}
{% for item in subCategories %}
<li>
<a href="{{ item.Link }}" title="{{ item.Title }}">
{{ item.Title }}
{# 如果需要显示子分类下有多少篇文章,可以使用 item.ArchiveCount #}
{% if item.ArchiveCount > 0 %}
({{ item.ArchiveCount }})
{% endif %}
</a>
</li>
{% empty %}
<li>目前没有子分类。</li>
{% endfor %}
{% endcategoryList %}
</ul>
</div>
{% else %}
<p>抱歉,未找到您指定的父分类。</p>
{% endif %}
在这段代码中:
- 我们首先使用
{% categoryDetail parentCategory with id="5" %}标签来获取指定ID(这里是5)的分类详情。这样做的好处是,即使您只知道一个ID,也可以获取到分类的标题 (parentCategory.Title) 用于展示,并获取到分类ID (parentCategory.Id) 用于下一步。 - 接着,
{% categoryList subCategories with parentId=parentCategory.Id %}是核心。它告诉安企CMS去查找以parentCategory.Id作为父分类的所有子分类。 {% for item in subCategories %}循环遍历获取到的每一个子分类。{{ item.Link }}会输出子分类的访问链接。{{ item.Title }}会输出子分类的名称。{{ item.ArchiveCount }}可以显示该子分类下有多少篇文档(如果您的业务需要的话)。{% empty %}块是一个非常实用的特性,当subCategories列表为空时,它会执行其中的内容,避免页面空白。
进阶:多级子分类的嵌套展示
如果您的网站分类结构比较复杂,需要显示多级子分类,您可以通过嵌套 categoryList 标签并结合 item.HasChildren 属性来实现。item.HasChildren 是一个布尔值,用于判断当前分类是否还拥有下级分类。
{# 假设我们想显示文章模型(moduleId="1")下的所有顶级分类及其两级子分类 #}
{% categoryList level1Categories with moduleId="1" parentId="0" %}
<ul class="main-categories">
{% for level1 in level1Categories %}
<li>
<a href="{{ level1.Link }}">{{ level1.Title }}</a>
{% if level1.HasChildren %} {# 判断一级分类是否有下级分类 #}
<ul class="sub-categories level-2">
{% categoryList level2Categories with parentId=level1.Id %} {# 获取当前一级分类的子分类 #}
{% for level2 in level2Categories %}
<li>
<a href="{{ level2.Link }}">{{ level2.Title }}</a>
{% if level2.HasChildren %} {# 判断二级分类是否有下级分类 #}
<ul class="sub-categories level-3">
{% categoryList level3Categories with parentId=level2.Id %} {# 获取二级分类的子分类 #}
{% for level3 in level3Categories %}
<li><a href="{{ level3.Link }}">{{ level3.Title }}</a></li>
{% endfor %}
</ul>
{% endif %}
</li>
{% endfor %}
</ul>
{% endif %}
</li>
{% endfor %}
</ul>
{% endcategoryList %}
这段代码展示了如何通过递归调用(虽然这里是显式嵌套)categoryList 来构建多级分类导航。item.HasChildren 确保了只有当存在子分类时,才会渲染相应的 <ul> 列表,从而保持页面结构的整洁。
实用建议
- 模板组织: 为了提高可读性和维护性,您可以考虑将复杂的分类列表逻辑封装到单独的模板片段中(例如
partial/sub_category_list.html),然后使用{% include %}标签在需要的地方引入。这样可以避免主模板文件过于臃肿。 - 性能考量: 理论上您可以嵌套任意多层,但在实际应用中,过深的分类层级和过多的嵌套循环可能会影响页面加载性能。建议根据实际网站结构和性能需求进行合理设计。
- 样式美化: 上述代码仅提供了HTML结构。您需要结合CSS来对这些列表进行样式美化,例如添加缩进、图标、鼠标悬停效果等,以提升视觉呈现。
- 动态指定分类ID: 在实际场景中,“您要指定的分类ID”可能不是一个固定值,而是从URL中动态获取,或者通过当前页面上下文(比如在分类详情页)自动获取。安企CMS会根据当前页面的URL自动识别分类信息,您可以在分类详情页直接省略
id参数,categoryDetail会自动获取当前分类的信息。
通过这些灵活的模板标签和参数,安企CMS能够帮助您轻松构建出清晰、功能强大的分类导航,有效提升网站的内容组织能力和用户体验。
常见问题 (FAQ)
Q1: 我如何在文章详情页,显示当前文章所属分类的所有子分类列表?
A1: 您可以通过 archiveDetail 标签获取当前文章的分类ID,然后将这个ID作为 parentId 参数传递给 `category