如何在一个分类页面中同时显示子分类和该分类下的文章列表?

📅 👁️ 67

运营AnQiCMS网站时,我们经常遇到这样的需求:在一个分类页面中,我们不仅希望展示该分类下的文章列表,还希望能够清晰地列出它的所有子分类,方便用户进行更细致的导航。安企CMS凭借其灵活的模板引擎和丰富的内置标签,完全能够帮助我们轻松实现这一目标。

理解安企CMS的分类页面与模板机制

在安企CMS中,每个分类(无论是文章分类还是产品分类)都可以关联一个独立的模板文件。通常情况下,这个模板文件会命名为{模型table}/list.html,或者更精确地,{模型table}/list-{分类ID}.html。这意味着,当用户访问某个分类页面时,系统会自动加载对应的模板文件来渲染页面内容。

实现子分类和文章列表并存的关键,在于巧妙地运用安企CMS提供的categoryList标签来获取子分类,以及archiveList标签来获取该分类下的文章。

核心思路:灵活运用categoryListarchiveList标签

要在同一个分类页面中同时展示子分类和文章列表,我们的核心策略是:

  1. 确定当前分类: 在分类页面中,当前访问的分类信息(例如ID、名称等)通常已经作为上下文变量可用,比如可以通过 {{category.Id}} 直接获取。
  2. 获取并展示子分类: 使用 categoryList 标签,并指定 parentId 参数为当前分类的ID,即可获取其直接子分类。
  3. 获取并展示文章列表: 使用 archiveList 标签,并指定 categoryId 参数为当前分类的ID,即可获取该分类下的所有文章。为了更好地用户体验,文章列表通常还会结合 pagination 标签实现分页显示。

接下来,我们将详细介绍如何在模板中一步步实现这一功能。

详细步骤与代码实现

假设我们要为“文章”模型(其模型表名为 article)的分类页面实现这个功能。您需要在当前使用的模板主题目录下找到或创建 article/list.html 文件。如果希望特定分类使用独立模板,也可以在后台分类设置中指定对应的模板文件。

1. 获取当前分类的子分类列表

article/list.html 模板中,我们可以首先获取当前分类的子分类。categoryList 标签的 parentId 参数是关键,它能够指定我们要获取哪个父分类下的子分类。

