`tagDataList`标签如何根据`tagId`精准获取相关文档?

作为一名资深的网站运营专家,我对安企CMS(AnQiCMS)强大的内容管理能力深有体会。在日常运营中,内容的精细化组织与高效分发是提升用户体验和SEO表现的关键。今天,我们将深入探讨AnQiCMS中一个非常实用的模板标签——tagDataList,看看它如何帮助我们根据tagId精准获取相关文档,从而更好地构建内容生态。

灵活聚合内容:理解tagDataList的核心价值

在AnQiCMS中,标签(Tag)是组织内容的重要维度之一,它比传统的分类(Category)更具灵活性和横向关联性。当用户通过某个标签进入聚合页,或者我们希望在文章底部推荐相关标签的内容时,就需要一个机制来准确地拉取与该标签关联的所有文档。tagDataList标签正是为此而生。它能够让我们根据特定的标签ID,将散落在各个分类和模型下的相关文档集中展现,极大地丰富了网站内容的内部链接和用户发现路径。

精准定位:tagId的魔法

tagDataList标签的核心在于其tagId参数。每个在AnQiCMS后台创建的标签,都会有一个独一无二的数字ID。这个tagId就如同内容的“身份证号”,通过它,tagDataList能够像导航员一样,精确地找出所有被打上这个特定标签的文档。

要使用tagDataList,最基本的语法结构是:

{% tagDataList archives with tagId="1" %}
    {# 在这里循环输出与tagId为1的标签关联的文档 #}
{% endtagDataList %}

在这个例子中,archives是我们自定义的一个变量名,它将承载所有获取到的文档数据。tagId="1"则明确告诉系统,我们想要获取与ID为1的标签关联的所有文档。

值得一提的是,如果你正在开发的是一个标签详情页(例如/tag/某个标签别名),那么tagDataList标签会非常智能。在这种情况下,即使你不显式地指定tagId,它也会尝试自动读取当前页面的标签ID,从而自动展示与当前标签相关的所有文档,省去了手动获取ID的麻烦。

超越基础:发掘tagDataList的更多高级功能

除了基本的tagId定位,tagDataList还提供了一系列参数,让内容获取和展示变得更加灵活和强大:

  • moduleId:限定内容模型 在AnQiCMS中,内容可以属于不同的模型,例如文章模型、产品模型等。如果你只想获取某个标签下特定模型(比如只显示文章,不显示产品)的文档,可以使用moduleId参数。例如,moduleId="1"通常用于获取文章模型下的文档。

  • order:控制排序方式 文档的展示顺序对用户体验至关重要。tagDataList支持多种排序规则,例如:

    • order="id desc":按文档ID倒序,通常意味着最新发布的文档排在前面。
    • * order="views desc":按浏览量倒序,热门文档优先展示。
    • order="sort desc":根据后台设置的自定义排序进行展示。
  • limittype="page":实现优雅分页 当一个标签下的文档数量众多时,一次性全部加载会影响页面性能和用户体验。tagDataList结合limittype="page"参数,可以轻松实现分页。limit定义每页显示的文档数量,而type="page"则表明这是一个分页列表,需要配合AnQiCMS的分页标签pagination使用。你也可以使用limit="2,10"的形式,从第2条开始,获取10条数据,实现更精细的偏移量控制。

  • siteId:多站点内容共享 对于部署了多个AnQiCMS站点的用户,siteId参数允许你跨站点调用指定标签下的文档,这在构建多站点内容矩阵时非常有用。

获取文档详情:丰富内容展示

通过tagDataList获取到的每个文档(在for循环中通常以item表示),都包含了丰富的属性,可以用于在前端页面进行展示:

  • item.Id:文档ID
  • item.Title:文档标题
  • item.Link:文档详情页链接
  • item.Description:文档简介
  • item.Thumbitem.Logo:文档缩略图或封面图
  • item.Views:文档浏览量
  • item.CreatedTime:文档创建时间(时间戳,需配合stampToDate进行格式化)
  • item.CategoryId:文档所属分类ID(可用于配合categoryDetail标签获取分类信息)

在展示日期时,请务必使用{{stampToDate(item.CreatedTime, "2006-01-02")}}这样的格式化函数,将时间戳转换为易读的日期格式。

实战演练:一个综合示例

假设我们正在构建一个标签“Go语言”的详情页,希望显示该标签下的所有文章,并进行分页展示,同时显示文章的标题、简介、分类、发布时间、浏览量和缩略图。

”`twig {# 首先,利用tagDetail获取当前标签的标题和描述,用于页面TDK或标题展示 #} {% tagDetail currentTag with name=“Title” %} {% tagDetail tagDescription with name=“Description” %}

标签:{{ currentTag }}

{{ tagDescription }}

{# 使用tagDataList获取当前标签下的文档列表,并按浏览量降序,每页显示10条,开启分页功能 #}
{% tagDataList archives with type="page" order="views desc" limit="10" %}
    {% for item in archives %}
    <article class="document-item">
        <a href="{{ item.Link }}" title="{{ item.Title }}">
            {% if item.Thumb %}
            <div class="document-thumbnail">
                <img src="{{ item.Thumb }}" alt="{{ item.Title }}">
            </div>
            {% endif %}
            <div class="document-content">
                <h2>{{ item.Title }}</h2>
                <p class="document-description">{{ item.Description }}</p>
                <div class="document-meta">
                    {# 获取文档所属分类的标题和链接 #}
                    <span>分类:
                        {% categoryDetail docCategory with name="Title" id=item.CategoryId %}
                        {% categoryDetail docCategoryLink with name="Link" id=item.CategoryId %}
                        <a href="{{ docCategoryLink }}">{{ docCategory }}</a>
                    </span>
                    {# 格式化文档发布时间 #}
                    <span>发布时间:{{ stampToDate(item.CreatedTime, "2006-01-02") }}</span>
                    <span>浏览量:{{ item.Views }}</span>
                </div>
            </div>
        </a>
    </article>
    {% empty %}
    <p>该标签下暂无相关文档。</p>
    {% endfor %}
{% endtagDataList %}

{# 分页导航区域,配合tagDataList的type="page"使用 #}
<div class="pagination-area">
    {% pagination pages with show="5" %}
    <ul class="pagination-list">
        {# 首页链接 #}
        <li class="page-item {% if pages.FirstPage.IsCurrent %}active{% endif %}">
            <a href="{{pages.FirstPage.Link}}">{{pages.FirstPage.Name}}</a>
        </li>
        {# 上一页链接 #}
        {% if pages.PrevPage %}
        <li class="page-item">
            <a href="{{pages.PrevPage.Link}}">{{pages.PrevPage.Name}}</a>
        </li>
        {% endif %}
        {# 中间页码链接 #}
        {% for pageItem in pages.Pages %}
        <li class="page-item {% if pageItem.IsCurrent %}active{% endif %}">
            <a href="{{pageItem.Link}}">{{pageItem.Name}}</a>
        </li>
        {% endfor %}
        {# 下一页链接 #}
        {% if pages.NextPage %}
        <li class="page-item">
            <a href="{{pages.NextPage.Link}}">{{pages.NextPage.Name}}</a>
        </li>
        {% endif %}
        {# 末页链接 #}
        <li class="page-item {% if pages.LastPage.IsCurrent %}active{% endif %}">
            <