在使用安企CMS(AnQiCMS)管理网站内容时,灵活地在前端页面展示文章列表是运营人员的日常需求。无论是首页的最新动态、分类页下的文章集合,还是带有分页功能的内容聚合页,AnQiCMS都提供了强大且易用的模板标签来帮助我们实现这些功能。今天,我们就来深入了解如何在AnQiCMS模板中高效获取并显示文章列表,并精确控制每页显示的文章数量。
核心:archiveList 标签,内容展示的“调度员”
在AnQiCMS模板中,展示文章列表的核心工具是archiveList标签。这个标签就像一个智能的内容调度员,能够根据我们设定的各种条件,从海量文章中筛选出目标内容,并以我们期望的方式呈现。
我们先从最基础的用法开始。如果你只是想在页面上固定显示一定数量的文章,例如最新的5篇文章,你可以这样使用archiveList标签:
{% archiveList archives with type="list" limit="5" %}
{% for item in archives %}
<li>
<a href="{{item.Link}}">
<h5>{{item.Title}}</h5>
<p>{{item.Description}}</p>
<div>
<span>发布日期:{{stampToDate(item.CreatedTime, "2006-01-02")}}</span>
<span>阅读量:{{item.Views}}</span>
</div>
</a>
</li>
{% else %}
<li>暂时没有相关文章。</li>
{% endfor %}
{% endarchiveList %}
在这段代码中,archiveList标签通过type="list"指定了列表类型为固定列表,而limit="5"则明确告诉系统只获取最新的5篇文章。archives是我们给获取到的文章列表起的变量名,在随后的for循环中,我们可以通过item.Title、item.Link等方式访问每篇文章的标题、链接等信息。stampToDate标签则用于将文章的时间戳格式化为我们可读的日期格式。
进阶:type="page" 与 pagination 标签,实现分页文章列表
当你的内容量较大,需要用户通过点击页码来浏览更多文章时,archiveList标签与pagination标签的组合就显得尤为重要。
首先,archiveList标签需要将type参数设置为"page"。这会告诉系统,我们期望获取的文章列表是用于分页显示的,系统会自动处理当前页码和总文章数等信息。
接着,我们需要引入pagination标签来生成页码导航。pagination标签会根据archiveList处理后的分页数据,自动生成“首页”、“上一页”、“下一页”以及具体的页码链接。
让我们通过一个完整的例子来理解它们如何协同工作:
{# 假设这是一个文章列表页,通过URL参数可传递分类ID或搜索关键词 #}
<div class="article-list-container">
{% archiveList archives with type="page" limit="10" moduleId="1" %} {# 获取文章模型下每页10篇文章,准备分页 #}
{% for item in archives %}
<article class="article-item">
<a href="{{item.Link}}">
{% if item.Thumb %}
<div class="article-thumb">
<img src="{{item.Thumb}}" alt="{{item.Title}}">
</div>
{% endif %}
<div class="article-info">
<h3>{{item.Title}}</h3>
<p class="article-description">{{item.Description}}</p>
<div class="article-meta">
<span class="category-name">分类:{% categoryDetail with name="Title" id=item.CategoryId %}</span>
<span class="publish-date">发布于:{{stampToDate(item.CreatedTime, "2006-01-02")}}</span>
<span class="views">浏览:{{item.Views}}</span>
</div>
</div>
</a>
</article>
{% else %}
<p class="no-content">当前分类下没有文章。</p>
{% endfor %}
{% endarchiveList %}
</div>
{# 分页导航区域 #}
<div class="pagination-nav">
{% pagination pages with show="5" %} {# 显示最多5个页码链接 #}
{% if pages.TotalPages > 1 %} {# 只有当总页数大于1时才显示分页 #}
<ul>
{% if pages.FirstPage %}
<li class="{% if pages.FirstPage.IsCurrent %}active{% endif %}"><a href="{{pages.FirstPage.Link}}">{{pages.FirstPage.Name}}</a></li>
{% endif %}
{% if pages.PrevPage %}
<li><a href="{{pages.PrevPage.Link}}">{{pages.PrevPage.Name}}</a></li>
{% endif %}
{% for pageItem in pages.Pages %}
<li class="{% if pageItem.IsCurrent %}active{% endif %}"><a href="{{pageItem.Link}}">{{pageItem.Name}}</a></li>
{% endfor %}
{% if pages.NextPage %}
<li><a href="{{pages.NextPage.Link}}">{{pages.NextPage.Name}}</a></li>
{% endif %}
{% if pages.LastPage %}
<li class="{% if pages.LastPage.IsCurrent %}active{% endif %}"><a href="{{pages.LastPage.Link}}">{{pages.LastPage.Name}}</a></li>
{% endif %}
</ul>
<p>总共 {{pages.TotalItems}} 篇文章,当前第 {{pages.CurrentPage}} / {{pages.TotalPages}} 页。</p>
{% endif %}
{% endpagination %}
</div>
在这个例子中:
archiveList标签的limit="10"定义了每页显示10篇文章。moduleId="1"确保我们只获取ID为1(通常是文章模型)的内容。pagination pages with show="5"指示系统生成页码导航,pages是我们为分页数据定义的变量名,show="5"则表示在中间部分最多显示5个页码链接,超出部分会自动省略。- 在
pagination标签内部,我们利用pages.FirstPage、pages.PrevPage、pages.Pages(这是一个包含中间页码的数组)、pages.NextPage和pages.LastPage等属性,灵活地构建出完整的页码导航结构。pageItem.IsCurrent可以帮助我们高亮当前所在的页码。
通过这种组合,我们可以非常方便地创建出功能完善、用户体验良好的文章分页列表。
丰富文章列表:archiveList 标签的常用参数
除了控制显示数量和分页,archiveList标签还支持多种参数来精细化筛选和排序文章,让你的内容展示更加多样和精准:
moduleId: 当你的AnQiCMS网站拥有文章、产品等多种内容模型时,通过moduleId="1"(文章模型ID)或moduleId="2"(产品模型ID)来指定获取特定模型下的文章列表。categoryId: 想要只展示特定分类下的文章,categoryId="10"(分类ID为10)就能派上用场。你也可以用逗号分隔,同时指定多个分类ID,例如categoryId="1,3,5"。如果将categoryId设置为"0",则表示不自动读取当前页面分类ID,这在需要获取全站热门文章时很有用。order: 内容的排序方式也能灵活控制。order="id desc"表示按最新发布排序(ID降序),order="views desc"表示按浏览量从高到低排序,而order="sort desc"则根据后台手动设置的排序值进行排序。flag: 配合后台文章的推荐属性(如头条[h]、推荐[c]),你可以通过flag="h"来获取具有头条属性的文章列表。q: 在搜索结果页中,q参数