如何在AnQiCMS中按分类显示文章列表?

在网站内容管理中,高效地组织和展示信息至关重要。对于用户而言,能够清晰地按照不同分类浏览文章列表,不仅极大地提升了访问体验,也有助于搜索引擎更好地理解网站结构,从而优化SEO效果。安企CMS(AnQiCMS)为我们提供了灵活而强大的工具,让这一需求变得触手可及。

要实现在AnQiCMS中按分类展示文章列表,首先需要了解其背后的核心机制,这主要涉及到“内容模型”和“文档分类”这两个概念,以及如何在前端模板中巧妙运用特定的标签。

1. 理解基础:内容模型与文档分类

在安企CMS中,内容模型是定义不同类型内容结构的基础,比如你可以创建“文章模型”来管理博客文章,也可以创建“产品模型”来管理商品信息。每个模型都可以拥有自己独特的字段,确保内容的灵活性和多样性。

而文档分类,顾名思义,是对这些内容进行归类的工具。每一个分类都归属于一个特定的内容模型。例如,在“文章模型”下,可以创建“新闻动态”、“行业资讯”、“技术教程”等分类。这种层级化的分类方式,使得内容的管理和组织变得井井有条。在后台创建分类时,系统允许设置分类名称、简介、自定义URL,甚至可以为分类指定独立的模板,这为前端展示提供了极大的自由度。

2. 核心利器:模板标签的运用

