AnQiCMS 如何获取并显示某个分类的详细信息,如分类标题、描述和缩略图?

在安企CMS中,获取并展示某个分类的详细信息是构建动态网站不可或缺的一部分,无论是用于创建分类列表、分类专题页,还是在文章详情页中展示所属分类的信息,安企CMS都提供了简洁而强大的模板标签来实现。

深入理解 `categoryDetail` 标签

安企CMS的模板系统采用了类似Django的语法,其中 categoryDetail 标签便是专门用于提取单个分类所有详细数据的核心工具。通过这个标签,我们可以轻松获取到分类的标题、描述、链接、图片等多种属性,从而在前端页面上灵活地进行展示。

使用 categoryDetail 标签时,你可以选择将获取到的数据赋值给一个变量以便后续使用,也可以直接输出特定字段的值。它的基本形式通常是这样的:{% categoryDetail 变量名称 with name="字段名称" id="1" %}

这个标签支持几个关键参数来帮助你精确地定位所需的分类信息:

  • id:这是最常用的参数,用于指定分类的唯一ID。当你希望获取某个特定分类的信息时,只需指定其分类ID,例如 id="5"。如果你在当前分类页面使用此标签而没有指定 id,它将自动获取当前页面的分类信息,非常方便。
  • token:如果你的网站启用了伪静态URL别名,也可以通过 token 参数来指定分类,例如 token="about-us",这通常是分类的拼音或自定义别名。
  • siteId:对于采用安企CMS多站点管理功能的用户,如果你需要调用其他站点的分类数据,可以通过指定 siteId 参数来实现。在大多数单站点情况下,这个参数无需填写。

分类详情的核心信息字段

了解了如何调用标签,接下来就是如何提取分类的具体信息了。categoryDetail 标签通过 name 参数来指定要获取的字段。以下是一些常用的字段及其用途:

  • 分类ID (Id):分类的唯一标识符。当你需要根据分类ID进行进一步操作,例如获取该分类下的文档列表时,这个字段就非常有用。

    <div>分类ID:{% categoryDetail with name="Id" %}</div>
    
  • 分类标题 (Title):分类的显示名称。这是最基本也是最重要的信息,通常用于在页面上直接呈现给用户。

    <h1>{% categoryDetail with name="Title" %}</h1>
    
  • 分类链接 (Link):分类的访问URL。通过这个链接,用户可以直接跳转到该分类的列表页或详情页。

    <a href="{% categoryDetail with name="Link" %}">{% categoryDetail with name="Title" %}</a>
    
  • 分类描述 (Description):对分类内容的简要概括。这个字段对于SEO和用户快速理解分类主旨都非常有帮助。

    <p>{% categoryDetail with name="Description" %}</p>
    
  • 分类内容 (Content):如果你的分类页面需要展示详细的文本介绍、活动说明或其他富文本内容,Content 字段就能派上用场。需要注意的是,由于它可能包含HTML内容,为了避免被系统默认转义,你通常需要配合 |safe 过滤器使用。如果内容是用Markdown编写的,还可以加上 render=true 参数进行渲染。

    <div>{% categoryDetail categoryContent with name="Content" render=true %}{{ categoryContent|safe }}</div>
    
  • 分类缩略图大图 (Logo) 和缩略图 (Thumb):为了让分类在列表或专题页展示时更具吸引力,你可以在后台为分类上传图片。Logo 通常指上传的原始尺寸或较大尺寸的图片,而 Thumb 则是系统根据后台设置自动生成的缩略图。你可以根据页面布局需求选择使用。

    <img src="{% categoryDetail with name="Logo" %}" alt="{% categoryDetail with name="Title" %}" />
    <img src="{% categoryDetail with name="Thumb" %}" alt="{% categoryDetail with name="Title" %}" />
    
  • 分类 Banner 组图 (Images):如果你的分类需要展示轮播图或多张相关图片,这个字段会返回一个图片URL数组。你需要使用 for 循环来遍历并显示这些图片。

    {% categoryDetail categoryImages with name="Images" %}
    <div class="banner-slider">
        {% for img in categoryImages %}
            <img src="{{ img }}" alt="{% categoryDetail with name="Title" %}" />
        {% endfor %}
    </div>
    
  • 上级分类ID (ParentId):当分类存在层级关系时,这个字段会显示其所属的上级分类ID,对于构建多级导航或面包屑路径非常有用。

    <div>上级分类ID:{% categoryDetail with name="ParentId" %}</div>
    
  • 分类的文档数量 (ArchiveCount):显示当前分类(及其子分类,如果后台设置为继承)下包含的文档总数。

    <span>共有 {{% categoryDetail with name="ArchiveCount" %}} 篇文章</span>
    
  • 自定义字段:安企CMS允许你在内容模型中为分类添加额外的自定义字段。这些字段也可以通过 categoryDetail 标签获取。你可以直接通过 name="你的自定义字段名" 来获取特定字段的值,或者通过 name="Extra" 获取所有自定义字段并进行遍历。

    {# 获取名为 'customAuthor' 的自定义字段 #}
    <div>自定义作者:{% categoryDetail with name="customAuthor" %}</div>
    
    
    {# 遍历所有自定义字段 #}
    {% categoryDetail extras with name="Extra" %}
    <div>
        {% for field in extras %}
            <div>{{ field.Name }}:{{ field.Value }}</div>
        {% endfor %}
    </div>
    

在模板中组合展示分类信息

现在,让我们将这些信息组合起来,看看如何在实际模板中构建一个完整的分类展示区域。比如,在一个分类列表页面,我们可能需要显示当前分类的标题、描述和缩略图;或者在文章详情页的侧边栏,显示当前文章所属分类的详细信息。

示例:在分类列表页面头部展示当前分类的详细信息

假设你正在编辑 category/list.htmlarticle/list.html 等分类模板文件,categoryDetail 标签在不指定ID时会自动获取当前分类。

<div class="category-header">
    {# 获取当前分类的标题 #}
    <h1>{% categoryDetail with name="Title" %}</h1>

    {# 获取当前分类的描述 #}
    <p class="category-description">{% categoryDetail with name="Description" %}</p>

    {# 如果存在分类缩略图,则显示 #}
    {% categoryDetail categoryThumb with name="Thumb" %}
    {% if categoryThumb %}
        <img src="{{ categoryThumb }}" alt="{% categoryDetail with name="Title" %}" class="category-thumbnail" />
    {% endif %}

    {# 如果存在分类Banner组图,则显示第一个作为背景图 #}
    {% categoryDetail bannerImages with name="Images" %}
    {% if bannerImages %}
        {% set pageBanner = bannerImages[0] %}
        <div class="category-banner" style="background-image: url({{ pageBanner }});"></div>
    {% endif %}
</div>

示例:在文章详情页中获取并展示特定分类的信息

假设你想在文章详情页侧边栏显示ID为10