在运营安企CMS(AnQiCMS)网站时,我们经常需要在分类页面上动态展示当前分类的详细信息和描述,比如分类的标题、简介、大图,甚至是自定义的字段。这不仅能帮助用户更好地理解当前页面的主题,也能有效提升页面的SEO表现。安企CMS为此提供了非常灵活且直观的模板标签,让这项工作变得轻松简单。
认识 categoryDetail 标签:你的分类信息“智能助手”
安企CMS的模板系统采用类似Django的语法,其中获取分类详情的核心工具就是categoryDetail标签。你可以把它想象成一个智能助手,你告诉它想看什么字段,它就能把当前页面的分类信息准确地取出来。
在多数情况下,当你访问一个分类页面,比如文章列表页或产品列表页时,categoryDetail标签会自动识别当前的分类,并从中提取你所需的信息。你通常不需要额外指定分类ID,它就能“心领神会”。
如果确实需要获取*非当前页面*的某个特定分类信息,比如在侧边栏显示“关于我们”分类的详情,你可以通过id参数或token(URL别名)参数来明确指定,例如:{% categoryDetail with name="Title" id="10" %}。
如何展示分类的各项详细信息?
categoryDetail标签的使用方式通常是:{% categoryDetail 变量名 with name="字段名称" %}。其中,“变量名”是可选的,如果你直接想输出结果,可以省略;如果想将数据存储到变量中进行后续处理,则可以定义一个变量名。而name参数则是你想要获取的具体字段。
下面是一些常用的字段,以及它们在模板中的调用方式:
分类标题 (Title): 这是分类最核心的展示内容。
<h1>{% categoryDetail with name="Title" %}</h1>分类链接 (Link): 用于生成指向当前分类页面的超链接。
<a href="{% categoryDetail with name="Link" %}">更多内容</a>分类描述 (Description) 和 分类内容 (Content):
Description通常是简短的分类摘要,适合用于meta标签或页面顶部的简介。而Content则是更详细的分类介绍,可能包含富文本内容。<p>{% categoryDetail with name="Description" %}</p> <div> {# 注意:Content字段可能包含HTML,需要使用|safe过滤器确保正确渲染 #} {%- categoryDetail categoryContent with name="Content" %} {{ categoryContent|safe }} </div>这里特别提醒,
Content字段如果包含HTML标签,一定要加上|safe过滤器,否则HTML代码会被转义,而不是作为页面结构渲染。图片信息 (Logo, Thumb, Images):
Logo:通常指分类的大图或主图。Thumb:指分类的缩略图。Images:如果分类设置了多张Banner图或组图,可以使用Images字段获取一个图片数组,并通过循环展示。
{# 显示分类Logo大图 #} <img src="{% categoryDetail with name="Logo" %}" alt="{% categoryDetail with name="Title" %}" /> {# 显示分类Banner组图(如果有) #} {% categoryDetail categoryBanners with name="Images" %} {% if categoryBanners %} {# 检查是否有图片存在,避免空循环 #} <div class="category-banner-slider"> {% for imgUrl in categoryBanners %} <img src="{{ imgUrl }}" alt="{% categoryDetail with name="Title" %}" /> {% endfor %} </div> {% endif %}上级分类ID (ParentId) 和 文档数量 (ArchiveCount):
ParentId可以帮助你构建更复杂的分类导航,例如显示当前分类的父级分类名称。ArchiveCount则能让你知道当前分类下有多少篇文章或产品。{# 获取上级分类ID,并尝试获取其标题 #} {% set currentParentId = "" %} {% categoryDetail parentId with name="ParentId" %}{% set currentParentId = parentId %} {% if currentParentId and currentParentId != "0" %} <p>上级分类:<a href="{% categoryDetail with name="Link" id=currentParentId %}">{% categoryDetail with name="Title" id=currentParentId %}</a></p> {% endif %} <p>包含文章数:{% categoryDetail with name="ArchiveCount" %}</p>
处理自定义分类字段
安企CMS的“灵活的内容模型”是一个非常强大的功能,它允许你为不同的内容类型(比如文章、产品、以及你自定义的模型)添加专属的字段。如果你给分类模型也添加了自定义字段,同样可以通过categoryDetail标签来获取。
假设你为分类添加了一个名为custom_banner_text的自定义字段,你可以直接这样调用:
<p>自定义Banner文本:{% categoryDetail with name="custom_banner_text" %}</p>
如果你希望循环显示所有自定义字段,可以使用name="Extra":
{% categoryDetail extras with name="Extra" %}
{% for field in extras %}
<div>
<strong>{{ field.Name }}:</strong>
{# 注意:自定义字段的值也可能包含HTML,酌情使用|safe #}
<span>{{ field.Value|safe }}</span>
</div>
{% endfor %}
结合实例:在分类列表页显示详细信息
让我们看一个在分类列表模板中展示当前分类详情的完整例子。假设这是article/list.html模板:
{% extends 'base.html' %} {# 继承基础布局 #}
{% block main_content %}
<div class="category-header">
{# 显示当前分类的大标题 #}
<h1>{% categoryDetail with name="Title" %}</h1>
{# 如果有分类Logo,显示它 #}
{% categoryDetail categoryLogo with name="Logo" %}
{% if categoryLogo %}
<img src="{{ categoryLogo }}" alt="{% categoryDetail with name="Title" %}" class="category-logo" />
{% endif %}
{# 显示分类的描述 #}
<p class="category-description">{% categoryDetail with name="Description" %}</p>
{# 显示分类的详细内容,并确保HTML正确渲染 #}
<div class="category-full-content">
{%- categoryDetail categoryContent with name="Content" %}
{{ categoryContent|safe }}
</div>
{# 假设你有一个自定义字段 "category_slogan" #}
{% categoryDetail categorySlogan with name="category_slogan" %}
{% if categorySlogan %}
<p class="category-slogan">“{{ categorySlogan }}”</p>
{% endif %}
</div>
<div class="article-list">
<h2>此分类下的文章</h2>
{# 获取并展示当前分类下的文章列表 #}
{% archiveList articles with type="page" limit="10" %}
{% for article in articles %}
<div class="article-item">
<h3><a href="{{ article.Link }}">{{ article.Title }}</a></h3>
<p>{{ article.Description }}</p>
<span>发布日期:{{ stampToDate(article.CreatedTime, "2006-01-02") }}</span>
<span>阅读量:{{ article.Views }}</span>
</div>
{% empty %}
<p>当前分类下还没有文章。</p>
{% endfor %}
{# 分页导航 #}
{% pagination pages with show="5" %}
{# 这里可以插入你的分页代码 #}
{% endpagination %}
{% endarchiveList %}
</div>
{% endblock %}
通过这个例子,我们可以看到如何将categoryDetail标签获取到的信息,与archiveList等其他标签结合,共同构建出内容丰富且功能完善的分类页面。
总结
安企CMS的categoryDetail标签是网站内容运营者和模板开发者不可或缺的利器。它以简洁的方式提供了对分类详细信息的高度控制,无论是基础的标题、描述,还是复杂的多图轮播和自定义字段,都能轻松实现。善用这些标签,能够帮助你的网站在信息展示和用户体验上更上一层楼。
常见问题 (FAQ)
1. 如何在当前分类页面获取其父级分类的名称和链接?
你首先需要获取当前分类的ParentId。然后,你可以再次使用categoryDetail标签,传入这个ParentId来获取父级分类的详细信息。
”`twig {% categoryDetail currentCategory with name=“Id” %} {# 获取当前分类ID #} {% categoryDetail parentId with name=“ParentId” id=currentCategory %} {# 获取当前分类的父ID #}
{% if parentId and parentId != “0” %}
<p>父级分类:<a href="{% categoryDetail with name="Link" id=parentId %}">{% categoryDetail with name="Title" id=parentId %}</a></p>
{% else %}
<p