如何使用`categoryList`标签构建多级分类导航或在内容区域展示分类列表?

📅 👁️ 75

在安企CMS中,妥善组织网站内容分类是提升用户体验和网站可维护性的重要一环。无论是构建清晰的多级导航菜单,帮助用户快速定位信息,还是在页面内容区域巧妙地展示不同分类的内容,categoryList标签都是实现这些功能的核心工具。

核心标签:categoryList 简介

categoryList标签是安企CMS模板引擎中专门用于获取网站分类列表的标签。它非常灵活,能够根据您的需求,获取特定内容模型的分类、特定父级分类下的子分类,甚至整个网站的所有分类。

使用它的基本结构是这样的: {% categoryList categories with moduleId="1" parentId="0" %} ... {% endcategoryList %}

让我们来分解一下这个标签的关键参数:

  • moduleId:安企CMS支持多内容模型,比如您可能有文章模型(通常ID为1)、产品模型(通常ID为2)等。moduleId参数就是用来指定您想获取哪个内容模型下的分类。例如,moduleId="1"会获取文章分类,moduleId="2"会获取产品分类。
  • parentId:这是控制分类层级关系的关键。
    • 如果您想获取顶级分类,可以设置为parentId="0"
    • 如果您在循环一个分类时,想获取其直接的下级子分类,则可以省略parentId参数,categoryList标签会智能地读取当前循环分类的ID作为父级ID。
    • 如果您想获取当前分类的兄弟分类,可以设置为parentId="parent"
  • limit:如果您只想显示特定数量的分类,可以使用limit参数来限制返回的数量,比如limit="10"。您甚至可以设置limit="2,10"来表示从第2个分类开始,获取10个分类。
  • siteId:当您使用多站点功能时,可以通过siteId来指定获取特定站点下的分类数据。通常情况下,这个参数可以忽略。

categoryList标签执行后,它会返回一个名为categories(您也可以自定义这个变量名)的数组。在您使用for循环遍历这个数组时,每一个item都代表一个分类,它包含了丰富的属性,例如:

  • item.Id:分类的唯一ID。
  • item.Title:分类的名称。
  • item.Link:分类的链接地址,可直接用于<a>标签的href属性。
  • item.Description:分类的简介。
  • item.Logo:分类的Logo图片地址。
  • item.Thumb:分类的缩略图地址。
  • item.HasChildren:一个布尔值,用于判断当前分类是否有子分类,这在构建多级菜单时非常有用。
  • item.IsCurrent:一个布尔值,表示当前分类是否是用户正在访问的页面所属的分类,常用于导航高亮。
  • item.ArchiveCount:当前分类下(不包含子分类)的文档数量。

构建多级分类导航:让用户一眼找到方向

一个结构清晰的网站导航就像一张地图,能帮助用户快速找到目的地。利用categoryList标签,您可以轻松构建出从一级菜单到多级下拉菜单的复杂导航结构。

首先,我们通常从获取顶级分类开始,作为我们导航菜单的第一级。

