在AnQiCMS中,标签(Tag)是一种强大的内容组织方式,它能帮助我们更灵活地关联不同分类、不同模型下的内容。合理利用标签不仅能优化网站的SEO表现,还能显著提升用户在网站上的内容发现体验。当我们希望集中展示某一特定标签下的所有相关文档时,AnQiCMS提供了一套直观且高效的模板标签来实现这一需求。
本文将详细介绍如何通过AnQiCMS的内置模板标签,轻松地在网站前端页面上显示特定标签下的文档列表。
理解AnQiCMS中的“标签”
在AnQiCMS的后台,我们可以通过“内容管理”菜单下的“文档标签”功能来统一管理网站的所有标签。每个标签都可以有自己的名称、索引字母、自定义URL、SEO标题和描述。当我们在发布文章或产品时,可以为内容添加一个或多个相关标签。这些标签就像内容的关键词,将散落在不同分类下的相关内容串联起来,形成一个主题聚合页。
例如,如果您的网站有关于“Go语言教程”和“Go语言项目实战”的文章,它们可能属于不同的分类。但如果都打上了“Go语言”这个标签,那么用户访问“Go语言”标签页时,就能看到所有与之相关的内容,极大地方便了信息的检索。
核心功能:使用 tagDataList 标签显示文档列表
AnQiCMS提供了一个名为 tagDataList 的专用标签,用于从数据库中检索并显示特定标签下的文档列表。这个标签通常在网站的前端模板文件中使用,例如标签列表页 (tag/list.html) 或标签首页 (tag/index.html),当然,您也可以在任何需要的位置调用它。
tagDataList 的基本使用方式如下:
{% tagDataList archives with tagId="1" type="page" limit="10" %}
{% for item in archives %}
{# 在这里显示文档的标题、链接、简介等信息 #}
{% empty %}
{# 如果没有找到文档,显示此内容 #}
{% endfor %}
{% endtagDataList %}
让我们来详细解读 tagDataList 标签的关键参数和用法:
tagDataList 标签的主要参数:
tagId:这是指定您要显示哪个标签下文档列表的核心参数。您可以直接填写标签的数字ID(例如tagId="1")。- 小贴士: 如果您是在AnQiCMS自动生成的标签详情页(如
tag/list.html或tag/index.html)中使用tagDataList,通常可以省略tagId参数。系统会智能地识别当前页面的标签ID,并自动获取该标签下的文档。
- 小贴士: 如果您是在AnQiCMS自动生成的标签详情页(如
moduleId:如果您只想显示某个特定内容模型(例如“文章模型”或“产品模型”)下的文档,可以使用此参数。例如,moduleId="1"表示只显示文章模型的文档。limit:控制显示文档的数量。例如,limit="10"会显示最多10篇文档。type:定义列表的显示类型。type="list"(默认值):简单地列出指定数量的文档,不提供分页功能。type="page":启用分页功能,通常需要配合pagination标签一起使用。
order:设置文档的排序方式。常用的有:order="id desc":按ID降序排列(最新发布)。order="views desc":按浏览量降序排列。
siteId:如果您启用了多站点功能,并且希望获取其他站点的数据,可以使用此参数。一般情况下无需填写。
循环体内的 item 可用字段:
在 {% for item in archives %} 循环中,item 代表每一篇文档对象,您可以访问其多个属性来展示文档信息:
item.Id:文档ID。item.Title:文档标题。item.Link:文档详情页链接。item.Description:文档简介。item.Thumb:文档缩略图地址。item.CreatedTime:文档发布时间(时间戳格式,需要用stampToDate过滤器格式化)。item.Views:文档浏览量。item.CategoryId:文档所属分类ID。您还可以通过categoryDetail标签获取其分类名称和链接。- 以及在内容模型中自定义的其他字段。
实战演练:一步步实现Tag文档列表显示
接下来,我们将通过几个具体的场景来演示 tagDataList 的实际应用。
场景一:在Tag详情页显示当前标签下的文档列表(带分页)
假设您正在编辑标签的详情页模板文件(例如 template/您的模板目录/tag/list.html 或 template/您的模板目录/tag/index.html)。在这个页面,AnQiCMS会自动识别当前访问的标签。
{# 首先,您可能需要显示当前标签的一些信息,如标签名称和描述 #}
<h1>标签:{% tagDetail with name="Title" %}</h1>
<p>简介:{% tagDetail with name="Description" %}</p>
<div class="tag-documents">
<h2>相关文档</h2>
{% tagDataList archives with type="page" limit="10" %} {# type="page" 启用分页,每页显示10篇 #}
{% for item in archives %}
<article class="document-item">
<h3><a href="{{ item.Link }}">{{ item.Title }}</a></h3>
<p class="description">{{ item.Description }}</p>
{% if item.Thumb %}
<a href="{{ item.Link }}" class="thumb">
<img src="{{ item.Thumb }}" alt="{{ item.Title }}">
</a>
{% endif %}
<div class="meta">
<span>发布于: {{ stampToDate(item.CreatedTime, "2006-01-02") }}</span>
<span>阅读量: {{ item.Views }}</span>
<span>分类: <a href="{% categoryDetail with name='Link' id=item.CategoryId %}">{% categoryDetail with name='Title' id=item.CategoryId %}</a></span>
</div>
</article>
{% empty %}
<p>抱歉,当前标签下暂无文档。</p>
{% endfor %}
{% endtagDataList %}
{# 别忘了添加分页导航,让用户可以浏览更多页面 #}
<div class="pagination-container">
{% pagination pages with show="5" %} {# 最多显示5个页码按钮 #}
<ul>
{% if pages.PrevPage %}
<li><a href="{{ pages.PrevPage.Link }}">上一页</a></li>
{% endif %}
{% for pageItem in pages.Pages %}
<li {% if pageItem.IsCurrent %}class="active"{% endif %}><a href="{{ pageItem.Link }}">{{ pageItem.Name }}</a></li>
{% endfor %}
{% if pages.NextPage %}
<li><a href="{{ pages.NextPage.Link }}">下一页</a></li>
{% endif %}
</ul>
{% endpagination %}
</div>
</div>
在这个例子中,`{% tagDataList archives with type=“page” limit=“1