如何在模板中获取并展示指定分类的详细信息(如标题、描述、Banner图)?

在网站运营中,我们经常需要为特定的分类创建独特、吸引人的展示页面,或者在页面的不同位置灵活地调用某些分类的详细信息。例如,你可能希望在某个产品分类页顶部展示一个专属的Banner图,或者在侧边栏列出某个特定服务分类的标题和简介。AnQiCMS作为一个高效且可定制的内容管理系统,提供了非常直观的方式来实现这些需求。

要获取并展示指定分类的详细信息,比如分类的标题、描述和Banner图,我们主要会用到AnQiCMS的模板标签 categoryDetail。这个标签非常强大,它能帮助我们精准地定位到所需分类,并提取出其丰富的属性。

使用 categoryDetail 获取分类详情

categoryDetail 标签的基本用法是在模板中直接调用分类的某个字段。当你在分类页面(如分类列表页或某个具体分类的首页)使用它时,它默认会获取当前页面的分类信息。

如果你想获取一个指定的分类信息,而不是当前页面所在的分类,就需要用到 idtoken 参数来明确告诉AnQiCMS你想要哪个分类。其中,id 是分类在后台的唯一数字ID,而 token 则是你在后台为分类设置的URL别名。通常,通过id来指定分类是最精确和常用的方式。

让我们来看看如何具体获取分类的标题、描述和Banner图。

获取分类标题 (Title)

分类的标题是其最基本的属性之一,常常用于页面标题、导航菜单或内容区块的展示。

要获取指定分类的标题,你可以在模板中这样写:

{% categoryDetail myCategory with id="15" %}
    <h1>{{ myCategory.Title }}</h1>
{% endcategoryDetail %}

这里我们假设分类的ID是 15myCategory 是我们为这个分类信息定义的一个临时变量名,你也可以根据自己的习惯来命名。如果 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图 (LogoThumb)

如果你的分类只需要展示一张主要的Banner图或缩略图,可以直接调用 LogoThumb 字段。

{% 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别名不存在,