安企CMS作为一款高效、灵活的内容管理系统,其标签(Tag)功能是组织和发现内容的重要方式。当用户访问某个特定的Tag页面时,往往期望能够看到与该Tag相关的所有文档,并且这些文档能以一种有序、易于浏览的方式呈现。这就涉及到如何在Tag文档列表页面实现文档的排序和分页展示。

在安企CMS中,实现这一功能主要依赖于其强大的模板标签系统,特别是tagDataList标签和pagination标签。通过灵活运用这两个标签及其参数,我们可以轻松构建出用户体验友好的Tag文档列表。

理解Tag文档列表页面的结构

在安企CMS的模板设计中,专门用于展示Tag下文档列表的页面通常是/template/{当前模板目录}/tag/list.html。这个页面是我们在展示特定标签下所有相关文档时的主要操作区域。系统会在此页面自动识别当前访问的Tag信息,我们只需调用相应的标签来获取和渲染数据即可。

核心标签:tagDataList 及其排序功能

tagDataList标签是安企CMS专门用于获取指定Tag下文档列表的核心工具。它能够根据我们提供的Tag ID,检索所有关联的文档。为了实现排序和分页,我们需要关注tagDataList的几个关键参数:

  1. tagId: 这是最基本的参数,用于指定要获取哪个Tag的文档列表。在tag/list.html页面中,通常不需要显式设置tagId,因为系统会自动尝试读取当前Tag页面的Tag ID。
  2. type="page": 这个参数至关重要,它告诉系统我们需要为文档列表生成分页数据。设置为"page"后,tagDataList不仅会返回当前页的文档列表,还会隐式地提供一个包含分页信息的pages变量,供pagination标签使用。
  3. order: 用于控制文档的排序方式。安企CMS提供了多种排序选项,您可以根据实际需求选择:
    • "id desc": 按照文档ID降序排列(通常意味着最新发布的文档在前)。
    • "views desc": 按照文档浏览量降序排列(热门文档在前)。
    • "sort desc": 按照后台自定义的排序值降序排列。 例如,如果我们想让最新发布的文档优先展示,可以将order参数设置为"id desc";如果希望最受欢迎的文档在前,则设置为"views desc"
  4. limit: 定义每页显示多少条文档。这是一个非常实用的参数,比如limit="10"表示每页显示10篇文章。

通过结合这些参数,tagDataList便能够输出符合我们排序要求并为分页做好了准备的文档列表。

{% tagDataList archives with type="page" limit="10" order="views desc" %}
    {% for item in archives %}
    <div class="document-item">
        <a href="{{item.Link}}">
            <h3>{{item.Title}}</h3>
            <p>{{item.Description}}</p>
            <span class="info">
                发布时间: {{stampToDate(item.CreatedTime, "2006-01-02")}} |
                浏览量: {{item.Views}}
            </span>
        </a>
    </div>
    {% empty %}
    <p>该标签下暂无任何文档。</p>
    {% endfor %}
{% endtagDataList %}

在上面的代码片段中,我们指定了每页显示10篇文档,并按照浏览量从高到低进行排序。{% empty %}标签则优雅地处理了当没有文档时显示提示信息的情况。

分页展示:pagination标签的运用

tagDataListtype参数设置为"page"后,系统会自动生成一个名为pages的变量,其中包含了所有与分页相关的数据,如总页数、当前页、首页、尾页以及前后页链接等。这时,我们就可以利用pagination标签来渲染美观的分页导航了。

pagination标签最常用的参数是show,它决定了在分页导航中显示多少个页码链接。例如,show="5"意味着在当前页码附近最多显示5个页码。

<div class="pagination-container">
    {% pagination pages with show="5" %}
        <a class="pagination-link {% if pages.FirstPage.IsCurrent %}active{% endif %}" href="{{pages.FirstPage.Link}}">首页</a>
        {% if pages.PrevPage %}
        <a class="pagination-link" href="{{pages.PrevPage.Link}}">上一页</a>
        {% endif %}
        {% for item in pages.Pages %}
        <a class="pagination-link {% if item.IsCurrent %}active{% endif %}" href="{{item.Link}}">{{item.Name}}</a>
        {% endfor %}
        {% if pages.NextPage %}
        <a class="pagination-link" href="{{pages.NextPage.Link}}">下一页</a>
        {% endif %}
        <a class="pagination-link {% if pages.LastPage.IsCurrent %}active{% endif %}" href="{{pages.LastPage.Link}}">尾页</a>
    {% endpagination %}
</div>

这段代码会根据pages变量中的数据,自动生成一个包含首页、上一页、具体页码、下一页和尾页链接的分页导航。item.IsCurrent可以帮助我们为当前页码添加样式,提升用户识别度。

综合示例:构建完整的Tag文档列表页面

tagDataListpagination标签结合起来,我们就可以在tag/list.html模板中实现一个功能完善的Tag文档列表页面:

”`twig {# tag/list.html #} <!DOCTYPE html>

<meta charset="UTF-8">
<title>{% tdk with name="Title" siteName=true