如何在AnQiCMS模板中显示分类列表及其层级关系?

📅 👁️ 69

在构建网站时,清晰的分类结构是提升用户体验和内容可发现性的关键。AnQiCMS 凭借其灵活的内容模型和强大的模板引擎,让我们能够非常方便地在网站前端展示分类列表及其层级关系。今天,我们就来深入了解如何在 AnQiCMS 模板中实现这一功能。

认识 AnQiCMS 的分类列表标签:categoryList

AnQiCMS 模板基于 Go 语言的 Django 模板引擎语法,提供了直观且功能丰富的标签来操作数据。要显示分类列表,我们主要会用到 categoryList 这个标签。这个标签能帮助我们获取文章或产品等内容模型的分类数据,并按照我们期望的方式进行展示。

让我们从一个简单的例子开始。假设我们想要在网站侧边栏显示所有顶级文章分类,我们可以这样编写模板代码:

{% categoryList categories with moduleId="1" parentId="0" %}
    <ul class="main-categories">
        {% for item in categories %}
        <li><a href="{{ item.Link }}">{{ item.Title }}</a></li>
        {% endfor %}
    </ul>
{% endcategoryList %}

在这段代码中:

  • {% categoryList categories ... %}:我们定义了一个名为 categories 的变量,它将承载从数据库获取到的分类列表数据。
  • moduleId="1":这是非常关键的一个参数。在 AnQiCMS 中,每个分类都隶属于一个特定的内容模型(例如,文章模型通常为 1,产品模型可能为 2)。通过指定 moduleId,我们确保只获取到所需内容模型的分类。
  • parentId="0":这个参数告诉系统我们只想要获取顶级分类。如果想获取某个特定分类下的子分类,我们则会传递该父分类的 Id
  • {% for item in categories %}:我们使用 for 循环来遍历 categories 变量中的每一个分类项。
  • {{ item.Link }}:这会输出当前分类的 URL 链接。
  • {{ item.Title }}:这会显示当前分类的名称。

优雅地展示多级分类层级

如果我们的网站分类结构有层级关系,比如“新闻动态”下有“公司新闻”和“行业资讯”,我们同样可以通过 categoryList 标签轻松实现多级嵌套展示。

以下是一个展示两级分类的例子:

