在AnQiCMS中构建网站,尤其是当我们需要在分类页面呈现丰富而精准的信息时,深入理解如何在模板中获取当前分类的详细数据就显得尤为重要。这不仅仅是为了美观,更是为了提供更好的用户体验和搜索引擎优化。
AnQiCMS的模板系统设计得非常灵活且易于上手,它采用了类似Django模板引擎的语法。当我们处于一个分类页面时,想要获取该分类的标题、描述、缩略图,甚至是轮播图组等信息,系统已经为我们准备好了相应的工具。
核心利器:categoryDetail 标签
要获取当前分类的详细信息,我们主要会用到一个强大的标签:categoryDetail。这个标签能够帮助我们轻松地提取分类的各项属性。它的使用方式非常直观,通常情况下,当我们已经在分类页面时,甚至不需要指定分类ID,它就能智能地识别并提供当前分类的数据。
比如,如果我们要获取当前分类的标题,可以这样写:
<h1 class="category-title">{% categoryDetail with name="Title" %}</h1>
在这里,name="Title"告诉系统我们想要获取的是分类的标题。类似地,获取分类的描述也同样简单:
<div class="category-description">
{% categoryDetail categoryDesc with name="Description" %}
{{ categoryDesc|safe }}
</div>
这里我们引入了一个中间变量categoryDesc来接收描述内容,并且使用了|safe过滤器。这是因为分类描述通常包含富文本格式,例如链接、粗体字或其他HTML标签,|safe的作用是告诉模板引擎这些内容是安全的,不需要进行转义,从而让HTML标签能够被正确解析和显示。
展示分类图片:缩略图与Banner组图
网站的视觉呈现离不开图片,分类页也不例外。AnQiCMS允许我们为每个分类设置缩略图和多张Banner组图。
要获取分类的缩略图,我们可以使用Logo或Thumb字段。通常,Logo可能代表较大尺寸的图片,而Thumb则代表经过系统处理的缩略图。你可以根据设计需求选择使用:
<img src="{% categoryDetail with name="Thumb" %}" alt="{% categoryDetail with name="Title" %}" class="category-thumb">
值得注意的是,我们建议总是在<img>标签中添加alt属性,并使用分类标题作为其值,这对于SEO和无障碍访问都非常有益。
如果你的分类设置了多张Banner组图,那么获取它们需要一个小小的循环。Images字段会返回一个图片URL的数组,我们可以遍历这个数组来显示所有图片:
<div class="category-banner-slider">
{% categoryDetail categoryBanners with name="Images" %}
{% if categoryBanners %}
{% for imageUrl in categoryBanners %}
<img src="{{ imageUrl }}" alt="{% categoryDetail with name="Title" %} Banner" class="banner-image">
{% endfor %}
{% endif %}
</div>
在上面的代码片段中,我们首先将Images字段的值赋给categoryBanners变量。然后,我们用一个if语句来判断categoryBanners是否存在,以避免在没有图片时出现错误。接着,使用for循环遍历categoryBanners数组,imageUrl变量会依次获取每张图片的URL,然后我们就可以在<img>标签中显示它们了。
如果只需要显示第一张Banner图作为分类页的顶部背景或主图,可以这样处理:
{% categoryDetail categoryBanners with name="Images" %}
{% if categoryBanners %}
{% set firstBanner = categoryBanners[0] %}
<div class="category-hero-section" style="background-image: url('{{ firstBanner }}');">
{# 其他内容,如分类标题等 #}
</div>
{% endif %}
这里,我们利用{% set %}标签定义了一个新变量firstBanner来存储数组的第一个元素,然后将其用于背景图片的URL。
组合使用,让分类页面焕发光彩
将这些标签组合起来,在一个典型的分类列表模板文件(比如{模型table}/list.html或者自定义的list-{分类ID}.html)中,你可以这样构建页面的头部区域:
{# 假设这是分类页的顶部区域,例如 template/default/article/list.html #}
{%- categoryDetail currentCategory with name="Extra" %} {# 'Extra'可用于获取所有自定义字段 #}
{%- if currentCategory %}
<div class="category-header">
<h1 class="category-heading">{% categoryDetail with name="Title" %}</h1>
<div class="category-meta">
<span class="category-id">分类ID:{% categoryDetail with name="Id" %}</span>
<span class="category-post-count">包含文档:{% categoryDetail with name="ArchiveCount" %} 篇</span>
</div>
<div class="category-intro">
{% categoryDetail categoryDescription with name="Description" %}
{{ categoryDescription|safe }}
</div>
{% categoryDetail categoryLogo with name="Logo" %}
{% if categoryLogo %}
<img src="{{ categoryLogo }}" alt="{% categoryDetail with name="Title" %} 主图" class="category-main-image">
{% endif %}
{% categoryDetail categoryBannerImages with name="Images" %}
{% if categoryBannerImages %}
<div class="category-banner-group">
{% for bannerItem in categoryBannerImages %}
<img src="{{ bannerItem }}" alt="{% categoryDetail with name="Title" %} Banner {{ forloop.Counter }}" class="banner-item">
{% endfor %}
</div>
{% endif %}
</div>
{%- endif %}
{# 接下来可以放文档列表标签 {% archiveList archives with type="page" %} ... {% endarchiveList %} #}
通过以上方法,你就可以在AnQiCMS的模板中,灵活且全面地获取并展示当前分类的各项详细信息,让你的网站分类页面内容更加丰富、结构更加清晰。
常见问题解答 (FAQ)
1. 为什么我在模板中使用了categoryDetail标签,但页面上没有显示任何分类信息?
首先,请确保您已经在AnQiCMS后台的“内容管理” -> “文档分类”中为当前分类填写了相应的信息,比如“分类名称”、“分类简介”、“缩略图”和“Banner图”。如果后台数据为空,模板自然无法获取并显示。其次,请检查您的模板代码中name参数是否拼写正确,例如name="Title"、name="Description"等,注意大小写敏感。
2. 我想获取的不是当前页面的分类信息,而是指定ID的某个分类,应该怎么做?
categoryDetail标签支持通过id参数来指定获取某个分类的信息。例如,如果您想获取ID为5的分类标题,可以这样写:{% categoryDetail with name="Title" id="5" %}。这在首页或者其他非分类页面,需要引用特定分类信息时非常有用。
3. 如何只显示分类Banner组图中的第一张图片,而不是全部循环显示?
当您通过{% categoryDetail categoryBanners with name="Images" %}获取到Banner图片数组后,可以使用{% set %}标签和数组索引来获取第一张图片。例如:
{% categoryDetail categoryBanners with name="Images" %}
{% if categoryBanners %}
{% set firstBanner = categoryBanners[0] %}
<img src="{{ firstBanner }}" alt="分类主Banner图">
{% endif %}
这样做的好处是,即使后台上传了多张Banner图,您也可以灵活控制只显示第一张,同时if判断也能避免在没有图片时页面出错。