{# 假设我们正在构建一个文章分类的导航菜单,文章模型ID为1 #}
<ul class="main-nav">
    {% categoryList topCategories with moduleId="1" parentId="0" %}
    {% for item in topCategories %}
    <li class="nav-item {% if item.IsCurrent %}active{% endif %}">
        <a href="{{ item.Link }}">{{ item.Title }}</a>
        {# 检查当前分类是否有子分类,如果有,则渲染子菜单 #}
        {% if item.HasChildren %}
        <ul class="sub-nav">
            {# 再次调用 categoryList,此时 parentId 留空,它会自动获取当前 item.Id 的子分类 #}
            {% categoryList subCategories %}
            {% for subItem in subCategories %}
            <li class="sub-nav-item {% if subItem.IsCurrent %}active{% endif %}">
                <a href="{{ subItem.Link }}">{{ subItem.Title }}</a>
                {# 您可以继续在这里嵌套,以构建三级甚至更多级别的菜单 #}
                {% if subItem.HasChildren %}
                <ul class="sub-sub-nav">
                    {% categoryList subSubCategories %}
                    {% for subSubItem in subSubCategories %}
                    <li class="sub-sub-nav-item {% if subSubItem.IsCurrent %}active{% endif %}">
                        <a href="{{ subSubItem.Link }}">{{ subSubItem.Title }}</a>
                    </li>
                    {% endfor %}
                    {% endcategoryList %}
                </ul>
                {% endif %}
            </li>
            {% endfor %}
            {% endcategoryList %}
        </ul>
        {% endif %}
    </li>
    {% endfor %}
    {% endcategoryList %}
</ul>

这段代码展示了如何通过嵌套categoryList标签来构建多级导航。关键在于内部的categoryList会根据外部循环item.Id自动获取其子分类,而item.HasChildren则负责判断是否需要渲染子菜单的结构。同时,item.IsCurrent可以帮助您为当前访问的分类添加active类,实现导航高亮效果。

在内容区域展示分类列表:丰富页面内容

categoryList标签不仅仅用于导航,它也能在页面的主体内容区域发挥重要作用,例如展示首页的“热门分类”或某个特定模块下的分类内容区块。

比如,在网站首页,我们可能想展示“文章”和“产品”这两个大分类,并在每个分类下显示几篇最新的文章或产品。这需要将categoryListarchiveList(文档列表标签)结合起来使用。

{# 假设文章模型ID为1,产品模型ID为2 #}
<div class="content-sections">
    {# 获取顶级文章分类 #}
    {% categoryList articleCategories with moduleId="1" parentId="0" limit="3" %}
    <section class="section-block">
        <h2>最新文章</h2>
        <div class="category-grid">
            {% for cat in articleCategories %}
            <div class="category-card">
                <h3><a href="{{ cat.Link }}">{{ cat.Title }}</a></h3>
                <p>{{ cat.Description|truncatechars:80 }}</p> {# 截取分类描述,限制字符数 #}
                <ul class="article-list">
                    {# 在每个分类下获取最新的3篇文章 #}
                    {% archiveList articles with categoryId=cat.Id limit="3" order="id desc" %}
                    {% for article in articles %}
                    <li><a href="{{ article.Link }}">{{ article.Title }}</a></li>
                    {% endfor %}
                    {% endarchiveList %}
                </ul>
            </div>
            {% endfor %}
        </div>
    </section>
    {% endcategoryList %}

    {# 获取顶级产品分类 #}
    {% categoryList productCategories with moduleId="2" parentId="0" limit="3" %}
    <section class="section-block">
        <h2>热门产品</h2>
        <div class="category-grid">
            {% for cat in productCategories %}
            <div class="category-card">
                <h3><a href="{{ cat.Link }}">{{ cat.Title }}</a></h3>
                <img src="{{ cat.Thumb }}" alt="{{ cat.Title }}" class="category-thumb">
                <ul class="product-list">
                    {# 在每个分类下获取最新的4个产品 #}
                    {% archiveList products with categoryId=cat.Id limit="4" order="id desc" %}
                    {% for product in products %}
                    <li><a href="{{ product.Link }}">{{ product.Title }}</a></li>
                    {% endfor %}
                    {% endarchiveList %}
                </ul>
            </div>
            {% endfor %}
        </div>
    </section>
    {% endcategoryList %}
</div>

这段代码展示了如何遍历几个顶级分类,并在每个分类内部,再使用archiveList标签来获取该分类下的具体文章或产品。这样可以在不离开当前页面的情况下,向用户展示丰富且分类清晰的内容。

实用技巧与注意事项

  • moduleId的重要性:始终记得根据您想要获取的内容类型(文章、产品等)来指定正确的moduleId,以避免获取到错误的分类数据。
  • limit的灵活运用:无论是在导航还是内容区域,limit参数都能帮助您控制显示数量,避免页面过于臃肿。
  • item.IsCurrent实现高亮:在导航菜单中,利用item.IsCurrent这个布尔值,可以轻松为当前用户正在访问的分类添加CSS类,使其高亮显示,提升用户体验。
  • **样式与

相关文章

`prevArchive`和`nextArchive`标签如何在文档详情页显示上一篇/下一篇文档的链接和标题?

当我们在AnQiCMS搭建的网站上浏览内容时,一篇篇精心制作的文档为读者带来了价值。为了让读者的阅读体验更加流畅,并鼓励他们探索更多相关内容,在每篇文章的末尾提供“上一篇”和“下一篇”的导航链接显得尤为重要。这不仅能够有效引导用户在网站内进行深度浏览,提升页面访问量和用户粘性,对于网站的内部链接结构和SEO优化也大有裨益。 AnQiCMS作为一款注重用户体验和SEO友好的内容管理系统

2025-11-08

如何使用`archiveDetail`标签获取并完整显示特定文档的标题、内容和自定义字段?

在 AnQiCMS 中,展示单个文档的详细内容是网站构建的核心需求之一。无论是文章详情页、产品详情页,还是其他自定义类型的内容展示,我们都需要一种灵活高效的方式来获取并呈现文档的标题、正文以及根据业务需求定义的自定义字段。`archiveDetail` 标签正是为此而生,它能帮助您轻松实现这一目标。 ### 深入了解 `archiveDetail` 标签

2025-11-08

`archiveList`标签如何精确控制文档列表的显示数量、排序和筛选条件?

在安企CMS中,`archiveList` 标签是用于动态调用和展示文档列表的核心工具。无论是博客文章、产品展示还是新闻动态,这个标签都能帮助您根据特定的需求,灵活地控制文档的显示数量、排序方式以及各种筛选条件。深入理解其各项参数,将使您能够构建出高度定制化且功能强大的内容展示页面。 ### 精确控制文档显示数量:`limit` 参数的运用 文档列表的数量控制主要通过 `limit`

2025-11-08

如何为AnQiCMS网站的特定内容(如文档、分类、单页面)自定义独立的显示模板?

在网站运营中,我们时常会遇到需要为特定内容赋予独特“面貌”的场景。可能是一个承载重要信息的“关于我们”页面,需要别具一格的布局;也可能是一系列产品详情,希望展现与众不同的参数对比;甚至是一个内容分类,期待以更具吸引力的方式呈现列表。安企CMS(AnQiCMS)深知这些精细化内容展示的需求,因此提供了一套灵活且强大的模板定制机制,让我们可以为文档、分类和单页面等内容量身打造专属的显示模板

2025-11-08

`categoryDetail`标签如何获取并显示特定分类的名称、描述、Banner图和缩略图?

在AnQiCMS的模板制作中,我们经常需要获取并展示特定分类的详细信息,例如分类的名称、描述,甚至是预设的Banner图和缩略图。`categoryDetail`标签正是为此而生,它能帮助我们轻松地从数据库中提取这些数据,并在网站前端进行灵活展示。 ### 理解 `categoryDetail` 标签的核心作用 `categoryDetail`标签的主要功能是获取单个分类的详细数据

2025-11-08

如何通过`pageList`和`pageDetail`标签有效管理和显示网站的单页面内容?

在网站运营中,单页面内容扮演着不可或缺的角色,它们通常承载着“关于我们”、“联系我们”、“服务条款”、“隐私政策”等重要信息,既需要清晰展示,又要求管理便捷。AnQiCMS 提供了 `pageList` 和 `pageDetail` 这两个强大的模板标签,帮助我们高效地管理和显示这些单页面内容。 ### 管理单页面内容:后台操作指引 AnQiCMS

2025-11-08

`tagDataList`标签如何显示特定标签下的所有相关文档列表,并支持分页?

在安企CMS的日常内容管理中,我们常常需要对网站内容进行更灵活的组织和展示。除了传统的分类系统,标签(Tag)为我们提供了另一种强大的内容关联方式。它能将不同分类但主题相近的文档聚合在一起,为用户带来更聚焦的浏览体验。今天,我们就来深入了解安企CMS中一个非常实用的模板标签——`tagDataList`,看看它如何帮助我们显示特定标签下的所有相关文档列表,并轻松实现分页。 ###

2025-11-08

如何使用`navList`标签创建网站的主导航菜单,并支持两级下拉显示?

网站的主导航菜单是用户了解网站内容和结构的重要入口。安企CMS提供了强大且灵活的`navList`标签,帮助我们轻松创建和管理支持多级下拉的导航菜单,从而提升网站的用户体验和信息架构的清晰度。 ### 第一步:在安企CMS后台配置导航菜单 在开始编写模板代码之前,我们需要在安企CMS的后台管理系统中设置好导航菜单的结构。 1. **进入导航设置界面**:登录到安企CMS后台

2025-11-08