{% categoryList mainCategories with moduleId="1" parentId="0" %}
    <ul class="main-nav">
        {% for mainItem in mainCategories %}
        <li class="main-nav-item">
            <a href="{{ mainItem.Link }}">{{ mainItem.Title }}</a>
            {% if mainItem.HasChildren %}
            <ul class="sub-nav">
                {% categoryList subCategories with parentId=mainItem.Id %}
                    {% for subItem in subCategories %}
                    <li class="sub-nav-item">
                        <a href="{{ subItem.Link }}">{{ subItem.Title }}</a>
                        {# 如果需要更多层级,可以继续嵌套 categoryList 标签 #}
                    </li>
                    {% endfor %}
                {% endcategoryList %}
            </ul>
            {% endif %}
        </li>
        {% endfor %}
    </ul>
{% endcategoryList %}

这里我们引入了几个新的概念:

  • {% if mainItem.HasChildren %}:这是一个非常有用的条件判断。HasChildren 属性会返回一个布尔值,告诉我们当前分类是否有子分类。只有当一个分类有子分类时,我们才渲染它的子菜单,这样可以避免生成空的 <ul> 标签,使页面结构更干净。
  • parentId=mainItem.Id:在内层循环中,我们将外层循环 mainItemId 作为 parentId 传递给 categoryList 标签,这样就能准确地获取到 mainItem 的直接子分类。
  • item.Spacer:AnQiCMS 还提供了一个 Spacer 字段,它会根据分类层级自动生成前缀(例如 &nbsp;&nbsp;|--),在管理后台或某些特定展示场景下,可以帮助我们直观地看到分类的层级深度。在前端展示时,通常会通过 CSS 来控制缩进和层级样式,但 Spacer 提供了一个备用选项,记得使用 |safe 过滤器来确保 HTML 实体被正确解析。

在分类列表中同时展示其下文档

有时候,我们不仅想显示分类本身,还想在每个分类下展示一些最新的文章或产品。AnQiCMS 同样允许我们灵活地组合 categoryListarchiveList 标签来实现这一需求。

{% categoryList categories with moduleId="1" parentId="0" %}
    <div class="category-block">
        {% for catItem in categories %}
        <h3><a href="{{ catItem.Link }}">{{ catItem.Title }}</a></h3>
        <ul class="latest-articles">
            {% archiveList archives with type="list" categoryId=catItem.Id limit="5" %}
                {% for article in archives %}
                <li>
                    <a href="{{ article.Link }}">
                        <h4>{{ article.Title }}</h4>
                        <p>{{ article.Description|truncatechars:100 }}</p>
                    </a>
                </li>
                {% empty %}
                <li>当前分类暂无文章。</li>
                {% endfor %}
            {% endarchiveList %}
        </ul>
        {% endfor %}
    </div>
{% endcategoryList %}

在这个例子中:

  • 我们在每个 catItem 循环内部又嵌套了一个 archiveList 标签。
  • categoryId=catItem.Id:这里我们将当前分类 catItemId 传递给 archiveList,确保只获取到该分类下的文章。
  • limit="5":限制每个分类只显示最新的 5 篇文章。
  • type="list":表示我们只需要一个简单的列表,而不是分页列表。
  • {{ article.Description|truncatechars:100 }}:使用了 truncatechars 过滤器来截取文章描述的前 100 个字符,并自动添加省略号,保持页面整洁。

总结

AnQiCMS 的 categoryList 标签及其丰富的参数和返回属性,为我们提供了极大的灵活性来构建各种复杂的分类展示。无论是简单的扁平列表,还是多层级的嵌套菜单,甚至是在分类中直接嵌入相关内容,都可以通过直观的模板语法轻松实现。合理运用这些功能,将帮助我们打造结构清晰、内容丰富且用户友好的网站。在实际操作中,别忘了多查看 AnQiCMS 官方文档中的标签详情,那里会有更详尽的参数说明和高级用法,助力你实现更多创意。


常见问题 (FAQ)

1. 为什么我的分类列表代码已经写了,但前端页面上没有任何内容显示?

这通常有几个原因: 首先,请检查 moduleId 参数是否正确。AnQiCMS 中的分类是与特定的内容模型(如文章、产品)绑定的,如果 moduleId 不正确或没有文章/产品分类,列表自然不会显示。其次,确认你指定的 parentId(如果使用了)下确实存在子分类。最后,检查你的 AnQiCMS 后台是否已经创建了对应的分类数据。

2. 我想在导航栏显示分类,但 AnQiCMS 的 navList 标签也可以做导航,我应该用哪一个?

navList 标签是专门用于展示后台“网站导航设置”中配置的导航菜单的。它更侧重于网站的全局导航结构,可能包含分类、单页面或外部链接的组合。而 categoryList 标签则专注于从内容模型中获取和展示纯粹的分类数据。如果你需要一个根据后台分类数据自动生成的导航(例如,显示所有文章分类),categoryList 更合适;如果你希望导航菜单内容更灵活,可以在后台手动拖拽调整顺序,并且包含多种链接类型,那么 navList 会是更好的选择。两者可以结合使用,例如在 navList 的某个菜单项下嵌套 categoryList 来展示子分类。

3. 如何为不同层级的分类设置不同的样式(比如一级分类用粗体,二级分类用斜体)?

categoryListfor 循环中,你可以利用 item.ParentId 来判断当前分类的层级。例如,如果 item.ParentId == 0,它就是顶级分类;如果 item.ParentId > 0,它就是子分类。你还可以结合 CSS 类名来实现差异化样式。例如:

{% categoryList categories with moduleId="1" %}
    <ul>
        {% for item in categories %}
            <li class="{% if item.ParentId == 0 %}level-1{% else %}level-2{% endif %}">
                <a href="{{ item.Link }}">{{ item.Title }}</a>
                {# ... 更多嵌套分类 ... #}
            </li>
        {% endfor %}
    </ul>
{% endcategoryList %}

通过这种方式,你可以用 level-1level-2 等 CSS 类来定义不同层级的样式。

相关文章

AnQiCMS如何设置图片懒加载来优化页面显示性能?

网站加载速度是用户体验和搜索引擎优化的关键因素之一。在众多影响页面性能的因素中,图片往往是占用资源最多、加载时间最长的元素。为了给用户提供更流畅的浏览体验,同时提升网站在搜索引擎中的表现,合理优化图片加载策略显得尤为重要。 AnQiCMS 本身就以高效、轻量著称,采用 Go 语言开发,具备出色的高并发处理能力和快速响应速度。在此基础上,通过引入图片懒加载(Lazy Load)技术

2025-11-08

如何让AnQiCMS的文档内容自动转换Markdown格式并在网页中正确渲染?

AnQiCMS作为一个功能强大的内容管理系统,在内容创作和展示方面提供了极大的灵活性。对于习惯使用Markdown语法进行写作的用户来说,AnQiCMS同样提供了便捷的支持,让内容创作者能够专注于文字本身,而无需过多关注排版细节。从2.1.1版本起,AnQiCMS便深度集成了Markdown编辑器的支持,使得文档内容的Markdown格式化和网页渲染变得轻而易举

2025-11-08

AnQiCMS的“推荐属性”如何控制文章在不同区域的特色显示?

在AnQiCMS中,文章的“推荐属性”是一个非常实用的功能,它允许我们对发布的内容进行精细化的标记和分类,进而实现在网站不同区域的特色化展示。这项功能的核心在于赋予文章特定的“旗帜”或“标签”,让它们能够在模板中被有选择性地调用出来,从而提升内容的曝光度和网站的整体运营效率。 ### 什么是“推荐属性”? 简单来说,“推荐属性”就是我们在发布或编辑文章时,可以为文章额外添加的一些特殊标记

2025-11-08

如何配置AnQiCMS实现多语言内容切换与显示?

在全球化日益盛行的今天,网站的多语言支持已不再是可有可无的功能,而是企业拓展国际市场、服务全球用户的重要基石。安企CMS(AnQiCMS)作为一款高效、可定制的企业级内容管理系统,充分考虑了这一需求,提供了灵活的多语言内容切换与显示解决方案。本文将详细探讨如何在AnQiCMS中配置和管理多语言内容,让您的网站能够轻松面向世界。 --- ### 一

2025-11-08

如何获取并显示特定分类的详细信息,例如分类简介和Banner图?

在网站运营中,清晰且具有吸引力的分类信息对于提升用户体验和优化搜索引擎表现至关重要。一个精心设计的分类页面不仅能帮助用户快速理解该分类的主题,还能通过展示相关的视觉元素(如Banner图)吸引用户,并为SEO提供丰富的内容。安企CMS提供了强大而灵活的功能,让您轻松实现这些目标。 ### 在安企CMS后台配置分类信息 在安企CMS中,管理分类的详细信息非常直观。进入后台管理界面后

2025-11-08

AnQiCMS的“时间因子-定时发布”功能如何影响内容的公开显示?

在如今内容为王的时代,网站内容的发布时机和节奏,往往决定了其传播效果和用户触达率。对于内容运营者来说,手动在每一个重要时刻上线内容,不仅耗时耗力,也容易因为疏忽而错过**时机。AnQiCMS深知这一痛点,特别引入了“时间因子-定时发布”功能,旨在让内容的上线过程更加智能化、精准化,为用户提供更为从容的内容管理体验。 ### 理解“时间因子-定时发布”的运作机制 在AnQiCMS的管理后台

2025-11-08

如何在文章详情页显示“上一篇”和“下一篇”文章的标题与链接?

在网站内容运营中,文章详情页面的导航设计至关重要。一个用户体验良好的详情页,不仅能清晰呈现当前内容,还能自然引导读者浏览更多相关或连贯的文章。其中,“上一篇”和“下一篇”文章的显示,是提升用户黏性和网站内部链接结构效率的经典做法。 AnqiCMS 作为一款基于 Go 语言开发的企业级内容管理系统,在设计之初就充分考虑了内容管理的效率与灵活性。它凭借简洁高效的架构

2025-11-08

AnQiCMS如何展示与当前文章相关的推荐内容列表?

在内容管理和网站运营中,如何有效吸引访客、延长他们在网站上的停留时间,并引导他们发现更多感兴趣的内容,是一个至关重要的问题。安企CMS(AnQiCMS)提供了强大而灵活的机制,帮助我们轻松地在当前文章页面展示相关的推荐内容列表,从而极大地提升用户体验和网站的整体表现。 **核心机制:`archiveList` 标签的 `type="related"` 属性** AnQiCMS

2025-11-08