如何获取并显示指定Tag下的文档列表,并支持分页功能?

📅 👁️ 69

在网站内容管理中,将文档按照其所属的标签(Tag)进行归类和展示,是提升用户体验和内容可发现性的重要策略。AnQiCMS 提供了一套直观而强大的模板标签,帮助我们轻松实现这一目标,同时还能灵活地支持分页功能,即使面对海量内容也能保持页面的整洁和加载速度。

要获取并显示指定标签下的文档列表,并实现分页,我们需要用到 AnQiCMS 模板引擎中的两个核心标签:tagDataListpagination。这两个标签协同工作,能够帮助我们构建出功能完善的标签文档列表页面。

核心标签:Tag文档列表标签 tagDataList

tagDataList 标签是专门用于从数据库中检索与特定标签关联的文档列表。它的使用方式非常灵活,可以根据我们的需求进行定制。

在使用时,我们通常会以这样的形式来定义它:{% tagDataList archives with tagId="1" type="page" limit="10" %}。这里,archives 是我们为文档列表定义的变量名,你可以根据自己的习惯来命名。

以下是一些关键参数的说明:

  • tagId:这是最核心的参数,用于指定我们想要获取哪个标签下的文档。你可以直接填写标签的 ID(例如 tagId="1"),也可以让系统自动识别当前页面的标签 ID。如果当前页面本身就是某个标签的详情页(例如 tag/list.htmltag/index.html),tagDataList 标签通常会自动获取该标签的 ID,我们便无需手动指定。
  • type="page":这个参数至关重要,它告诉系统我们需要一个支持分页的文档列表。只有设置了 type="page"tagDataList 才会将列表数据和分页信息一起返回,以便后续结合 pagination 标签使用。
  • limit:用于控制每页显示多少篇文档。例如,limit="10" 意味着每页显示 10 篇文档。
  • moduleId:如果你需要筛选特定内容模型(如“文章”或“产品”)下的标签文档,可以通过此参数指定模型的 ID。例如,moduleId="1" 通常代表文章模型。
  • order:定义文档的排序方式,常见的有 id desc(按ID降序,即最新发布)、views desc(按浏览量降序)等。

tagDataList 标签执行后,它会将符合条件的文档数据填充到我们定义的变量(例如 archives)中,这个变量是一个数组对象,我们可以通过 for 循环来遍历并显示每一篇文档的内容。

结合分页标签 pagination

当我们使用 tagDataList 并将 type 参数设置为 page 后,系统会生成相应的分页数据。这些分页数据可以通过 pagination 标签来渲染成用户可见的分页导航。

pagination 标签的使用方式如下:{% pagination pages with show="5" %}。其中,pages 是系统自动生成的包含分页信息的变量名。

  • show:这个参数控制分页导航中一次性显示多少个页码。例如,show="5" 会显示当前页码前后共 5 个页码链接。

pagination 标签内部也需要通过 for 循环来遍历每一个页码链接,并显示“首页”、“上一页”、“下一页”和“尾页”等导航元素。它会根据当前页码和总页数,智能地生成完整的页码导航。

实战演练:获取并显示指定标签文档列表(含分页)

下面是一个完整的模板代码示例,展示了如何在 AnQiCMS 中获取某个标签下的文档列表并实现分页功能。假设这是一个标签详情页面的模板。

