如何在模板中循环遍历并显示指定分类下的所有子分类?

📅 👁️ 68

安企CMS模板中,如何优雅地展示指定分类下的所有子分类?

对于一个内容丰富的网站来说,清晰的分类结构是提升用户体验和搜索引擎友好度的关键。安企CMS(AnQiCMS)凭借其灵活的模板引擎和强大的标签系统,让您能够轻松地在网站前台循环遍历并展示指定分类下的所有子分类,无论是直接子分类还是多级嵌套的子分类,都能游刃有余。

今天,我们就来一起探讨如何在安企CMS的模板中实现这一功能。

理解核心:categoryList 标签

在安企CMS中,实现这一目标的核心利器就是强大的 categoryList 模板标签。这个标签专门用于获取网站的分类数据,并通过不同的参数设置,您可以精准地获取到所需的分类列表。

在使用 categoryList 标签时,有几个关键参数需要您了解:

  • moduleId: 这个参数用来指定您要获取哪个内容模型下的分类。例如,如果您的网站主要围绕“文章”和“产品”两种内容模型,那么“文章模型”的ID可能是1,“产品模型”的ID可能是2。您可以在安企CMS后台的“内容管理”->“内容模型”中查看各个模型的具体ID。
  • parentId: 这是控制分类层级关系的核心参数。
    • 当您将其设置为 "0" 时,它会获取指定模型下的所有顶级分类
    • 当您将其设置为某个分类的ID(例如 item.Id,如果 item 是一个已获取的分类对象),它就会获取该分类下的直接子分类
  • siteId: 如果您开启了多站点管理,并且需要获取其他站点的数据,可以通过这个参数指定站点ID。通常情况下,我们不需要手动填写,系统会自动获取当前站点数据。
  • all: 如果您想获取指定模型下的所有分类(不分层级),可以设置为 all=true

categoryList 标签会返回一个分类对象的数组,您可以使用 {% for ... in ... %} 循环标签来遍历这些分类,并提取它们的 Title(分类名称)、Link(分类链接)、HasChildren(是否包含子分类)等属性进行展示。

展示直接子分类:第一步

假设您有一个“新闻”分类,ID为10,现在希望在模板中列出“新闻”分类下的所有直接子分类,比如“公司新闻”、“行业动态”等。您可以这样做:

{# 首先,我们获取“新闻”分类(ID为10)下的所有直接子分类 #}
{% categoryList subCategories with moduleId="1" parentId="10" %}
    <ul class="sub-category-list">
        {% for category in subCategories %}
            <li>
                <a href="{{ category.Link }}">{{ category.Title }}</a>
            </li>
        {% else %}
            <li>当前分类下暂无子分类。</li>
        {% endfor %}
    </ul>
{% endcategoryList %}

在这段代码中,moduleId="1" 假设您的新闻属于文章模型。parentId="10" 则精确指定了获取ID为10的分类的直接子分类。for 循环遍历 subCategories 数组,然后我们使用 category.Linkcategory.Title 来分别生成链接和显示分类名称。如果没有任何子分类,{% else %} 块的内容会友好地提示。

循环遍历多级子分类:实现深度嵌套

很多时候,我们的分类结构可能不止两级,而是三级、四级甚至更多。安企CMS的模板引擎支持嵌套循环,让您可以轻松地展示多级子分类。这里,我们以展示三级分类为例,您可以根据需要扩展到更深层级。

{# 获取所有顶级分类(假设 moduleId="1" 对应文章模型) #}
{% categoryList level1Categories with moduleId="1" parentId="0" %}
    <ul class="level-1-categories">
        {% for category1 in level1Categories %}
            <li>
                <a href="{{ category1.Link }}">{{ category1.Title }}</a>
                {# 判断当前一级分类是否有子分类 #}
                {% if category1.HasChildren %}
                    {# 如果有,则获取它的直接子分类,作为二级分类 #}
                    {% categoryList level2Categories with parentId=category1.Id %}
                        <ul class="level-2-categories">
                            {% for category2 in level2Categories %}
                                <li>
                                    <a href="{{ category2.Link }}">{{ category2.Title }}</a>
                                    {# 再次判断当前二级分类是否有子分类 #}
                                    {% if category2.HasChildren %}
                                        {# 如果有,则获取它的直接子分类,作为三级分类 #}
                                        {% categoryList level3Categories with parentId=category2.Id %}
                                            <ul class="level-3-categories">
                                                {% for category3 in level3Categories %}
                                                    <li>
                                                        <a href="{{ category3.Link }}">{{ category3.Title }}</a>
                                                        {# 您可以在这里继续嵌套,获取四级、五级分类... #}
                                                    </li>
                                                {% endfor %}
                                            </ul>
                                        {% endcategoryList %}
                                    {% endif %}
                                </li>
                            {% endfor %}
                        </ul>
                    {% endcategoryList %}
                {% endif %}
            </li>
        {% endfor %}
    </ul>
{% endcategoryList %}

在这段代码中,我们首先获取所有 parentId="0" 的顶级分类。在遍历每个顶级分类(category1)时,我们使用 {% if category1.HasChildren %} 来判断它是否拥有子分类。如果存在子分类,我们再通过嵌套的 categoryList 标签,将 parentId 设置为当前分类的ID(例如 category1.Id),以此来逐级获取并展示下级分类。这种模式可以灵活地扩展到您网站所需的任何分类深度。

一些小提示和**实践

  • 模板文件位置:您应该将这些模板代码放在安企CMS模板目录下的.html文件中,例如 template/您的模板名称/partial/category_nav.html,然后可以在主模板中使用 {% include "partial/category_nav.html" %} 来引用。
  • 获取当前页面的分类ID:如果您想获取当前页面所属分类的子分类,可以使用 {{category.Id}}(在分类详情页)或者 {{archive.CategoryId}}(在文档详情页)来作为 parentId 的值。
  • 优化展示:除了 TitleLink,分类对象还提供了 Logo(分类大图)、Thumb(分类缩略图)、Description(分类描述)等属性。您可以根据设计需求,在 <a> 标签内或旁边添加图片、描述等信息,丰富分类的展示效果。
  • 性能考量:虽然安企CMS基于Go语言,具有高性能特点,但在极端复杂的深层嵌套和大量数据场景下,过多的嵌套循环可能会对前端渲染速度产生轻微影响。通常情况下,对于网站常见的3-5级分类深度,这种方式是高效且无忧的。

通过以上方法,您就能灵活地在安企CMS的模板中,按照您的设计需求,循环遍历并展示网站的所有子分类,为访客提供清晰直观的导航体验。


常见问题 (FAQ)

1. 如何在模板中判断一个分类是否有子分类?

您可以在循环遍历分类项时,使用 {% if item.HasChildren %} 来进行判断。HasChildren 是分类对象的一个布尔值属性,如果为 true 则表示该分类有下级子分类。

2. 我想展示分类下的所有文档,而不是子分类列表,应该用哪个标签?

如果您想获取指定分类(或包含其子分类)下的文档列表

相关文章

如何在页面中嵌入评论列表并控制其显示分页?

在网站运营中,用户互动是提升站点活跃度和内容价值的关键。AnQiCMS 提供了一套直观而强大的功能,帮助我们轻松地在页面中嵌入评论功能,并灵活地控制评论列表的显示方式,尤其是其分页管理,这对于拥有大量用户评论的页面来说至关重要。 ### 开启评论功能,让内容活起来 首先,要让用户能够发表评论,我们需要确保后台的评论功能已经开启。一旦评论功能激活

2025-11-09

如何在AnQiCMS中启用Markdown渲染,正确显示数学公式和流程图?

在AnQiCMS中,想要让你的内容更具表现力,特别是需要展示复杂的数学公式或清晰的流程图时,灵活运用Markdown编辑器是一个非常有效的方案。新版本的AnQiCMS已经为此提供了良好的支持。接下来,我们将一起探索如何在AnQiCMS中启用这些功能,让你的网站内容焕发新生。 --- ### 第一步:开启Markdown编辑器 要开始使用Markdown撰写内容

2025-11-09

自定义内容模型后,如何在前端模板中显示新增的字段数据?

AnQiCMS 凭借其灵活的内容模型功能,为我们管理各类网站内容带来了极大的便利。无论是文章、产品、活动还是其他任何需要特殊字段的内容类型,我们都可以在后台轻松地自定义字段,以满足独特的业务需求。但当我们满怀期待地在后台创建了新的字段并填充了数据后,新的问题也随之而来:如何在网站的前端页面上,将这些新增的自定义字段数据精准地展现给访客呢? 别担心,AnQiCMS

2025-11-09

如何实现内容的多语言显示和切换功能?

让您的网站走向全球:安企CMS的多语言内容策略与实现 在当今全球化的数字时代,许多企业和内容创作者都希望自己的网站能够触达更广泛的受众。这意味着提供多种语言的内容显示和切换功能,以满足不同国家和地区用户的阅读习惯。安企CMS(AnQiCMS)作为一款高效的内容管理系统,充分考虑了这一需求,提供了一套灵活的解决方案,帮助您轻松实现网站的多语言功能。 在安企CMS中,实现内容的多语言显示和切换

2025-11-09

如何在导航菜单中显示二级下拉菜单,并关联不同的内容?

安企CMS提供了一套直观而强大的导航菜单管理系统,让您能够轻松地为网站构建清晰、用户友好的导航结构,包括多级的下拉菜单。这不仅能提升网站的用户体验,还能帮助搜索引擎更好地理解您的网站内容层级,从而优化SEO表现。 ### 理解安企CMS的导航体系 在安企CMS中,导航菜单的设置和管理都集中在后台的“网站导航设置”功能中。这里是您构建网站菜单的核心区域

2025-11-09

如何为特定分类或单页面指定独立的模板文件进行内容展示?

在内容管理系统中,我们常常需要让网站的某些特定内容以独特的方式呈现,这不仅能满足品牌或营销上的特定需求,也能为访客带来更优化的浏览体验。安企CMS深谙此道,提供了灵活的模板定制功能,让我们可以轻松为某个分类页面,甚至是单独的内容页面指定一个独一无二的模板文件。 ## 为什么需要为特定页面定制模板? 想象一下,您的“关于我们”页面可能需要一个包含团队照片、公司发展历程时间轴的特别布局

2025-11-09

如何利用Tag标签,在页面上显示相关文章列表?

在网站内容运营中,如何高效地组织内容、提升用户体验并优化搜索引擎排名,是每一个运营者持续关注的重点。AnQiCMS作为一个企业级内容管理系统,提供了强大而灵活的功能来支持这些需求,其中Tag标签功能便是不可或缺的一部分。 Tag标签,通俗来说就是关键词或主题词,它能将网站上零散的文章内容按照共同的主题或关注点进行串联。合理利用Tag标签,不仅能让用户更便捷地发现感兴趣的内容

2025-11-09

如何配置和显示网站的全局联系方式信息,如电话、地址、微信二维码?

在网站运营中,清晰、准确地展示联系方式是建立用户信任、提升服务效率的关键一环。无论是电话、地址、邮箱,还是当前流行的微信二维码,AnQiCMS 都提供了灵活便捷的方式来配置和管理这些全局信息,确保它们能在网站上高效呈现。 ### 后端配置:集中管理您的全局联系信息 要集中管理这些信息,您需要登录到AnQiCMS的后台管理界面。进入后台后,请导航到左侧菜单栏的“**后台设置**”

2025-11-09