如何在AnQiCMS中显示特定Tag下的文档列表?

在AnQiCMS中,标签(Tag)是组织内容的一种强大且灵活的方式,它允许您在不依赖传统分类层级结构的前提下,对文档进行多维度关联。当您希望展示某一特定主题或关键词下的所有文档时,显示特定标签下的文档列表就变得尤为重要。这不仅能帮助访问者更快地找到感兴趣的内容,也能有效提升网站的内部链接结构和SEO表现。

接下来,我们将详细介绍如何在AnQiCMS中,利用其强大的模板标签功能,轻松实现特定标签下的文档列表展示。

1. 后台标签的创建与管理

首先,确保您的文档已经打上了标签。在AnQiCMS的后台,您可以通过以下两种方式管理和应用标签:

  • 文档编辑时添加标签: 在编辑或发布文档的界面,通常会有一个“Tag标签”的输入框。您可以在这里直接输入新的标签名称,按下回车键即可创建并关联到当前文档。同时,系统也会提供已存在的标签供您选择,避免重复创建。
  • 标签管理页面统一维护: 在后台的“内容管理”菜单下,找到“文档标签”功能。这里您可以查看所有已创建的标签,对它们进行编辑、删除、或者新增。每个标签都可以设置其名称、索引字母、自定义URL、SEO标题、关键词和简介等信息,这有助于标签页面的SEO优化和内容丰富度。标签不区分内容模型和分类,可以跨模型、跨分类地将文档关联起来。

2. 前台显示特定标签下的文档列表

AnQiCMS提供了一套直观的模板标签,让您能够灵活地在网站前台调用和展示标签及其关联的文档。

获取并显示标签下的文档列表:tagDataList 标签

tagDataList 标签是专门用于获取指定标签下的文档列表的核心工具。无论您是想在标签详情页自动展示当前标签下的文档,还是在其他页面手动指定某个标签来展示其文档,tagDataList 都能满足您的需求。

基本用法:

在模板文件中,您可以使用以下结构来调用tagDataList

{% tagDataList archives with tagId="1" %}
    {% for item in archives %}
        <!-- 在这里展示文档信息 -->
    {% endfor %}
{% endtagDataList %}

这里,archives 是您自定义的变量名,它将包含该标签下的所有文档数据。tagId 是关键参数,用于指定您想要获取哪个标签下的文档。

tagDataList 标签的关键参数解析:

  • tagId (必须或自动获取): 这是指定标签ID的参数。
    • 自动获取: 如果您正在设计标签的详情页(例如 tag/list.htmltag/index.html 模板),tagDataList 会自动识别当前页面的标签ID,此时您无需显式设置 tagId
    • 手动指定: 在其他非标签详情的页面(如首页、侧边栏),如果您想显示某个特定标签的文档,就需要明确提供该标签的数字ID,例如 tagId="1"
  • moduleId (可选): 如果您只想获取某个特定内容模型(如“文章”或“产品”)下的标签文档,可以通过 moduleId="1" (假设“文章”模型的ID是1) 来进行筛选。
  • order (可选): 用于指定文档的排序方式,例如 order="id desc" (按ID倒序,即最新发布在前) 或 order="views desc" (按浏览量倒序)。默认情况下,它会按照后台的自定义排序规则。
  • limit (可选): 控制返回文档的数量。limit="10" 会显示10条文档。您还可以使用 limit="2,10" 来实现跳过前2条,从第3条开始显示10条文档的效果。
  • type (可选): 决定列表的类型。
    • type="list" (默认): 返回指定数量的文档列表。
    • type="page": 当您需要为列表添加分页功能时使用。配合 pagination 标签可以实现完整的翻页效果。
  • siteId (可选): 在多站点管理模式下,如果您需要调用其他站点的数据,可以指定 siteId

archives 变量中可用的文档字段(在 for 循环中,以 item 为例):

每个 item 都代表一个文档,您可以访问其各种属性,例如:

  • item.Id: 文档ID
  • item.Title: 文档标题
  • item.Link: 文档链接
  • item.Description: 文档描述
  • item.Thumb: 文档缩略图
  • item.CreatedTime: 文档创建时间 (时间戳,需用 stampToDate 格式化)
  • item.Views: 文档浏览量
  • 以及通过文档模型设置的其他自定义字段。

示例:在标签详情页显示文档列表(带分页)

