在网站内容管理中,有效地组织和展示文章是提升用户体验和网站结构清晰度的关键。安企CMS提供了强大且灵活的模板标签功能,让您能够轻松地获取并显示特定分类下的所有文章。
确保内容结构清晰:后台分类设置的基石
在开始模板层面的操作之前,我们首先要确保后台的内容结构是清晰、合理的。安企CMS的分类管理功能位于“内容管理”模块下,您可以在这里创建和管理各种文章分类,例如“公司新闻”、“行业动态”或“技术教程”等。
在发布或编辑文章时,您会发现一个“所属分类”的选项,文章正是通过这个选项被归属到特定的分类之下。当您需要获取某一分类的文章列表时,系统会根据您在后台为文章指定的分类信息来进行筛选。
核心功能:使用 archiveList 标签获取文章列表
archiveList 标签是安企CMS模板中用于获取文章列表的核心工具。它功能强大,可以通过多种参数精确控制要获取的文章范围和显示方式。
要获取特定分类下的文章,关键在于使用 categoryId 这个参数。您可以在后台的“内容管理” -> “文档分类”中找到每个分类对应的ID。
此外,您还需要关注以下几个重要参数:
type: 这个参数决定了您希望以何种形式展示文章列表。- 设置为
list(type="list")时,它会按照您指定的数量(通过limit参数)列出文章,常用于侧边栏推荐或首页文章区块。 - 设置为
page(type="page")时,它会为文章列表生成分页,这在分类文章页或搜索结果页等需要大量文章展示的场景非常有用。
- 设置为
limit: 用于控制每页或每次显示的文章数量。例如,limit="10"将显示10篇文章。它还支持偏移模式,如limit="2,10"表示从第2篇文章开始,获取10篇文章。order: 文章的显示顺序同样重要。您可以根据需求设置不同的排序规则:order="id desc":按文章ID倒序,通常意味着最新发布的文章在前。order="views desc":按文章浏览量倒序,热门文章在前。order="sort desc":按后台自定义排序,允许您手动调整文章顺序。
moduleId: 如果您管理着多个内容模型(例如同时有“文章模型”和“产品模型”),确保指定正确的moduleId可以避免混淆。文章模型通常默认为1。
在archiveList标签内部,您会使用一个for循环来遍历获取到的每一篇文章。循环体内的每一篇文章都由一个item变量表示,您可以通过item.字段名的方式来获取文章的各种信息,例如:item.Title(标题)、item.Link(链接)、item.Description(简介)、item.Thumb(缩略图)、item.CreatedTime(发布时间)和item.Views(浏览量)等。
构建模板代码:从简单列表到分页展示
了解了这些参数后,我们来看看如何在模板中实际应用它们。
示例一:获取特定分类下的最新5篇文章(不带分页)
如果您希望在首页或侧边栏显示某个分类下的几篇最新文章,可以使用 type="list"。假设我们要获取ID为1的“公司新闻”分类下最新的5篇文章:
{# 获取ID为1的分类(例如“公司新闻”)下最新的5篇文章 #}
<div class="category-articles">
<h2>公司新闻</h2>
<ul>
{% archiveList articles with categoryId="1" type="list" limit="5" order="id desc" %}
{% for item in articles %}
<li>
<a href="{{ item.Link }}" title="{{ item.Title }}">
{# 如果有缩略图,则显示 #}
{% if item.Thumb %}
<img src="{{ item.Thumb }}" alt="{{ item.Title }}" class="article-thumb">
{% endif %}
<h3>{{ item.Title }}</h3>
<p class="article-desc">{{ item.Description|truncatechars:80 }}</p> {# 截取简介,避免过长 #}
<span class="article-date">{{ stampToDate(item.CreatedTime, "2006-01-02") }}</span>
</a>
</li>
{% empty %}
{# 当该分类下没有文章时显示 #}
<li>该分类下暂无文章。</li>
{% endfor %}
{% endarchiveList %}
</ul>
</div>
在这个例子中,我们还使用了 {{ stampToDate(item.CreatedTime, "2006-01-02") }} 过滤器来将时间戳格式化为易读的日期。truncatechars:80 则用于截取文章简介,使其显示不超过80个字符。
示例二:获取特定分类下的所有文章并带分页
当您需要在分类详情页显示该分类下的所有文章,并提供分页功能时,将 type 参数设置为 page,并配合 pagination 标签使用。
”`twig {# 假设我们正在一个分类详情页,会自动获取当前分类ID #} {# 如果需要指定分类,可以手动添加 categoryId=“您的分类ID” #} {% archiveList articles with type=“page” limit=“10” order=“id desc” %}
{# 列表头部可以显示当前分类的名称和描述 #}
<div class="category-header">
<h1>{% categoryDetail with name="Title" %}</h1>
<p>{% categoryDetail with name="Description" %}</p>
</div>
<div class="articles-list">
{% for item in articles %}
<div class="article-card">
<h3><a href="{{ item.Link }}">{{ item.Title }}</a></h3>
{% if item.Thumb %}
<a href="{{ item.Link }}"><img src="{{ item.Thumb }}" alt="{{ item.Title }}" class="article-card-thumb"></a>
{% endif %}
<p>{{ item.Description }}</p>
<div class="article-meta">
<span>发布时间:{{ stampToDate(item.CreatedTime, "2006-01-02") }}</span>
<span>浏览量:{{ item.Views }}</span>
</div>
</div>
{% empty %}
<p>该分类下暂无文章。</p>
{%