如何在AnQiCMS中显示当前分类的详细信息和描述?

在运营安企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