{# 获取当前分类的ID,假设当前分类对象已在页面上下文中可用为 'category' #}
{% set currentCategoryId = category.Id %}

{# 使用 categoryList 标签获取当前分类下的所有子分类 #}
{% categoryList subCategories with parentId=currentCategoryId %}
    {% if subCategories %} {# 判断是否有子分类 #}
        <div class="sub-categories-section">
            <h2 class="section-title">子分类</h2>
            <ul class="sub-categories-list">
                {% for item in subCategories %}
                    <li class="sub-category-item">
                        <a href="{{ item.Link }}" title="{{ item.Title }}">
                            {{ item.Title }}
                            {% if item.Thumb %}<img src="{{ item.Thumb }}" alt="{{ item.Title }}"/>{% endif %}
                        </a>
                    </li>
                {% endfor %}
            </ul>
        </div>
    {% else %}
        <p>当前分类下暂无子分类。</p>
    {% endif %}
{% endcategoryList %}

在这段代码中:

  • 我们首先获取了当前分类的Id
  • {% categoryList subCategories with parentId=currentCategoryId %} 会根据当前分类的ID获取其所有直接子分类,并将结果存储在 subCategories 变量中。
  • 我们使用 {% if subCategories %} 来判断是否有子分类,避免在没有子分类时显示空列表。
  • for 循环中,item.Linkitem.Title 分别提供了子分类的链接和标题。item.Thumb 可用于显示子分类的缩略图(如果在后台设置了)。

2. 获取并展示该分类下的文章列表

在展示完子分类之后,紧接着可以展示当前分类下的文章列表。这里我们将使用 archiveList 标签,并开启分页功能。

{# 使用 archiveList 标签获取当前分类下的文章列表 #}
{# type="page" 开启分页功能,limit="10" 设置每页显示10篇文章 #}
{% archiveList articles with categoryId=currentCategoryId type="page" limit="10" %}
    {% if articles %} {# 判断是否有文章 #}
        <div class="article-list-section">
            <h2 class="section-title">本分类最新文章</h2>
            <ul class="article-items">
                {% for item in articles %}
                    <li class="article-item">
                        {% if item.Thumb %}
                            <a href="{{ item.Link }}" class="article-thumb-link">
                                <img src="{{ item.Thumb }}" alt="{{ item.Title }}" class="article-thumb"/>
                            </a>
                        {% endif %}
                        <div class="article-info">
                            <h3><a href="{{ item.Link }}" title="{{ item.Title }}">{{ item.Title }}</a></h3>
                            <p class="article-description">{{ item.Description|truncatechars:120 }}</p>
                            <div class="article-meta">
                                <span>发布于:{{ stampToDate(item.CreatedTime, "2006-01-02") }}</span>
                                <span>阅读量:{{ item.Views }}</span>
                            </div>
                        </div>
                    </li>
                {% endfor %}
            </ul>

            {# 添加分页导航 #}
            <div class="pagination-section">
                {% pagination pages with show="5" %}
                    <ul>
                        {% if pages.PrevPage %}
                            <li><a href="{{ pages.PrevPage.Link }}">上一页</a></li>
                        {% endif %}
                        {% for item in pages.Pages %}
                            <li class="{% if item.IsCurrent %}active{% endif %}">
                                <a href="{{ item.Link }}">{{ item.Name }}</a>
                            </li>
                        {% endfor %}
                        {% if pages.NextPage %}
                            <li><a href="{{ pages.NextPage.Link }}">下一页</a></li>
                        {% endif %}
                    </ul>
                {% endpagination %}
            </div>
        </div>
    {% else %}
        <p>当前分类下暂无文章。</p>
    {% endif %}
{% endarchiveList %}

在这段代码中:

  • {% archiveList articles with categoryId=currentCategoryId type="page" limit="10" %} 会获取当前分类下的文章,并设置每页显示10篇,同时开启分页模式。
  • 我们同样使用 {% if articles %} 来判断是否有文章。
  • for 循环中,展示了文章的标题、链接、描述(使用了truncatechars过滤器截取)、发布时间(使用了stampToDate过滤器格式化)、阅读量和缩略图。
  • 文章列表后,紧接着使用了 pagination 标签来生成分页导航,show="5"表示最多显示5个页码按钮。

将所有代码整合到一起(article/list.html 示例)

现在,我们将上述两部分代码合并到一个 `article

相关文章

如何管理和显示分类的Banner图和缩略图?

在网站运营中,分类页面是引导用户浏览、深化品牌印象的重要环节。为分类页面配置独特的Banner图和缩略图,不仅能提升网站的视觉吸引力,也能让用户更直观地理解分类内容,有效优化用户体验。安企CMS在这方面提供了灵活且易于操作的功能,帮助我们高效管理和展示这些视觉元素。 --- ### 一、高效管理分类的Banner图和缩略图 管理分类的Banner图和缩略图是网站内容视觉化的第一步

2025-11-09

如何通过URL参数或搜索关键词,动态筛选并显示文章列表?

在内容管理日益精细化的今天,如何让您的网站内容更智能、更贴心地服务访问者,是提升用户体验和网站价值的关键。安企CMS(AnQiCMS)作为一款高效、灵活的内容管理系统,提供了强大的功能来帮助我们实现这一点,尤其是在动态筛选和展示文章列表方面,其模板标签与URL参数的结合运用,能够轻松构建出高度可定制的内容呈现方式。 这篇文章将详细介绍如何利用URL参数和搜索关键词

2025-11-09

如何在前端表单中嵌入并显示留言验证码?

在网站运营中,留言板和评论区往往是与用户互动的重要渠道。然而,随之而来的垃圾信息和恶意提交也是一个令人头疼的问题。为了有效过滤这些噪音,集成验证码功能是行之有效的方法。今天,我们就来聊聊如何在安企CMS(AnQiCMS)的前端表单中,轻松地嵌入并显示留言验证码,为你的网站筑起一道防线。 整个过程可以分为三个主要步骤:首先是后台设置,然后是前端模板的 HTML 结构,最后是 JavaScript

2025-11-09

如何将多行文本内容,按照换行符转换为HTML格式显示?

在内容管理中,我们经常会遇到需要输入多行文本的情况,比如产品详情、服务介绍、公司简介或是联系方式。这些内容在后台编辑时,我们习惯性地通过回车键来分段。然而,当这些内容直接呈现在网站前台时,您可能会发现它们“挤”成一团,所有的回车符都消失了,这不仅影响阅读体验,也让页面显得杂乱无章。安企CMS作为一款高效的企业级内容管理系统,当然考虑到了这一点,并提供了多种优雅的解决方案

2025-11-09

如何在文章内容中,通过`safe`过滤器正确显示HTML富文本内容?

在网站内容运营中,富文本(Rich Text)内容扮演着至关重要的角色。它允许我们通过图片、链接、粗体、斜体等多种格式来丰富文章的表达,提升阅读体验。安企CMS(AnQiCMS)提供了功能强大的后台编辑器,方便我们轻松创建各类精彩内容。然而,当这些富文本内容最终呈现在网站页面上时,有时会发现原本漂亮的排版和链接变成了原始的HTML代码字符串,这究竟是为什么呢? ###

2025-11-09

如何在模板中,使用过滤器对显示的数字、字符串进行格式化(如浮点数位数、大小写转换)?

在网站内容呈现中,数据的美观与易读性与内容本身的质量同样重要。安企CMS(AnQiCMS)在模板层面提供了强大的过滤器(Filters)功能,让我们可以轻松地对页面上显示的数字和字符串进行格式化处理,从而提升用户体验和页面信息的专业度。 ### 过滤器:数据处理的“工序” 我们可以把过滤器想象成一道道处理数据的“工序”。原始数据就像未经加工的原材料,通过过滤器的处理,它可以变成我们需要的形状

2025-11-09

如何在列表显示时,根据for循环计数,对特定项目添加特殊样式?

在网站内容展示中,我们经常需要对列表中的特定项目进行视觉上的突出,无论是为了吸引用户注意力,还是为了提升内容的层次感。例如,您可能希望给最新发布的前几篇文章加上“置顶”标记,或者让列表中的奇偶行显示不同的背景色,以增强可读性。安企CMS(AnQiCMS)灵活的模板引擎,正是为实现这些精细化控制提供了强大的支持。 AnQiCMS 的模板系统借鉴了 Django 模板引擎的语法

2025-11-09

如何实现内容采集后,自动在网站前端显示获取的内容?

内容采集完成后,如何让获取到的内容自动在网站前端显示出来,是许多内容运营者非常关心的问题。安企CMS(AnQiCMS)作为一个高效、灵活的内容管理系统,提供了从内容入库到前台展示的完整解决方案。它通过强大的内容模型、灵活的模板标签和友好的SEO机制,让这个过程变得既简单又高效。 接下来,我们将一起探索如何利用AnQiCMS的各项功能,让您采集到的宝贵内容在网站前端自动、美观地展现。 ###

2025-11-09