如何获取并显示特定分类的详细信息(如描述、Banner图)?

在安企CMS中,灵活地获取并展示分类的详细信息,例如分类的描述、Banner图或缩略图,对于构建内容丰富、视觉吸引力强的网站至关重要。无论是需要在分类列表页展示简介,还是在特定页面引用某个分类的宣传图,安企CMS都提供了直观且强大的模板标签来帮助您实现这些需求。

要获取分类的详细信息,我们主要依赖于 categoryDetail 这个模板标签。这个标签专门设计用于提取单个分类的各项数据,让您可以精确地控制如何在前端页面上呈现这些内容。

核心标签:categoryDetail 的使用

categoryDetail 标签的基本用法是 {% categoryDetail 变量名称 with name="字段名称" %}。其中,“变量名称”是可选的,如果您指定了变量名称,就可以在后续的代码中通过这个变量来引用获取到的数据;如果未指定,标签会直接输出该字段的值。

这个标签最常用的参数是 name,它用来指定您想要获取的分类信息的具体字段。例如,要获取分类的描述,您会使用 name="Description";要获取Banner图,则会使用 name="Images"

此外,您还可以通过 idtoken 参数来明确指定要获取哪个分类的信息:

  • id 参数:通过分类的唯一数字ID来指定。例如,id="10" 会获取ID为10的分类信息。
  • token 参数:通过分类的URL别名(自定义URL)来指定。例如,token="news-center" 会获取URL别名为”news-center”的分类信息。

如果不在 categoryDetail 标签中指定 idtoken,它会智能地尝试获取当前页面所关联的分类信息。这在分类列表页或分类详情页中非常方便,因为您无需手动指定ID,系统会自动识别当前分类。

获取和显示分类描述

分类描述通常用于简要介绍分类内容,对SEO也很有帮助。在安企CMS的后台,您可以在“文档分类”的编辑页面中填写“分类简介”字段。

在模板中,您可以通过以下方式获取并显示它:

