如何获取并显示特定标签的详细描述和关联文档?

在内容管理中,标签(Tags)是一个强大而灵活的工具,它能帮助我们更精细地组织网站内容,提升用户体验,并优化搜索引擎排名。AnQiCMS 深知这一点,提供了直观且功能丰富的模板标签,让您可以轻松地获取并展示特定标签的详细描述及其关联的文档。

本文将深入探讨如何在 AnQiCMS 模板中利用这些标签,让您的网站内容更具关联性和可发现性。

理解 AnQiCMS 中的标签

在 AnQiCMS 的设计理念中,标签是对内容的一种横向关联和补充分类。与传统的分类(Category)通常采用层级结构不同,标签更侧重于关键词聚合,能够将不同分类甚至不同内容模型下的相关内容连接起来。例如,一篇文章可以属于“新闻”分类,同时被打上“AnQiCMS”、“更新”、“教程”等标签。

在 AnQiCMS 的后台管理界面,您可以在“内容管理”下的“文档标签”中,对这些标签进行统一的添加、编辑和管理。每个标签都可以拥有独立的名称、索引字母、详细描述,甚至自定义的 URL 别名和 SEO 信息,这些都为前端内容的灵活展示奠定了基础。

获取特定标签的详细描述

当我们希望在网站页面上展示某个标签自身的详细信息时,例如在标签详情页(通常对应 tag/detail.htmltag_detail.html 模板)中,AnQiCMS 提供了 tagDetail 标签。这个标签可以帮助我们精确地获取一个标签的各种属性。

使用 tagDetail 标签时,您可以通过 id(标签ID)或 token(标签URL别名)来指定要获取哪个标签的信息。如果您当前正处于一个标签的详情页面,并且没有指定 idtokentagDetail 会智能地获取当前页面的标签信息。

您可以获取的标签字段包括:

  • Id:标签的唯一标识ID。
  • Title:标签的显示名称,如“AnQiCMS 教程”。
  • Link:标签的访问链接。
  • Description:标签的详细描述,常用于 SEO 或在页面上提供更多背景信息。
  • Content:如果后台为标签填写了富文本内容,可以通过此字段获取。
  • FirstLetter:标签名称的首字母(用于索引)。
  • Logo:标签的缩略图或图标。

以下是一个获取标签标题和描述的示例代码片段:

{# 假设我们正在一个标签详情页,或者我们知道标签ID是1 #}

{# 获取标签标题 #}
<h1>{% tagDetail with name="Title" %}</h1>

{# 获取标签描述,如果描述包含HTML,需要使用 |safe 过滤器 #}
<div>
    {% tagDetail tagDescription with name="Description" %}
    {{ tagDescription|safe }}
</div>

{# 如果标签有Logo图片,可以这样显示 #}
{% tagDetail tagLogo with name="Logo" %}
{% if tagLogo %}
    <img src="{{ tagLogo }}" alt="{% tagDetail with name='Title' %}" />
{% endif %}

{# 如果标签有富文本内容,同样需要 |safe 过滤器 #}
{% tagDetail tagContent with name="Content" %}
{% if tagContent %}
    <section>{{ tagContent|safe }}</section>
{% endif %}

请注意,当获取的字段内容可能包含 HTML 标签时(如 Description 或 Content),务必使用 |safe 过滤器,以确保这些 HTML 内容能够被浏览器正确解析并显示,而不是作为纯文本输出。

获取与标签关联的文档列表

在展示了标签自身的详细信息之后,用户通常会期望看到该标签下所有相关的文档(文章、产品等)。AnQiCMS 为此提供了 tagDataList 标签,它可以根据指定的标签,检索出所有关联的内容。

tagDataList 标签的使用方式与 archiveList 类似,它会返回一个文档(或产品)的列表。其主要参数包括:

  • tagId:指定要获取哪个标签下的文档。如果当前页面是某个标签的详情页,通常可以省略此参数,系统会默认获取当前标签ID。
  • moduleId:如果您的网站有多种内容模型(如文章、产品),可以通过此参数指定只获取特定模型下的文档,例如 moduleId="1" 获取文章,moduleId="2" 获取产品。
  • limit:控制返回文档的数量,例如 limit="10" 将返回最多10条文档。
  • type:指定列表的类型,"list" 用于不带分页的列表,"page" 用于支持分页的列表(需要与 pagination 标签配合使用)。

tagDataList 会返回一个包含文档对象的数组,您可以使用 for 循环遍历这些文档,并从中提取诸如标题、链接、描述、缩略图、发布时间等信息。

以下是一个获取与当前标签关联的文档列表的示例:

”`twig {# 获取与当前标签关联的文档列表,每页显示10条,并支持分页 #} {% tagDataList archives with type=“page” limit=“10” %}

{% if archives %}
    <ul class="related-docs">
        {% for item in archives %}
        <li>
            <a href="{{ item.Link }}">
                <h3>{{ item.Title }}</h3>
                {% if item.Thumb %}
                    <img src="{{ item.Thumb }}" alt="{{ item.Title }}" class="doc-thumb" />
                {% endif %}
                <p>{{ item.Description|truncatechars:100 }}</p>
                <span class="doc-info">
                    发布时间:{{ stampToDate(item.CreatedTime, "2006-01-02") }} | 
                    浏览量:{{ item.Views }}
                </span>
            </a>
        </li>
        {% endfor %}
    </ul>

    {# 关联分页标签,用于生成分页导航 #}
    {% pagination pages with show="5" %}
        <nav class="pagination-nav">
            <a href="{{ pages.FirstPage.Link }}" class="page-link {% if pages.FirstPage.IsCurrent %}active{% endif %}">首页</a>
            {% if pages.PrevPage %}<a href="{{ pages.PrevPage.Link }}" class="page-link">上一页</a>{% endif %}
            {% for p in pages.Pages %}
                <a