安企CMS作为一款高效的企业级内容管理系统,在内容组织和展示上提供了极大的灵活性。对于许多网站来说,如何根据不同的内容模型或者分类的层级关系来展示分类列表,是一个非常普遍且重要的需求。这不仅关乎网站内容的组织结构,也直接影响到用户体验和搜索引擎优化(SEO)效果。
在安企CMS中,实现这样的展示并不复杂。系统内置的模板标签为我们提供了强大的功能,让我们能够得心应手地控制分类列表的输出。
理解安企CMS的分类体系
在深入探讨如何展示分类列表之前,我们首先需要理解安企CMS是如何构建其分类体系的。系统引入了“内容模型”的概念,例如默认的文章模型和产品模型。每个分类都必须属于一个特定的内容模型。这意味着,你可以为文章定义一套分类,再为产品定义另一套完全独立的分类。这种设计极大地提升了内容管理的灵活性,让你的网站可以承载多种类型的内容。
同时,安企CMS的分类也支持多级层级关系,即所谓的“父子关系”。你可以创建顶级分类,并在这些顶级分类下进一步创建子分类,形成清晰的导航路径。
核心工具:categoryList 模板标签
要根据内容模型或父级关系显示分类列表,我们主要会用到安企CMS的 categoryList 模板标签。这个标签允许我们根据多种条件筛选和展示分类数据,并且提供了丰富的参数来精细控制输出结果。
它的基本使用方式是这样的:{% categoryList categories with moduleId="1" parentId="0" %} ... {% endcategoryList %}。
在这里,categories 是我们为获取到的分类列表自定义的变量名,你也可以根据需要替换成其他名称。moduleId 和 parentId 则是这个标签最重要的两个参数。
根据内容模型筛选 (
moduleId)moduleId参数用于指定你想要获取哪个内容模型下的分类。安企CMS通常会为“文章”模型分配ID1,为“产品”模型分配ID2。如果你自定义了其他内容模型,它们也会有对应的ID。通过设置moduleId="1",你就能只显示文章相关的分类;设置为moduleId="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>
这段代码会遍历文章模型下所有 parentId 为 0 的分类,并为每个分类生成一个链接和标题。
场景二:显示特定父级分类下的子分类(例如,侧边栏导航)
如果你的网站有一个分类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.Id,archiveList 标签能够准确地获取到当前循环分类下的文档。limit="5" 则限制了显示的文档数量。
小结
通过 categoryList 标签配合 moduleId 和 parentId 参数,我们可以在安企CMS中灵活地构建各种分类列表。无论是简单的顶级分类,还是复杂的多级嵌套导航,甚至是分类与文档混合展示,都能够轻松实现。掌握这些标签的使用,将让你的网站内容组织结构更加清晰,用户更容易找到所需信息,从而提升整体的网站运营效果。
常见问题 (FAQ)
1. 如何在分类列表中判断并高亮显示当前访问页面所属的分类?
你可以在 categoryList 循环中的 item 对象上使用 item.IsCurrent 属性进行判断。例如,{% if item.IsCurrent %}active{% endif %} 可以用来为当前分类的