在安企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.html 或 article/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