作为一名资深的网站运营专家,我深知如何高效地组织和呈现内容对于网站的成功至关重要。标签(Tag)作为一种灵活的内容分类方式,不仅能提升用户在站内的浏览体验,更是搜索引擎优化(SEO)策略中不可或缺的一环。安企CMS(AnQiCMS)以其简洁高效的架构和丰富的功能,为我们提供了强大的内容管理工具,使得即使是指定标签下的海量文档,也能井然有序地展示并进行优雅的分页。
今天,我们就来深入探讨如何在安企CMS中,巧妙地调用指定Tag下的所有文档列表,并为其配置完善的分页功能,让您的标签页面既内容丰富,又用户友好。
标签在安企CMS中的作用与管理
在安企CMS中,标签不仅仅是内容的简单归类,它更是一种强大的内容关联机制。不同模型(如文章、产品)的文档都可以打上相同的标签,从而实现跨模型的关联。这种灵活性使得您可以根据具体需求,为用户提供高度相关的内容聚合页。例如,您可以有一个名为“SEO优化”的标签,它可能关联着关于SEO技术细节的文章、SEO工具推荐的产品页面,甚至是一些SEO服务案例的单页。
标签的管理在安企CMS后台十分直观,您可以在“内容管理”下找到“文档标签”功能,进行标签的增删改查。为标签设置合理的名称、关键词和描述,是提升标签页SEO表现的第一步。
核心标签:tagDataList 获取指定Tag下的文档列表
要获取指定标签下的所有文档,安企CMS提供了一个专门且高效的模板标签:tagDataList。这个标签能够根据标签ID或当前页面上下文,提取出与该标签关联的所有文档。
在使用tagDataList时,您需要指定一些关键参数来精确控制所获取的文档范围和表现形式。其中最核心的是tagId参数,它允许您明确指定要调用哪个标签下的文档。通常,当您在tag/list.html这样的标签列表页面时,tagId会自动从URL中获取,无需手动指定。但如果需要在其他页面(例如首页侧边栏)调用特定标签的文档,就可以通过tagId="1"(假设标签ID为1)来精确调用。
此外,moduleId参数非常有用,如果您只想显示特定内容模型(如文章模型,其moduleId通常为1)下的文档,就可以加上moduleId="1"的限制。limit参数则用于控制每页显示多少条文档,这直接关系到分页的实现。最关键的是,为了实现分页,type参数必须设置为page。这将告诉系统,tagDataList不仅要返回文档列表,还要返回一个包含分页信息的pages对象。
tagDataList会返回一个名为archives的数组对象,这个对象包含了每个文档的详细信息。在模板的循环体中,每个item都代表一个文档,您可以轻松访问文档的Title(标题)、Link(链接)、Description(描述)、CreatedTime(创建时间)以及Views(浏览量)等字段。这些字段足以构建一个内容丰富且吸引人的文档列表项。
完善分页功能:pagination标签
有了tagDataList提供的文档列表和分页所需的数据基础,我们还需要安企CMS的另一个强大标签——pagination,来在页面底部展现直观且功能完善的分页导航。
pagination标签会巧妙地结合tagDataList传递过来的分页信息,生成一个包含首页、上一页、下一页、末页以及中间页码链接的导航区域。在使用时,您可以利用show参数来控制分页导航中同时显示多少个页码链接,例如show="5"表示最多显示5个页码。
pagination标签会返回一个pages对象,这个对象包含了所有与分页相关的信息,比如TotalItems(总文档数)、TotalPages(总页数)、CurrentPage(当前页码)以及FirstPage(首页对象)、PrevPage(上一页对象)、NextPage(下一页对象)、LastPage(末页对象)。其中,Pages是一个数组对象,包含了中间页码的每一个item,每个item都有Name(页码名称,即数字)、Link(页码链接)和IsCurrent(是否当前页)属性,这使得您可以灵活地为当前页码添加样式,提升用户体验。
模板文件的选择与布局
在安企CMS中,为了更好地组织模板文件,建议将调用指定Tag下所有文档列表并分页的代码放置在专门的标签列表模板中。根据安企CMS的模板约定,tag/list.html文件是实现这一功能的理想位置。系统会自动识别并应用这个文件作为标签页面的列表模板。
综合代码示例
以下是一个将tagDataList和pagination结合使用的完整代码示例,通常会放在您的模板目录中的tag/list.html文件里:
”`twig {# tag/list.html #}
{# 获取当前Tag的详细信息,用于页面标题、描述等 #} {% tagDetail currentTag with name=“Title” %} {% tagDetail tagDescription with name=“Description” %}
<!DOCTYPE html>
<meta charset="UTF-8">
<title>{% tdk with name="Title" siteName=true %}</title>
<meta name="keywords" content="{% tdk with name="Keywords" %}">
<meta name="description" content="{% tdk with name="Description" %}">
<link rel="stylesheet" href="{% system with name="TemplateUrl" %}/css/style.css">
{# 其他通用头部信息,如CSS、JS等 #}
{# 引入公共头部,例如包含导航栏 #}
{% include "partial/header.html" %}
<div class="container">
{# 面包屑导航,帮助用户了解当前位置 #}
<div class="breadcrumb">
{% breadcrumb crumbs with index="首页" title=true %}
<ul>
{% for item in crumbs %}
<li><a href="{{item.Link}}">{{item.Name}}</a></li>
{% endfor %}
</ul>
{% endbreadcrumb %}
</div>
<h1>标签:{% tagDetail with name="Title" %}</h1>
<p class="tag-description">{% tagDetail with name="Description" %}</p>
{# 调用指定Tag下的文档列表并进行分页 #}
<div class="archive-list">
{% tagDataList archives with type="page" limit="10" order="id desc" %}
{% for item in archives %}
<article class="archive-item">
<a href="{{item.Link}}">
<div class="archive-header">
<h2 class="archive-title">{{item.Title}}</h2>
{% if item.Thumb %}
<img class="archive-thumb" src="{{item.Thumb}}" alt="{{item.Title}}">
{% endif %}
</div>
<p class="archive-description">{{item.Description}}</p>
<div class="archive-meta">
<span>分类: {% categoryDetail with name="Title" id=item.CategoryId %}</span>
<span>发布时间: {{stampToDate(item.CreatedTime, "2006-01-02")}}</span>
<span>浏览量: {{item.Views}}</span>
</div>
</a>
</article>
{% empty %}
<p>该标签下暂无文档。</p>
{% endfor %}
{% endtagDataList %}
</div>
{# 分页导航区域 #}
<div class="pagination-area">
{% pagination pages with show="5" %}
<ul>
{# 首页链接 #}
<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 page