在网站运营中,内容分类页面承载着组织信息、引导用户浏览的重要职责。一个设计合理、内容丰富的分类页面不仅能提升用户体验,还能优化搜索引擎抓取效率。对于安企CMS(AnQiCMS)的用户来说,在分类页面中嵌套显示该分类下的文章列表,是一个非常基础且常用的功能。本篇文章将详细为您介绍如何利用安企CMS强大的模板标签,轻松实现这一目标。
理解分类页面与内容模型
在开始之前,我们先来简单回顾一下安企CMS中内容组织的两大核心概念:内容模型和分类。
- 内容模型: 它是您网站上内容的骨架,例如“文章模型”、“产品模型”等。每个模型可以定义自己的字段(如文章有“作者”、“来源”,产品有“价格”、“库存”等)。您发布的所有内容都必须归属于一个特定的内容模型。这在后续调用文章列表时,通过
moduleId参数来指定模型,显得尤为重要。 - 分类: 则是对内容进行归类整理的方式。您可以为每个内容模型创建独立的分类体系,例如“文章”模型下有“新闻动态”、“行业资讯”,而“产品”模型下可能有“手机产品”、“电脑产品”等。
当用户访问一个分类页面时,他们期待看到的是该分类下所有相关的文章或产品列表。安企CMS提供了灵活的模板机制,允许我们自定义分类页面的展示方式。
准备您的分类列表模板文件
安企CMS的模板系统非常灵活。通常,分类列表页面的模板文件会存放在/template/您的模板目录/{模型table}/下。
- 默认分类列表模板: 通常是
{模型table}/list.html。例如,如果您的分类属于“文章”模型,那么默认模板可能是article/list.html。 - 自定义分类模板: 如果您希望某个特定的分类(比如“公司新闻”)拥有独特的布局,可以在后台为该分类指定一个自定义模板,例如
article/list-news.html或article/list-10.html(其中10是分类ID)。
无论您使用哪种模板文件,接下来的步骤都将在此文件中进行操作。
核心实现:在分类页面显示文章列表
要在分类页面中嵌套显示该分类下的文章列表,我们将主要使用到以下几个安企CMS的模板标签:
categoryDetail标签: 用于获取当前分类页面的详细信息,最重要的是获取当前分类的ID。archiveList标签: 这是获取文章列表的核心标签,它能根据多种条件(包括分类ID、模型ID等)筛选并列出文章。pagination标签: 如果文章数量较多,分页是必不可少的,这个标签可以帮助我们快速生成分页导航。
下面我们通过一个详细的代码示例来演示如何将这些标签组合使用。假设我们要在一个文章分类页面(例如article/list.html)中显示该分类下的文章列表,并支持分页。
实战代码示例:
{# 假设这是您的文章分类列表页面模板文件:/template/default/article/list.html #}
{% extends 'base.html' %} {# 继承基础布局,如包含头部、底部等公共部分 #}
{# 获取当前分类的详细信息,这里将分类信息存储在名为 'category' 的变量中 #}
{% categoryDetail category %}
{% set currentCategoryId = category.Id %} {# 提取当前分类的ID,方便后续使用 #}
{% set currentModuleId = category.ModuleId %} {# 提取当前分类所属的模型ID #}
{% block title %}
<title>{{ category.Title }} - 文章列表</title> {# 设置页面标题为分类名称 #}
{% endblock %}
{% block content %}
<div class="category-header">
<h1>{{ category.Title }}</h1> {# 显示分类名称 #}
<p>{{ category.Description }}</p> {# 显示分类描述 #}
{# 您也可以在此处显示分类的Banner图或缩略图 #}
{% if category.Logo %}
<img src="{{ category.Logo }}" alt="{{ category.Title }}">
{% endif %}
</div>
<div class="article-list-section">
<h2>最新文章</h2>
{# 使用 archiveList 标签获取当前分类下的文章列表 #}
{# type="page" 表示启用分页,limit="10" 表示每页显示10篇文章 #}
{# categoryId 使用我们之前获取到的 currentCategoryId #}
{# moduleId 使用我们之前获取到的 currentModuleId #}
{% archiveList archives with type="page" categoryId=currentCategoryId moduleId=currentModuleId limit="10" %}
{% if archives %} {# 判断是否有文章 #}
<ul class="article-list">
{% for item in archives %}
<li class="article-item">
<a href="{{ item.Link }}">
<h3>{{ item.Title }}</h3>
{% if item.Thumb %}
<img src="{{ item.Thumb }}" alt="{{ item.Title }}" class="article-thumb">
{% endif %}
<p class="article-description">{{ item.Description }}</p>
<div class="article-meta">
<span>发布日期: {{ stampToDate(item.CreatedTime, "2006-01-02") }}</span>
<span>阅读量: {{ item.Views }}</span>
</div>
</a>
</li>
{% endfor %}
</ul>
{# 插入分页导航 #}
<div class="pagination-area">
{% pagination pages with show="5" %} {# 最多显示5个页码按钮 #}
<ul>
{# 首页链接 #}
<li {% if pages.FirstPage.IsCurrent %}class="active"{% endif %}><a href="{{ pages.FirstPage.Link }}">{{ pages.FirstPage.Name }}</a></li>
{# 上一页链接 #}
{% if pages.PrevPage %}
<li><a href="{{ pages.PrevPage.Link }}">{{ pages.PrevPage.Name }}</a></li>
{% endif %}
{# 中间页码 #}
{% for pageItem in pages.Pages %}
<li {% if pageItem.IsCurrent %}class="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 %}
{# 尾页链接 #}
<li {% if pages.LastPage.IsCurrent %}class="active"{% endif %}><a href="{{ pages.LastPage.Link }}">{{ pages.LastPage.Name }}</a></li>
</ul>
{% endpagination %}
</div>
{% else %}
<p class="no-content">当前分类下暂无文章。</p> {# 没有文章时显示提示信息 #}
{% endif %}
{% endarchiveList %}
</div>
{% endblock %}
{% endcategoryDetail %}
代码解析:
{% categoryDetail category %}: 这个标签获取当前URL对应的分类信息,并将其赋值给category变量。这样,我们就能在模板中通过category.Title、category.Description等访问分类的各种属性。{% set currentCategoryId = category.Id %}: 这里我们提取了分类的Id,因为archiveList标签需要这个ID来精确筛选文章。同时,category.ModuleId也提供了当前分类所属的内容模型ID。{% archiveList archives with ... %}:archives:这是我们给文章列表数据起的名字,您可以在循环中用item来代表每一篇文章。type="page":非常重要! 只有设置为"page",archiveList才会返回分页所需的所有数据,并允许pagination标签正常工作。如果只是想简单列出几篇文章,不带分页,可以使用type="list"。categoryId=currentCategoryId:将之前获取的当前分类ID传递给文章列表标签,确保只显示本分类的文章。moduleId=currentModuleId:指定文章所属的内容模型ID。在多内容模型网站中,这是确保正确内容被调用的关键。limit="10":设定每页显示10篇文章。您可以根据需要调整这个数字。
{% for item in archives %}: 循环遍历archiveList返回的文章数组,item代表每一篇文章对象。- **
{{ item.Link }}、{{ item.Title }}、`{{ item.