假设您正在编辑 template/{您的模板目录}/tag/list.htmltag/index.html 文件:

{# 获取当前标签的详细信息 #}
{% tagDetail currentTag with name="Title" %}
<h1>标签:{{ currentTag }}</h1>

{% tagDetail tagDescription with name="Description" %}
{% if tagDescription %}
<p>{{ tagDescription }}</p>
{% endif %}

<ul class="tag-document-list">
    {% tagDataList archives with type="page" limit="10" order="id desc" %}
        {% for item in archives %}
        <li>
            <a href="{{ item.Link }}">
                <h3>{{ item.Title }}</h3>
                {% if item.Thumb %}
                <img src="{{ item.Thumb }}" alt="{{ item.Title }}" class="document-thumb">
                {% endif %}
                <p>{{ item.Description }}</p>
                <div class="meta">
                    <span>发布日期: {{ stampToDate(item.CreatedTime, "2006-01-02") }}</span>
                    <span>浏览量: {{ item.Views }}</span>
                </div>
            </a>
        </li>
        {% empty %}
        <li>
            当前标签下没有找到相关文档。
        </li>
        {% endfor %}
    {% endtagDataList %}
</ul>

{# 分页功能 #}
<div class="pagination-wrapper">
    {% pagination pages with show="5" %}
        {% if pages.PrevPage %}<a href="{{ pages.PrevPage.Link }}" class="prev">上一页</a>{% endif %}
        {% for page_item in pages.Pages %}
            <a href="{{ page_item.Link }}" class="{% if page_item.IsCurrent %}active{% endif %}">{{ page_item.Name }}</a>
        {% endfor %}
        {% if pages.NextPage %}<a href="{{ pages.NextPage.Link }}" class="next">下一页</a>{% endif %}
    {% endpagination %}
</div>

在这个例子中:

  1. {% tagDetail currentTag with name="Title" %}{% tagDetail tagDescription with name="Description" %} 用于获取当前标签的标题和描述,以丰富页面内容。
  2. tagDataList archives with type="page" limit="10" order="id desc" 会获取当前标签下最新的10篇文档,并开启分页模式。
  3. {% for item in archives %} 循环遍历每篇文档,并显示其标题、缩略图、描述、发布日期和浏览量。
  4. {% empty %} 块会在没有文档时显示提示信息。
  5. {% pagination pages with show="5" %} 标签则负责生成分页导航,让用户可以浏览所有文档。

获取所有标签列表:tagList 标签

如果您想先显示网站上所有可用的标签,然后用户点击标签后跳转到对应的文档列表页,可以使用 tagList 标签。

<div class="all-tags-cloud">
    <h2>热门标签</h2>
    <ul>
        {% tagList allTags with itemId="0" limit="50" %} {# itemId="0" 表示获取所有标签 #}
            {% for tag in allTags %}
            <li><a href="{{ tag.Link }}">{{ tag.Title }} ({{ tag.ArchiveCount }})</a></li> {# ArchiveCount 属性需要确保在后台开启了统计 #}
            {% endfor %}
        {% empty %}
        <li>暂无标签。</li>
        {% endtagList %}
    </ul>
</div>

这个示例会列出网站上所有标签,每个标签都带有一个指向其文档列表页的链接。

3. 实用技巧与建议

  • 标签的自定义URL: 在后台编辑标签时,您可以设置自定义URL。这对于创建SEO友好的标签页面链接至关重要,例如 yourdomain.com/tag/seo-optimization 而不是 yourdomain.com/tag/123
  • 标签与分类的结合: 标签和分类并非互斥。分类提供宏观的树状结构,而标签则提供微观的网状关联。合理结合使用,可以为用户提供多维度的内容导航。
  • 控制显示数量和排序: 利用 limitorder 参数,您可以轻松地创建“热门标签文章”、“最新标签文章”等不同维度的列表,以满足不同区域的内容展示需求。
  • 分页处理: 对于内容量较大的标签,务必使用 type="page" 配合 pagination 标签来提供分页功能,优化用户体验和页面加载速度。

通过AnQiCMS提供的这些模板标签,您可以高效且灵活地展示特定标签下的文档列表,从而极大地丰富网站的内容组织形式,并为您的用户带来更便捷的浏览体验。


常见问题 (FAQ)

  1. 问:如何在非标签页面(如首页)显示某个特定标签下的文档列表? 答: 您可以直接使用 tagDataList 标签,并通过 tagId