实现分类文章列表的关键在于安企CMS提供的模板标签。其中,categoryListarchiveList 是我们最常用的两个标签。

  • categoryList 标签: 用于获取分类列表。通过这个标签,我们可以遍历网站中的所有分类,或者指定特定模型下的分类,甚至可以获取某个父级分类下的子分类。它会返回一个分类对象数组,每个对象包含分类的ID、标题、链接等信息。 例如,要获取“文章模型”(假设其ID为1)下的所有顶级分类,可以这样使用:

    {% categoryList categories with moduleId="1" parentId="0" %}
        {# 在这里循环处理每个分类 #}
    {% endcategoryList %}
    

    这里 moduleId="1" 指定了内容模型,parentId="0" 则表示获取顶级分类。

  • archiveList 标签: 用于获取文档(文章或产品)列表。这个标签功能非常强大,可以通过多种参数来筛选和排序文档,其中最重要的就是 categoryId。通过这个参数,我们可以指定获取属于某个或某些分类的文档。 例如,要获取某个分类下的10篇文章:

    {% archiveList archives with categoryId=item.Id type="list" limit="10" %}
        {# 在这里循环处理每个文章 #}
    {% endarchiveList %}
    

    这里 categoryId=item.Id 就将文章列表与当前分类(item)关联起来,type="list" 表示不分页列表,limit="10" 则限制了显示数量。如果需要分页显示,可以将 type 设置为 "page",并结合 pagination 标签使用。

3. 逐步实践:实现分类文章列表

有了对核心标签的理解,我们就可以开始构建分类文章列表了。

首先,确保你已经在安企CMS后台创建了相应的内容模型、分类,并且在这些分类下发布了一些文章。

接下来,我们需要在模板文件中编写代码。通常,这会是在网站的首页 (index/index.html)、某个模型的主页 ({模型table}/index.html),或者特定的分类列表页 ({模型table}/list.html) 中进行。

假设我们希望在首页展示“新闻动态”和“行业资讯”两个分类下的最新文章,我们可以这样做:

{# 首先,获取所有需要展示的顶级文章分类,假设文章模型的ID为1 #}
{% categoryList categories with moduleId="1" parentId="0" %}
    {% for category in categories %}
        {# 遍历每个分类,然后为每个分类显示一个标题和其下的文章列表 #}
        <section class="category-section">
            <h3><a href="{{ category.Link }}">{{ category.Title }}</a></h3>
            <ul class="article-list">
                {# 在当前分类下获取最新10篇文章 #}
                {% archiveList articlesInCategory with categoryId=category.Id type="list" limit="10" %}
                    {% for article in articlesInCategory %}
                        <li>
                            <a href="{{ article.Link }}">
                                {# 如果文章有缩略图,可以显示出来 #}
                                {% if article.Thumb %}
                                    <img src="{{ article.Thumb }}" alt="{{ article.Title }}" class="article-thumb">
                                {% endif %}
                                <div class="article-info">
                                    <h4>{{ article.Title }}</h4>
                                    <p class="article-desc">{{ article.Description|truncatechars:80 }}</p> {# 截取描述,保持整洁 #}
                                    <span class="article-date">{{ stampToDate(article.CreatedTime, "2006-01-02") }}</span>
                                </div>
                            </a>
                        </li>
                    {% empty %}
                        <li>该分类下暂无文章。</li>
                    {% endfor %}
                {% endarchiveList %}
            </ul>
            <div class="more-articles">
                <a href="{{ category.Link }}">查看更多 {{ category.Title }} 文章 &gt;</a>
            </div>
        </section>
    {% endfor %}
{% empty %}
    <p>暂无可用分类。</p>
{% endcategoryList %}

在这段代码中,我们首先使用 categoryList 遍历了所有的顶级文章分类。在每次循环中,我们取出了当前分类的 TitleLink。接着,在每个分类的内部,又使用 archiveList 标签,通过 categoryId=category.Id 参数,精确地获取并显示了该分类下的文章。forloop.Counterforloop.Revcounter 这样的循环变量,可以在需要为列表项添加特殊样式或逻辑时派上用场。

4. 进阶技巧与注意事项

  • 控制显示数量与分页: archiveListlimit 参数可以严格控制每个分类下显示的文章数量。如果需要更复杂的“加载更多”或传统分页,可以将 type 参数设置为 "page",然后在 archiveList 标签之后结合 pagination 标签来生成分页导航。
  • 多层级分类展示: 如果需要展示多层级分类,可以在 categoryListfor 循环内部,再次调用 categoryList,并通过 parentId=item.Id 获取子分类,实现无限级嵌套。文档中 tag-categoryList.md 提供了多级分类嵌套的示例代码。
  • SEO 友好 URL: 安企CMS支持伪静态规则管理,你可以通过配置 {catname}{module} 等变量,生成语义化更强的分类及文章URL,提升搜索引擎友好性。
  • 自定义分类模板: 在后台编辑分类时,你可以为特定分类指定一个“分类模板”(例如 list-news.html)。这样,访问该分类时,系统会自动应用指定的模板,从而实现个性化的展示效果,而无需在主模板中写复杂的条件判断。
  • 没有内容时的提示:for 循环中,使用 {% empty %} 可以优雅地处理列表为空的情况,提供友好的提示信息。

通过上述方法,你就可以在AnQiCMS中灵活、高效地按分类展示文章列表,无论是构建内容丰富的资讯门户,还是条理清晰的产品展示网站,都能轻松应对。


常见问题 (FAQ)

  1. 问:如何在网站首页显示不同内容模型(如文章和产品)下,指定分类的最新内容? 答:可以在首页模板中,分别调用 categoryList 标签获取不同内容模型(通过 moduleId 参数区分)的分类,然后在每个分类内部,再使用 archiveList 标签获取并展示该分类下的文章或产品。通过调整 limitorder 参数,可以控制显示数量和排序,实现“最新文章”或“最新产品”等不同版块的展示。

  2. 问:为什么我设置了分类和文章,但在前端页面上却没有显示出来? 答:这可能是由几个原因造成的:

    • 模板代码问题: 检查模板中 categoryListarchiveList 标签的参数是否正确,特别是 moduleIdcategoryId。确保循环变量 item 正确地传递了分类ID。
    • 内容状态: 确认文章是否已发布,而不是草稿或已删除。
    • 分类配置: 确保分类已启用,并且关联到了正确的内容模型。
    • 模板缓存: 清理系统缓存或页面缓存,因为有时候更改后台配置后,前端显示不会立即更新。
  3. 问:如何实现类似“面包屑导航”的功能,展示当前文章所属分类的所有父级分类? 答:安企CMS提供了专门的 breadcrumb 标签来解决这个问题。你可以在模板中直接使用 {% breadcrumb crumbs %} 来获取面包屑导航路径。它会自动检测当前页面的分类或文章所属的分类层级,并生成包含所有父级分类和当前页面的导航列表,非常方便。