在安企CMS的日常运营中,内容分类是组织信息、提升用户体验和优化SEO的关键要素。无论是为文章生成面包屑导航,还是在侧边栏展示当前分类下的其他内容,抑或是为分类页面设置动态标题,获取当前文档所属分类的ID和名称都是模板开发中的常见需求。安企CMS为此提供了直观且强大的模板标签,让您能够轻松地在前端页面中调用这些信息。

本文将深入探讨如何在安企CMS中,以自然流畅的方式获取当前文档所属分类的ID和名称,并提供实用的代码示例,助您更好地进行网站内容管理与呈现。


理解安企CMS的模板标签体系

安企CMS的模板系统采用了类似Django的语法风格,其核心在于使用双花括号 {{ 变量 }} 来输出变量内容,以及使用单花括号加百分号 {% 标签 %} 来调用功能性标签。这种设计使得模板代码既易于阅读又功能强大,让网站内容能够根据业务逻辑动态展示。

要获取当前文档所属分类的信息,我们将主要用到 archiveDetailcategoryDetail 这两个核心标签。


直接获取当前文档所属分类的ID和名称

当我们处于一个文档的详情页面时,安企CMS通常会将当前文档的完整数据加载到页面上下文中,命名为 archive 对象。利用这一点,我们可以非常直接地访问其分类信息。

1. 获取分类ID

要获取当前文档所属分类的唯一标识ID,您可以直接访问 archive 对象的 CategoryId 属性。这是一个数字ID,是关联分类的关键。

{# 假设当前页面上下文已存在 archive 对象,通常在文档详情页会自动提供 #}
{% if archive.CategoryId %}
    <p>当前文档所属分类ID:{{ archive.CategoryId }}</p>
{% else %}
    <p>当前文档未指定分类或分类信息不可用。</p>
{% endif %}

2. 获取分类名称及更多信息(通过分类对象)

安企CMS更为便捷的一点是,archive 对象不仅仅包含分类ID,它还提供了一个完整的 Category 子对象,其中封装了该分类的名称、链接、描述等常用属性。这意味着您无需再次查询,即可直接获取分类的标题和链接。

{% if archive.Category %}
    <p>文档所属分类名称:{{ archive.Category.Title }}</p>
    <p>分类链接:<a href="{{ archive.Category.Link }}">{{ archive.Category.Link }}</a></p>
    <p>分类ID:{{ archive.Category.Id }}</p>
    {# 您还可以获取更多分类属性,例如 Description #}
    <p>分类描述:{{ archive.Category.Description }}</p>
{% else %}
    <p>无法获取文档的分类对象信息。</p>
{% endif %}

这种方法最为直接和高效,因为它避免了额外的数据库查询,直接利用了当前页面已有的数据。在大多数文档详情页面的场景下,这是获取分类信息最推荐的方式。


利用 archiveDetail 结合 categoryDetail 进行更精细的控制

虽然直接访问 archive.Category 对象已经非常方便,但在某些特定场景下,您可能需要更灵活地获取分类数据,例如:

  • 您不在文档详情页,但手头有文档ID,需要获取其分类信息。
  • archive.Category 对象中不包含您所需的某个自定义分类字段。
  • 您希望通过文档的分类ID,去查询该分类的兄弟分类或子分类。

这时,我们可以组合使用 archiveDetailcategoryDetail 标签。

1. 使用 archiveDetail 明确获取当前文档的分类ID

即使 archive.CategoryId 已在上下文,通过 archiveDetail 标签明确地提取分类ID也是一种清晰的做法,尤其当 archive 对象不在全局上下文时。

{# 使用 archiveDetail 标签明确地提取当前文档的分类ID,并赋值给 docCategoryId 变量 #}
{% archiveDetail docCategoryId with name="CategoryId" %}
    <p>通过 archiveDetail 获取的分类ID: {{ docCategoryId }}</p>
{% endarchiveDetail %}

2. 将获取到的分类ID传递给 categoryDetail

一旦我们有了分类ID(无论是通过 archive.CategoryId 直接获取,还是通过 archiveDetail 标签提取),就可以将其作为参数传递给 categoryDetail 标签,以获取该分类的任何详细信息。

categoryDetail 标签允许您通过 `