在网站运营中,我们经常需要为特定的分类创建独特、吸引人的展示页面,或者在页面的不同位置灵活地调用某些分类的详细信息。例如,你可能希望在某个产品分类页顶部展示一个专属的Banner图,或者在侧边栏列出某个特定服务分类的标题和简介。AnQiCMS作为一个高效且可定制的内容管理系统,提供了非常直观的方式来实现这些需求。
要获取并展示指定分类的详细信息,比如分类的标题、描述和Banner图,我们主要会用到AnQiCMS的模板标签 categoryDetail。这个标签非常强大,它能帮助我们精准地定位到所需分类,并提取出其丰富的属性。
使用 categoryDetail 获取分类详情
categoryDetail 标签的基本用法是在模板中直接调用分类的某个字段。当你在分类页面(如分类列表页或某个具体分类的首页)使用它时,它默认会获取当前页面的分类信息。
如果你想获取一个指定的分类信息,而不是当前页面所在的分类,就需要用到 id 或 token 参数来明确告诉AnQiCMS你想要哪个分类。其中,id 是分类在后台的唯一数字ID,而 token 则是你在后台为分类设置的URL别名。通常,通过id来指定分类是最精确和常用的方式。
让我们来看看如何具体获取分类的标题、描述和Banner图。
获取分类标题 (Title)
分类的标题是其最基本的属性之一,常常用于页面标题、导航菜单或内容区块的展示。
要获取指定分类的标题,你可以在模板中这样写:
{% categoryDetail myCategory with id="15" %}
<h1>{{ myCategory.Title }}</h1>
{% endcategoryDetail %}
这里我们假设分类的ID是 15。myCategory 是我们为这个分类信息定义的一个临时变量名,你也可以根据自己的习惯来命名。如果 myCategory 存在,它就会显示分类的标题。
如果你只是想简单地获取并直接输出,也可以省略变量名:
<title>{% categoryDetail with name="Title" id="15" %} - 网站名称</title>
获取分类描述 (Description)
分类描述通常用于为用户提供分类内容的简要概括,或者作为SEO优化中的meta description。
获取指定分类的描述同样简单:
{% categoryDetail myCategory with id="15" %}
<p class="category-description">{{ myCategory.Description|safe }}</p>
{% endcategoryDetail %}
这里我们添加了 |safe 过滤器。因为分类描述在后台可能会包含HTML富文本内容,使用 |safe 可以确保这些HTML代码被浏览器正确解析显示,而不是作为纯文本输出。
获取分类Banner图 (Images, Logo, Thumb)
在AnQiCMS中,分类的图片可以有多种形式:Images 用于存储多张轮播图(Banner组图),Logo 用于显示分类的缩略图大图,而 Thumb 则用于显示缩略图。根据你的需求,你可以选择调用不同的字段。
1. 获取单张Banner图 (Logo 或 Thumb)
如果你的分类只需要展示一张主要的Banner图或缩略图,可以直接调用 Logo 或 Thumb 字段。
{% categoryDetail myCategory with id="15" %}
{% if myCategory.Logo %} {# 检查Logo是否存在 #}
<img src="{{ myCategory.Logo }}" alt="{{ myCategory.Title }} 的大图" class="category-logo-banner">
{% endif %}
{% if myCategory.Thumb %} {# 检查Thumb是否存在 #}
<img src="{{ myCategory.Thumb }}" alt="{{ myCategory.Title }} 的缩略图" class="category-thumb-image">
{% endif %}
{% endcategoryDetail %}
Logo 通常用于展示较大的图片,而 Thumb 则通常是自动生成的更小尺寸缩略图。
2. 获取多张Banner图 (Images)
如果你的分类后台上传了多张Banner图,希望以轮播形式展示,那么就需要使用 Images 字段。这个字段会返回一个图片URL的数组,需要通过 for 循环来遍历输出。
{% categoryDetail myCategory with id="15" %}
{% if myCategory.Images %} {# 检查是否有Banner组图 #}
<div class="swiper-container category-banner-slider">
<div class="swiper-wrapper">
{% for bannerUrl in myCategory.Images %}
<div class="swiper-slide">
<img src="{{ bannerUrl }}" alt="{{ myCategory.Title }} 的轮播图" class="category-banner-image">
</div>
{% endfor %}
</div>
{# 如果需要,这里可以添加轮播图的导航、分页等控件 #}
</div>
{% endif %}
{% endcategoryDetail %}
这个例子中,bannerUrl 是每次循环中当前图片的URL。你可以根据需要结合前端JS库(如Swiper)来实现轮播效果。
如果你只需要从 Images 数组中获取第一张图片作为主Banner,可以这样做:
{% categoryDetail myCategory with id="15" %}
{% if myCategory.Images %}
{% set firstBanner = myCategory.Images[0] %} {# 获取数组中的第一张图片URL #}
<img src="{{ firstBanner }}" alt="{{ myCategory.Title }} 的主Banner" class="category-main-banner">
{% endif %}
{% endcategoryDetail %}
获取其他自定义分类字段
AnQiCMS还允许你在后台为分类自定义额外的字段(在“内容模型”中为分类模型添加字段,或直接在“文档分类”的“其他参数”中添加)。如果你定义了例如“联系电话”、“负责人”等自定义字段,同样可以通过 categoryDetail 标签来获取它们。
例如,如果你为分类添加了一个名为 contactPhone 的自定义字段:
{% categoryDetail myCategory with id="15" %}
<p>联系电话:{{ myCategory.contactPhone }}</p>
{% endcategoryDetail %}
如果想遍历显示所有的自定义字段,可以使用 Extra 字段(它返回一个键值对的数组):
{% categoryDetail myCategory with id="15" %}
{% categoryDetail extras with name="Extra" %}
{% for field in extras %}
<p>{{ field.Name }}:{{ field.Value }}</p>
{% endfor %}
{% endcategoryDetail %}
{% endcategoryDetail %}
综合应用示例
将以上知识点整合起来,假设我们要为ID为 15 的“关于我们”分类创建一个详细的展示区域,包含标题、描述和一张Banner图:
{# 获取ID为15的分类所有详情,并赋值给 myAboutCategory 变量 #}
{% categoryDetail myAboutCategory with id="15" %}
<div class="about-us-section">
{# 显示分类标题 #}
<h2 class="section-title">{{ myAboutCategory.Title }}</h2>
{# 显示分类的Banner图,优先使用Images中的第一张,否则使用Logo #}
{% if myAboutCategory.Images %}
{% set pageBanner = myAboutCategory.Images[0] %}
{% elif myAboutCategory.Logo %}
{% set pageBanner = myAboutCategory.Logo %}
{% else %}
{% set pageBanner = "/public/static/images/default-banner.jpg" %} {# 设置一个默认图以防万一 #}
{% endif %}
<div class="banner-area">
<img src="{{ pageBanner }}" alt="{{ myAboutCategory.Title }} 的封面" class="img-fluid">
</div>
{# 显示分类描述 #}
<div class="section-description">
<p>{{ myAboutCategory.Description|safe }}</p>
</div>
{# 如果有分类内容字段,也可以展示 #}
{% if myAboutCategory.Content %}
<div class="category-full-content">
{{ myAboutCategory.Content|safe }}
</div>
{% endif %}
{# 假设我们还为这个分类定义了一个自定义字段叫 'companyMission' #}
{% if myAboutCategory.companyMission %}
<div class="company-mission">
<h3>我们的使命</h3>
<p>{{ myAboutCategory.companyMission }}</p>
</div>
{% endif %}
</div>
{% endcategoryDetail %}
通过这些方法,你就能在AnQiCMS的模板中灵活地获取并展示任何指定分类的详细信息了。记住,在修改模板后,为了确保前端页面能及时更新,不要忘记点击后台的“更新缓存”按钮。
常见问题 (FAQ)
1. 我怎么知道某个分类的ID或URL别名(token)是什么? 你可以登录AnQiCMS后台,进入“内容管理”下的“文档分类”。在分类列表中,你可以直接看到每个分类的ID。URL别名(token)则是在编辑分类时,在“其他参数”中设置的“自定义URL”字段。如果未手动设置,系统会自动根据分类名称生成拼音别名。
2. 如果我指定的分类ID或URL别名不存在,模板会报错吗? 通常情况下,如果指定的分类ID或URL别名不存在,