{# 假设这是在某个分类页面,自动获取当前分类的描述 #}
<div>分类简介:{% categoryDetail with name="Description" %}</div>

{# 如果您想获取指定ID(例如ID为5)的分类描述 #}
<div>关于我们分类简介:{% categoryDetail with name="Description" id="5" %}</div>

{# 将描述内容赋值给一个变量,再进行处理或显示 #}
{% categoryDetail categoryDesc with name="Description" %}
<p>{{ categoryDesc|safe }}</p>

请注意,如果分类描述可能包含HTML标签(例如后台富文本编辑器输入的格式化内容),建议使用 |safe 过滤器,以确保HTML内容能够正确解析并显示,而不是被转义成纯文本。

展示分类的Banner图和缩略图

Banner图和缩略图是网站视觉呈现的重要组成部分。在安企CMS后台的“文档分类”编辑页面,您可以上传“Banner图”(支持多张)和“缩略图”。

获取分类缩略图(Logo/Thumb)

分类缩略图通常指一张代表性的图片。在安企CMS中,您可以使用 name="Logo"name="Thumb" 来获取:

{# 获取当前分类的缩略图大图 #}
<img src="{% categoryDetail with name="Logo" %}" alt="{% categoryDetail with name="Title" %}" />

{# 获取当前分类的缩略图 #}
<img src="{% categoryDetail with name="Thumb" %}" alt="{% categoryDetail with name="Title" %}" />

{# 获取指定ID(例如ID为5)分类的缩略图 #}
<img src="{% categoryDetail with name="Logo" id="5" %}" alt="{% categoryDetail with name="Title" id="5" %}" />

这里的 alt 属性通常会使用分类的标题 name="Title" 来填充,以便于SEO和可访问性。

展示分类Banner图(Images)

分类Banner图通常是一组图片,可以用于轮播或多图展示。name="Images" 会返回一个图片URL的数组。由于是一个数组,您需要使用 for 循环来遍历并显示它们。

{# 假设您正在一个分类页面,要显示该分类的所有Banner图 #}
<div class="category-banner-slider">
    {% categoryDetail bannerImages with name="Images" %}
    {% for image_url in bannerImages %}
        <img src="{{ image_url }}" alt="{% categoryDetail with name="Title" %}" />
    {% endfor %}
</div>

{# 如果您只需要显示第一张Banner图 #}
{% categoryDetail bannerImages with name="Images" %}
{% if bannerImages %} {# 确保图片数组不为空 #}
    <div class="main-banner" style="background-image: url('{{ bannerImages[0] }}');">
        {# 这里可以放一些叠加的文字或按钮 #}
    </div>
{% endif %}

通过 {% if bannerImages %} 这样的判断,可以避免在没有上传图片时出现模板错误。bannerImages[0] 可以直接获取数组中的第一张图片。

获取分类的内容和自定义字段

除了描述和图片,分类还可能拥有更长的“分类内容”或者您在后台为该模型自定义的字段。

获取分类内容(Content)

如果分类内容较为丰富,您可以在后台填写“分类内容”字段。在模板中,获取方式与描述类似:

{% categoryDetail categoryContent with name="Content" %}
<div class="category-full-content">
    {{ categoryContent|safe }} {# 同样,如果包含HTML,使用|safe #}
</div>

获取自定义字段

安企CMS允许您为内容模型(进而影响分类)添加自定义字段。如果您为某个分类模型创建了名为 custom_field_name 的字段,您可以直接通过其名称获取:

{# 获取名为 custom_field_name 的自定义字段的值 #}
<div>自定义信息:{% categoryDetail with name="custom_field_name" %}</div>

{# 如果您想遍历所有自定义字段,可以使用 name="Extra" #}
{% categoryDetail categoryExtraFields with name="Extra" %}
<div class="custom-fields">
    {% for field in categoryExtraFields %}
        <div>
            <span>{{ field.Name }}:</span>
            <span>{{ field.Value }}</span>
        </div>
    {% endfor %}
</div>

name="Extra" 会返回一个包含所有自定义字段的数组,每个字段都包含 Name(字段显示名称)和 Value(字段值)属性,您可以根据需要循环遍历并展示。

结合 categoryList 标签

在某些场景下,您可能首先需要遍历分类列表,然后对每个分类显示其详细信息。这时,可以将 categoryDetail 的逻辑融入到 categoryList 的循环中。例如,在循环输出一级分类时,显示每个分类的缩略图和描述:

{% categoryList categories with moduleId="1" parentId="0" %} {# 获取文章模型下所有顶级分类 #}
    {% for category in categories %}
    <div class="category-item">
        <h3><a href="{{ category.Link }}">{{ category.Title }}</a></h3>
        {# 直接使用 category 变量中包含的 Logo 和 Description 字段 #}
        {% if category.Thumb %}<img src="{{ category.Thumb }}" alt="{{ category.Title }}" />{% endif %}
        <p>{{ category.Description }}</p>
    </div>
    {% endfor %}
{% endcategoryList %}

请注意,categoryList 标签在循环时,item 变量(这里是 category)已经包含了分类的 TitleLinkDescriptionLogoThumb 等常用字段,无需再次使用 categoryDetail 来获取这些基础信息,直接通过 {{ category.字段名 }} 即可调用。只有当您需要获取当前循环分类的其他更深层次或不常用信息(如 Images 数组或某些特定自定义字段)时,才可能需要在 categoryList 的循环内部再使用 categoryDetail 标签,并传入 id=category.Id

通过以上方法,您就可以灵活地在安企CMS网站的前端页面上,展示任何您想呈现的分类详细信息,无论是文字描述、单张图片,还是多图Banner。


常见问题 (FAQ)

Q1: 如果我的分类描述(Description)或分类内容(Content)中包含了HTML代码,为什么在页面上显示的是原始代码而不是渲染后的效果?

A1: 这是因为安企CMS的模板引擎出于安全考虑,默认会对所有输出的HTML内容进行转义,将 < 转换为 &lt; 等,以防止潜在的XSS攻击。如果您确定这些内容是安全且需要渲染HTML效果的,可以在输出时使用 |safe 过滤器。例如:{{ categoryDesc|safe }}

**Q