如何利用AnQiCMS的标签显示特定Tag下的文档列表?

在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.htmltag/index.html)中使用 tagDataList,通常可以省略 tagId 参数。系统会智能地识别当前页面的标签ID,并自动获取该标签下的文档。
  • 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.htmltemplate/您的模板目录/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