{# 假设我们正在一个标签详情页面,tagDataList 会自动获取当前标签ID #}

<div class="tag-documents">
    {# 获取当前标签的详细信息,例如标签名称和描述 #}
    {% tagDetail currentTag with name="Title" %}
    {% tagDetail tagDescription with name="Description" %}
    <h1>标签:{{ currentTag }}</h1>
    {% if tagDescription %}
        <p class="tag-description">{{ tagDescription }}</p>
    {% endif %}

    <ul class="document-list">
        {# 使用 tagDataList 标签获取当前标签下的文档列表,并开启分页功能 #}
        {% tagDataList archives with type="page" limit="10" order="id desc" %}
            {% for item in archives %}
            <li class="document-item">
                <a href="{{ item.Link }}" class="document-title">
                    <h3>{{ item.Title }}</h3>
                </a>
                {% if item.Thumb %}
                <div class="document-thumb">
                    <a href="{{ item.Link }}">
                        <img src="{{ item.Thumb }}" alt="{{ item.Title }}">
                    </a>
                </div>
                {% endif %}
                <p class="document-description">{{ item.Description }}</p>
                <div class="document-meta">
                    {# 获取文档所属分类的名称和链接 #}
                    <span>分类:<a href="{% categoryDetail with name='Link' id=item.CategoryId %}">{% categoryDetail with name='Title' id=item.CategoryId %}</a></span>
                    {# 格式化文档发布时间 #}
                    <span>发布时间:{{ stampToDate(item.CreatedTime, "2006-01-02") }}</span>
                    <span>阅读量:{{ item.Views }}</span>
                </div>
            </li>
            {% empty %}
            {# 如果当前标签下没有文档,显示此内容 #}
            <li class="no-content">
                该标签下暂时没有相关文档。
            </li>
            {% endfor %}
        {% endtagDataList %}
    </ul>

    {# 渲染分页导航 #}
    <nav class="pagination-nav">
        {% 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 %}">
                <a href="{{ pages.LastPage.Link }}">{{ pages.LastPage.Name }}</a>
            </li>
        </ul>
        {# 显示总数和总页码信息,可选择性显示 #}
        <div class="pagination-info">
            总计 {{ pages.TotalItems }} 篇文档,共 {{ pages.TotalPages }} 页,当前第 {{ pages.CurrentPage }} 页。
        </div>
        {% endpagination %}
    </nav>
</div>

在这个示例中,我们首先通过 tagDetail 标签获取了当前标签的名称和描述,作为页面的标题和简介。接着,利用 tagDataList 标签,以 type="page" 的形式获取了每页 10 篇文档,并按 ID 降序排列。在遍历 archives 变量时,我们展示了文档的标题、缩略图、描述、所属分类、发布时间和阅读量。最后,通过 pagination 标签,配合 show="5" 参数,生成了完整的页码导航。

深入理解:如何获取Tag ID?

如前所述,在标签详情页面,tagDataList 会自动识别当前页面的 tagId。但如果需要在其他非标签详情页(例如首页或分类列表页)显示特定标签的文档列表,我们就需要手动指定 tagId

手动获取 tagId 的方法有几种:

  1. 从后台查看:登录 AnQiCMS 后台,进入 “内容管理” -> “文档标签” 页面,每个标签都会有一个唯一的 ID,可以直接复制使用。
  2. 使用 tagDetail 标签:如果你知道标签的名称或别名,可以在模板中先通过 tagDetail 标签获取其 ID。例如: “`twig {% tagDetail specificTag with name=“Id” token=“anqicms” %} {# 假设标签别名为

相关文章

如何在AnQiCMS中显示多级嵌套的分类列表,如顶级分类及其子分类?

在构建网站时,一个清晰、有组织的内容结构是提升用户体验和搜索引擎友好度的基石。尤其对于内容丰富的网站,如何高效地展示多级嵌套的分类列表,如顶级分类及其子分类,是许多运营者关心的问题。AnQiCMS作为一款灵活的企业级内容管理系统,提供了直观而强大的模板标签,让您可以轻松实现这一需求。 ### AnQiCMS如何组织分类内容 在AnQiCMS的后台,分类管理是内容结构的核心

2025-11-07

如何在AnQiCMS模板中获取并显示当前分类的详细信息,如标题、描述、缩略图和Banner组图?

在AnQiCMS中构建网站,尤其是当我们需要在分类页面呈现丰富而精准的信息时,深入理解如何在模板中获取当前分类的详细数据就显得尤为重要。这不仅仅是为了美观,更是为了提供更好的用户体验和搜索引擎优化。 AnQiCMS的模板系统设计得非常灵活且易于上手,它采用了类似Django模板引擎的语法。当我们处于一个分类页面时,想要获取该分类的标题、描述、缩略图,甚至是轮播图组等信息

2025-11-07

AnQiCMS如何通过模板目录结构实现针对PC和移动端的不同内容显示和适配?

在当今移动互联网占据主导地位的时代,让网站内容在不同设备上都能完美展现,是每位网站运营者都非常关注的核心议题。AnQiCMS在这一方面提供了极其灵活且强大的解决方案,让我们能够轻松地针对PC端和移动端的用户,提供优化过的显示和交互体验。 AnQiCMS实现PC与移动端内容适配的关键,在于其精心设计的模板目录结构和灵活的网站模式选择。这不仅仅是简单的响应式布局

2025-11-07

如何通过`jsonLd`标签在AnQiCMS页面中插入自定义的结构化数据以增强搜索引擎显示效果?

在构建和优化网站时,我们总希望能让搜索引擎更深入地理解我们页面的内容,从而在搜索结果中获得更好的展示效果。结构化数据,尤其是以JSON-LD格式呈现的结构化数据,正是实现这一目标的重要工具。安企CMS(AnQiCMS)作为一个注重SEO优化的内容管理系统,为我们插入自定义JSON-LD提供了灵活而强大的支持。 ### 理解结构化数据与安企CMS的优势 搜索引擎通过爬虫抓取网页内容

2025-11-07

如何使用`contain`过滤器在AnQiCMS模板中判断一个字符串或数组是否包含特定关键词?

在AnQiCMS构建网站的过程中,灵活地根据内容特性展示信息是提升用户体验和运营效率的关键。为了实现这一点,系统内置了许多实用的模板过滤器,其中`contain`过滤器便是判断内容是否包含特定关键词的得力工具。 它能帮助您在无需修改后端代码的情况下,直接在模板层面进行内容匹配,从而让您的网站内容展示更加智能化和个性化。 ### 什么是`contain`过滤器

2025-11-07

如何使用`length`过滤器获取字符串、数组或键值对的长度进行显示或判断

在网站内容运营中,我们经常会遇到需要获取或判断数据长度的场景。例如,展示一篇文章的字数、一个列表有多少个项目,或者根据内容的长度来决定是否显示某个元素。安企CMS(AnQiCMS)的模板引擎提供了一系列实用的过滤器来帮助我们处理这些需求,其中 `length` 和 `length_is` 过滤器便是其中的佼佼者。它们能帮助我们轻松地实现这些功能,让网站的动态展示和交互逻辑更加灵活。 ###

2025-11-07

如何在文章详情页显示自定义SEO标题而不是文章标题?

在内容运营中,网站文章详情页的标题设置是一个关键环节。我们经常会遇到这样的情况:文章本身的内容标题需要引人注目,富有创意,以吸引读者的点击;而搜索引擎优化(SEO)所需要的页面标题(即浏览器标签页上显示的`<title>`标签内容),则更侧重于关键词的布局、长度控制以及对搜索引擎的友好性。在AnQiCMS中,您完全可以灵活地管理这两种不同的标题,确保用户体验和SEO效果两不误。 ###

2025-11-07

安企CMS如何配置URL伪静态规则以优化搜索引擎抓取?

在网站运营中,搜索引擎优化(SEO)扮演着至关重要的角色,而友好的URL结构则是提升网站在搜索引擎中表现的关键一环。一个清晰、有意义的URL不仅能帮助搜索引擎更好地理解页面内容,也能让访问者一眼看出页面的主题,提升用户体验。传统的动态URL往往包含难以理解的参数,这对SEO和用户都不够友好。幸运的是,安企CMS提供了强大的伪静态规则配置功能,让您可以轻松优化网站的URL结构。 ###

2025-11-07