安企CMS作为一款高效的企业级内容管理系统,在内容组织和展示上提供了极大的灵活性。对于许多网站来说,如何根据不同的内容模型或者分类的层级关系来展示分类列表,是一个非常普遍且重要的需求。这不仅关乎网站内容的组织结构,也直接影响到用户体验和搜索引擎优化(SEO)效果。

在安企CMS中,实现这样的展示并不复杂。系统内置的模板标签为我们提供了强大的功能,让我们能够得心应手地控制分类列表的输出。

理解安企CMS的分类体系

在深入探讨如何展示分类列表之前,我们首先需要理解安企CMS是如何构建其分类体系的。系统引入了“内容模型”的概念,例如默认的文章模型和产品模型。每个分类都必须属于一个特定的内容模型。这意味着,你可以为文章定义一套分类,再为产品定义另一套完全独立的分类。这种设计极大地提升了内容管理的灵活性,让你的网站可以承载多种类型的内容。

同时,安企CMS的分类也支持多级层级关系,即所谓的“父子关系”。你可以创建顶级分类,并在这些顶级分类下进一步创建子分类,形成清晰的导航路径。

核心工具:categoryList 模板标签

要根据内容模型或父级关系显示分类列表,我们主要会用到安企CMS的 categoryList 模板标签。这个标签允许我们根据多种条件筛选和展示分类数据,并且提供了丰富的参数来精细控制输出结果。

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

在这里,categories 是我们为获取到的分类列表自定义的变量名,你也可以根据需要替换成其他名称。moduleIdparentId 则是这个标签最重要的两个参数。

  1. 根据内容模型筛选 (moduleId) moduleId 参数用于指定你想要获取哪个内容模型下的分类。安企CMS通常会为“文章”模型分配ID 1,为“产品”模型分配ID 2。如果你自定义了其他内容模型,它们也会有对应的ID。通过设置 moduleId="1",你就能只显示文章相关的分类;设置为 moduleId="2",则显示产品相关的分类。

  2. 根据父级关系筛选 (parentId) parentId 参数则用来控制分类的层级显示。

    • 当你设置 parentId="0" 时,categoryList 将会显示指定内容模型下的所有顶级分类。这是构建主导航或一级分类菜单的常用方法。
    • 如果你想显示某个特定父级分类下的所有子分类,只需将 parentId 的值设置为该父级分类的ID即可。例如,parentId="10" 会显示ID为10的分类下的所有子分类。
    • 另外,如果在一个循环中,你想获取当前分类的下级分类,通常我们会将 parentId 的值设置为循环中当前分类的 item.Id

实战演示:灵活构建分类列表

了解了基础知识后,我们来看几个常见的应用场景。

场景一:显示所有顶级分类(例如,网站主导航)

假设我们想在网站的头部导航中显示所有文章模型的顶级分类。

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

这段代码会遍历文章模型下所有 parentId0 的分类,并为每个分类生成一个链接和标题。

场景二:显示特定父级分类下的子分类(例如,侧边栏导航)

如果你的网站有一个分类ID为 5 的“解决方案”分类,并且你想在侧边栏显示它下面的所有子分类。

<div class="sidebar-menu">
    <h3>解决方案</h3>
    <ul>
        {% categoryList subCategories with parentId="5" %}
        {% for item in subCategories %}
        <li>
            <a href="{{ item.Link }}">{{ item.Title }}</a>
        </li>
        {% endfor %}
        {% endcategoryList %}
    </ul>
</div>

这里我们为子分类列表使用了 subCategories 这个变量名,并指定了父级分类ID为 5

场景三:嵌套显示多级分类(例如,多级下拉菜单)

在很多复杂的导航或产品分类展示中,我们需要显示多级嵌套的分类列表。安企CMS允许你在 for 循环内部嵌套 categoryList 标签,并结合 item.HasChildren 属性来判断当前分类是否有子分类。

<ul class="main-nav">
    {% categoryList categories with moduleId="2" parentId="0" %} {# 获取产品模型的顶级分类 #}
    {% for item in categories %}
    <li>
        <a href="{{ item.Link }}">{{ item.Title }}</a>
        {% if item.HasChildren %} {# 判断当前分类是否有子分类 #}
        <ul class="sub-nav">
            {% categoryList subCategories with parentId=item.Id %} {# 获取当前分类的子分类 #}
            {% for inner in subCategories %}
            <li>
                <a href="{{ inner.Link }}">{{ inner.Title }}</a>
                {% if inner.HasChildren %} {# 如果子分类也有下级,可以继续嵌套 #}
                <ul class="sub-sub-nav">
                    {% categoryList subCategories2 with parentId=inner.Id %}
                    {% for inner2 in subCategories2 %}
                    <li><a href="{{ inner2.Link }}">{{ inner2.Title }}</a></li>
                    {% endfor %}
                    {% endcategoryList %}
                </ul>
                {% endif %}
            </li>
            {% endfor %}
            {% endcategoryList %}
        </ul>
        {% endif %}
    </li>
    {% endfor %}
    {% endcategoryList %}
</ul>

这段代码首先获取产品模型下的顶级分类,然后在每个顶级分类的循环中,检查它是否有子分类。如果有,就再次使用 categoryList 标签,并将 parentId 设置为当前父级分类的ID(item.Id),以此类推,实现多级嵌套。

场景四:在分类列表下显示该分类的文档摘要

有时候,我们不仅要显示分类,还希望在每个分类旁边或下方展示其最新的几篇文档,例如在首页的某个模块。这时,我们可以在 categoryList 循环中嵌套 archiveList 标签。

<div>
    {% categoryList categories with moduleId="1" parentId="0" %}
    {% for item in categories %}
    <div class="category-block">
        <h3><a href="{{ item.Link }}">{{ item.Title }}</a></h3>
        <ul class="article-list">
            {% archiveList archives with type="list" categoryId=item.Id limit="5" %} {# 获取当前分类的最新5篇文档 #}
            {% for archive in archives %}
            <li>
                <a href="{{ archive.Link }}">{{ archive.Title }}</a>
                <span>({{ stampToDate(archive.CreatedTime, "2006-01-02") }})</span>
            </li>
            {% empty %}
            <li>该分类暂无文档</li>
            {% endfor %}
            {% endarchiveList %}
        </ul>
        <a href="{{ item.Link }}" class="more">查看更多</a>
    </div>
    {% endfor %}
</div>

通过 categoryId=item.IdarchiveList 标签能够准确地获取到当前循环分类下的文档。limit="5" 则限制了显示的文档数量。

小结

通过 categoryList 标签配合 moduleIdparentId 参数,我们可以在安企CMS中灵活地构建各种分类列表。无论是简单的顶级分类,还是复杂的多级嵌套导航,甚至是分类与文档混合展示,都能够轻松实现。掌握这些标签的使用,将让你的网站内容组织结构更加清晰,用户更容易找到所需信息,从而提升整体的网站运营效果。


常见问题 (FAQ)

1. 如何在分类列表中判断并高亮显示当前访问页面所属的分类?

你可以在 categoryList 循环中的 item 对象上使用 item.IsCurrent 属性进行判断。例如,{% if item.IsCurrent %}active{% endif %} 可以用来为当前分类的