网站内容的组织方式对于用户体验和信息检索效率至关重要。一个清晰的分类结构不仅能帮助访客快速找到所需信息,也能有效提升网站的专业度和用户留存率。在安企CMS(AnQiCMS)中,灵活的模板标签系统让显示指定分类的子分类列表变得非常简便。

核心工具:categoryList 标签的妙用

要实现在安企CMS中显示指定分类的子分类列表,我们主要会用到 categoryList 模板标签。这个标签专门用于获取网站的分类数据,并通过其强大的参数配置,精准地定位到我们所需的子分类。

安企CMS的模板语法类似Django模板引擎,变量用双花括号 {{变量}} 定义,逻辑控制标签如 iffor 则用单花括号和百分号 {% 标签 %} 定义。

理解关键参数:moduleIdparentId

在使用 categoryList 标签时,有两个核心参数需要您深入理解:

  1. moduleId(模型 ID): 安企CMS支持灵活的内容模型,如文章模型、产品模型等。每个分类都归属于特定的内容模型。moduleId 参数用于指定您希望获取哪个内容模型下的分类。

    • 您可以在安企CMS后台的“内容管理” -> “内容模型”中查看或创建模型,并找到对应的模型ID。通常情况下,文章模型ID为1,产品模型ID为2。如果您不确定,查看模型详情即可。
  2. 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