作为一名资深的网站运营专家,我对安企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":根据后台设置的自定义排序进行展示。
limit与type="page":实现优雅分页 当一个标签下的文档数量众多时,一次性全部加载会影响页面性能和用户体验。tagDataList结合limit和type="page"参数,可以轻松实现分页。limit定义每页显示的文档数量,而type="page"则表明这是一个分页列表,需要配合AnQiCMS的分页标签pagination使用。你也可以使用limit="2,10"的形式,从第2条开始,获取10条数据,实现更精细的偏移量控制。siteId:多站点内容共享 对于部署了多个AnQiCMS站点的用户,siteId参数允许你跨站点调用指定标签下的文档,这在构建多站点内容矩阵时非常有用。
获取文档详情:丰富内容展示
通过tagDataList获取到的每个文档(在for循环中通常以item表示),都包含了丰富的属性,可以用于在前端页面进行展示:
item.Id:文档IDitem.Title:文档标题item.Link:文档详情页链接item.Description:文档简介item.Thumb或item.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 %}">
<