在AnQiCMS中,显示某个特定标签(Tag)下的所有文章列表是一个常见且实用的内容运营需求。通过AnQiCMS灵活的模板系统,您可以轻松实现这一功能,为用户提供更精准的内容导航。
首先,让我们了解一下AnQiCMS中的标签机制。标签是内容组织的重要工具,它允许您为文章、产品等内容添加关键词,从而将相关内容进行横向关联,即使这些内容分属不同的分类。这种关联方式有助于用户发现更多感兴趣的内容,同时也利于搜索引擎优化。在内容管理后台,当您发布或编辑文章时,可以为内容添加一个或多个标签,这些标签随后便可以在前台页面上被调用和展示。
要实现在前端页面显示特定标签下的文章列表,AnQiCMS提供了强大的模板标签功能。其中,tagDataList 标签是专门为此目的设计的。它能够根据指定的标签ID或当前页面自动识别的标签,获取该标签下所有相关的文章列表。
在模板中实现标签文章列表
通常,AnQiCMS会为每个标签生成一个专门的列表页,其默认模板文件路径是 /template/你的模板目录/tag/list.html。在这个特殊的模板文件中,tagDataList 标签会自动识别当前页面的标签ID,从而无需手动指定 tagId 参数。当然,如果您希望在其他页面(例如首页、侧边栏等)显示特定标签下的文章,也可以通过明确指定 tagId 来实现。
逐步构建你的标签文章列表页面
确定模板文件: 如前所述,您可以在
tag/list.html中进行操作。如果您想在其他页面展示,可以在相应页面(如index.html或自定义内容页)中添加以下代码块。获取标签自身的信息 (可选但推荐): 在标签列表页中,通常会显示当前标签的名称和描述,以帮助用户了解正在浏览的内容。您可以使用
tagDetail标签来获取当前标签的详细信息。{# 获取当前标签的详细信息 #} {% tagDetail currentTag with name="Title" %} <h1>{{ currentTag }} 标签下的文章</h1> {% tagDetail tagDescription with name="Description" %} {% if tagDescription %} <p>{{ tagDescription }}</p> {% endif %}使用
tagDataList获取文章列表: 这是核心步骤。tagDataList标签用于获取指定标签下的文章数据。您可以通过以下参数来精细控制获取的内容:tagId:标签的ID。在tag/list.html中通常无需指定,系统会自动识别当前标签ID。若在其他页面调用,则需要明确指定,例如tagId="123"。moduleId:如果您的网站有多种内容模型(如文章、产品),您可以通过moduleId来指定只获取某个模型下的内容,例如moduleId="1"(通常代表文章模型)。type:设置为"page"以启用分页功能,这样当文章数量较多时,可以分多页显示。limit:每页显示的文章数量,例如limit="10"。order:文章的排序方式,例如order="id desc"(按ID倒序,即最新发布) 或order="views desc"(按浏览量倒序)。
{# 使用 tagDataList 获取标签下的文章列表,并启用分页 #} {% tagDataList archives with type="page" limit="10" %} {# 循环显示文章列表 #} {% for item in archives %} <article> <h2><a href="{{item.Link}}">{{item.Title}}</a></h2> {% if item.Thumb %} <a href="{{item.Link}}"> <img src="{{item.Thumb}}" alt="{{item.Title}}"> </a> {% endif %} <p>{{item.Description}}</p> <footer> <span>发布日期: {{stampToDate(item.CreatedTime, "2006-01-02")}}</span> <span>阅读量: {{item.Views}}</span> </footer> </article> {% empty %} <p>该标签下暂无文章。</p> {% endfor %} {% endtagDataList %}添加分页导航: 如果
tagDataList的type参数设置为"page",那么您就可以使用pagination标签来生成分页导航,提升用户体验。{# 分页导航 #} <div class="pagination"> {% 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 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> {% endpagination %} </div>
完整的模板代码示例
将以上片段组合起来,一个典型的AnQiCMS标签文章列表页面可能看起来像这样:
”`twig {% extends ‘base.html’ %} {# 继承基础模板 #}
{% block title %}
{% tagDetail currentTagTitle with name="Title" %}
<title>{{ currentTagTitle }} - 标签文章列表</title>
{% endblock %}
{% block content %}
<main>
<section class="tag-header">
{% tagDetail currentTagName with name="Title" %}
<h1>标签: {{ currentTagName }}</h1>
{% tagDetail tagDescription with name="Description" %}
{% if tagDescription %}
<p>{{ tagDescription }}</p>
{% endif %}
</section>
<section class="article-list">
{% tagDataList archives with type="page" limit="10" order="id desc" %}
{% for item in archives %}
<article class="article-item">
{% if item.Thumb %}
<figure class="article-thumb">
<a href="{{item.Link}}">
<img src="{{item.Thumb}}" alt="{{item.Title}}">
</a>
</figure>
{% endif %}
<div class="article-info">
<h2><a href="{{item.Link}}">{{item.Title}}</a></h2>
<p class="article-description">{{item.Description}}</p>
<div class="article-meta">
<span>发布于: {{stampToDate(item.CreatedTime, "2006-01-02")}}</span>
<span>阅读量: {{item.Views}}</span>
{# 您还可以显示文章所属分类 #}
{% categoryDetail articleCategory with name="Title" id=item.CategoryId %}
<span>分类: <a href="{% categoryDetail with name='Link' id=item.CategoryId %}">{{articleCategory}}</a></span>
</div>
</div>
</article>
{% empty %}
<p>该标签下暂无内容,敬请期待!</p>
{% endfor %}
{# 分页导航 #}
<div class="pagination-container">
{% pagination pages with show="5" %}
<ul class="pagination">
<li class="page-item {% if pages.FirstPage.IsCurrent %}active{% endif %}">
<a href="{{pages.FirstPage.Link}}">首页</a>
</li>
{% if pages.PrevPage %}
<li class="page-item">
<a href="{{pages.PrevPage.Link}}">上一页</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}}">下一页</a>
</li>
{% endif %}
<li