如何在安企CMS中显示不同层级的文档分类列表及其关联的文档?

📅 👁️ 120

在网站运营中,如何高效地组织和展示海量内容,是提升用户体验和网站可用性的关键。对于使用安企CMS(AnQiCMS)的朋友们来说,系统提供了强大的内容模型和模板标签功能,能够帮助我们轻松实现多层级的文档分类列表,并清晰地展示每个分类下关联的文档。

接下来,我们就一起探索如何在安企CMS中,利用这些功能,构建一个既有层次感又内容丰富的网站导航。

理解安企CMS的内容结构

在安企CMS中,内容主要围绕“内容模型”和“分类”两个核心概念构建。内容模型(如文章模型、产品模型)定义了内容的类型和其特有的字段,而分类则是这些内容模型下的组织结构。每一个文档(无论是文章还是产品)都会归属于一个特定的分类。

要显示不同层级的文档分类及其关联文档,我们主要会用到安企CMS的两个关键模板标签:categoryList 用于获取分类信息,以及 archiveList 用于获取文档列表。

获取顶层文档分类列表

首先,我们需要在模板中展示最顶级的分类。这通常是网站主导航的基础。我们可以使用 categoryList 标签,并通过 parentId="0" 来指定获取所有没有上级分类的顶级分类。同时,别忘了通过 moduleId 参数指定是获取文章模型(通常是 1)还是产品模型(通常是 2)的分类。

一个简单的例子,用来展示文章模型的顶级分类列表:

{% categoryList categories with moduleId="1" parentId="0" %}
    <ul>
        {% for item in categories %}
            <li><a href="{{ item.Link }}">{{ item.Title }}</a></li>
        {% endfor %}
    </ul>
{% endcategoryList %}

在这段代码中,categories 是我们为顶级分类列表定义的变量名,item 则是循环中每个分类的实例。item.Link 会自动输出该分类的访问链接,item.Title 则显示分类名称。

展示多层级的子分类

网站结构往往不止一层。安企CMS的 categoryList 标签支持嵌套使用,允许我们在顶级分类下进一步展示其子分类。这得益于 item 对象中的 HasChildren 字段,它可以判断当前分类是否有子分类。

如果一个分类有子分类,我们就可以在其内部再次调用 categoryList,并将当前分类的 Id 作为 parentId 传递给子分类的查询,这样就能逐层展开。

考虑一个两级分类的展示:

{% categoryList topCategories with moduleId="1" parentId="0" %}
    <ul class="main-nav">
        {% for category in topCategories %}
            <li>
                <a href="{{ category.Link }}">{{ category.Title }}</a>
                {% if category.HasChildren %} {# 判断当前分类是否有子分类 #}
                    <ul class="sub-nav">
                        {% categoryList subCategories with parentId=category.Id %} {# 获取当前分类的子分类 #}
                            {% for subCategory in subCategories %}
                                <li><a href="{{ subCategory.Link }}">{{ subCategory.Title }}</a></li>
                            {% endfor %}
                        {% endcategoryList %}
                    </ul>
                {% endif %}
            </li>
        {% endfor %}
    </ul>
{% endcategoryList %}

这样,我们就能在网站上看到清晰的二级分类导航结构了。如果需要更多层级,可以依照这个模式继续嵌套 categoryList

关联并显示每个分类下的文档

仅仅展示分类名称还不够,用户更希望看到每个分类下具体的内容。这时,archiveList 标签就派上用场了。我们可以在循环展示分类的同时,调用 archiveList 来显示该分类下的文档。

关键在于将当前分类的 Id 传递给 archiveListcategoryId 参数,这样 archiveList 就会只获取属于当前分类的文档。为了页面整洁,通常我们会限制显示文档的数量,使用 limit 参数可以轻松实现。

例如,在每个分类下显示最新的5篇文档:

{% categoryList categories with moduleId="1" parentId="0" %}
    <div class="category-section">
        {% for cat in categories %}
            <h3><a href="{{ cat.Link }}">{{ cat.Title }}</a></h3>
            <ul class="document-list">
                {% archiveList docs with type="list" categoryId=cat.Id limit="5" %} {# 获取当前分类下的5篇文档 #}
                    {% for doc in docs %}
                        <li><a href="{{ doc.Link }}">{{ doc.Title }}</a></li>
                    {% empty %} {# 如果当前分类下没有文档 #}
                        <li>暂无相关文档。</li>
                    {% endfor %}
                {% endarchiveList %}
            </ul>
        {% endfor %}
    </div>
{% endcategoryList %}

综合示例:构建完整的层级导航与内容列表

现在,让我们把上述概念结合起来,构建一个既能显示多级分类,又能显示每个分类下关联文档的完整示例。一个常见的需求是,如果分类有子分类,就显示子分类列表;如果没有子分类,就直接显示该分类下的文档。

”`twig {# 假设我们正在制作一个产品列表页面,产品模型的ID是2 #}

{% categoryList productCategories with moduleId="2" parentId="0" %} {# 获取产品模型的顶级分类 #}
    <ul class="main-categories">
        {% for mainCategory in productCategories %}
            <li>
                <a href="{{ mainCategory.Link }}">{{ mainCategory.Title }}</a>
                {% if mainCategory.HasChildren %} {# 如果有子分类,则显示子分类 #}
                    <ul class="sub-categories">
                        {% categoryList subCategories with parentId=mainCategory.Id %} {# 获取子分类 #}
                            {% for subCategory in subCategories %}
                                <li>
                                    <a href="{{ subCategory.Link }}">{{ subCategory.Title }}</a>
                                    {# 可以在这里继续嵌套显示三级分类,或直接显示文档 #}
                                    {% if subCategory.HasChildren %}
                                        <ul class="tertiary-categories">
                                            {% categoryList tertiaryCategories with parentId=subCategory.Id %}
                                                {% for tercat in tertiaryCategories %}
                                                    <li><a href="{{ tercat.Link }}">{{ tercat.Title }}</a></li>
                                                {% endfor %}
                                            {% endcategoryList %}
                                        </ul>
                                    {% else %}
                                        {# 如果没有三级分类,则直接显示该二级分类下的产品文档 #}
                                        <ul class="associated-products">
                                            {% archiveList products with type="list" categoryId=subCategory.Id limit="4" %}
                                                {% for product in products %}
                                                    <li>
                                                        <a href="{{ product.Link }}">
                                                            <img src="{{ product.Thumb }}" alt="{{ product.Title }}" />
                                                            <span>{{ product.Title }}</span>
                                                        </a>
                                                    </li>
                                                {% empty %}
                                                    <li>该分类暂无产品。</li>
                                                {% endfor %}
                                            {% endarchiveList %}
                                        </ul>
                                    {% endif %}
                                </li>
                            {% endfor %}
                        {% endcategoryList %}
                    </ul>
                {% else %} {# 如果没有子分类,则直接显示该顶级分类下的产品文档 #}
                    <ul class="associated-products">
                        {% archiveList products with type="list" categoryId=mainCategory.Id limit="4" %}
                            {% for product in products %}
                                <li>
                                    <a href="{{ product.Link }}">
                                        <img src="{{ product.Thumb }}" alt="{{ product.Title }}" />
                                        <span>{{ product.Title }}</span>

相关文章

安企CMS中如何根据关键词筛选并显示特定的文档列表?

在使用安企CMS管理网站内容时,我们经常需要根据特定的关键词来查找并展示相关的文档列表。无论是为了创建一个站内搜索结果页,还是在特定专题页面展示与某个主题紧密关联的内容,掌握关键词筛选的方法都至关重要。安企CMS提供了灵活且强大的模板标签功能,使得这项任务变得直观而高效。 ### 关键词筛选的基础:`archiveList` 标签的 `q`

2025-11-09

怎样利用安企CMS的全局设置来统一控制网站的版权信息和联系方式显示?

在网站运营中,版权声明和联系方式是构建品牌信任、提供用户支持和确保法律合规性的重要组成部分。安企CMS(AnQiCMS)深知这些信息的关键性,因此提供了直观且强大的全局设置功能,让网站管理者能够统一、便捷地控制这些内容的显示,无需频繁修改代码。 想象一下,如果您的网站有上百个页面,每次要修改版权年份或者更新客服电话,都需要手动编辑每一个页面,那将是多么繁琐和容易出错的工作

2025-11-09

如何在安企CMS中实现分页功能,并自定义页码的显示样式?

在安企CMS中,网站内容的分页功能是提升用户体验、优化站点结构不可或缺的一部分。无论是博客文章列表、产品展示页还是其他动态内容,合理的分页能让用户更方便地浏览大量信息,也能帮助搜索引擎更好地理解和抓取网站内容。今天,我们就来深入了解如何在AnQiCMS中实现分页功能,并按自己的需求定制页码的显示样式。 ### 为什么需要分页? 想象一下,您的网站上有成百上千篇精彩的文章。如果没有分页

2025-11-09

如何在安企CMS中将Markdown格式的内容正确地渲染为HTML并显示数学公式或流程图?

在安企CMS中,利用Markdown格式撰写内容不仅能提升编辑效率,还能保持内容的结构化与可读性。当内容涉及到复杂的数学公式或需要展示清晰的流程图时,Markdown的强大之处便能体现。安企CMS为此提供了良好的支持,让我们一起来看看如何在网站上正确地渲染和展示这些高级内容。 ### 第一步:启用Markdown编辑器 首先,要确保您的安企CMS系统已经开启了Markdown编辑功能

2025-11-09

如何自定义安企CMS网站的Title和Description以优化搜索引擎结果显示?

在当今竞争激烈的网络环境中,网站能否在搜索引擎中脱颖而出,很大程度上取决于其对细节的优化。其中,页面的Title(标题)和Description(描述)扮演着至关重要的角色,它们是网站呈现在搜索引擎结果页(SERP)上的“名片”。妥善自定义这些元素,不仅能帮助搜索引擎更好地理解页面内容,也能吸引潜在访客点击,从而提升网站的流量和可见度。安企CMS(AnQiCMS)作为一款功能强大的内容管理系统

2025-11-09

安企CMS如何实现多站点内容在前端的独立管理与统一展示?

在当今的数字时代,许多企业和内容运营者都会面临一个共同的挑战:如何高效管理多个品牌网站、产品子站或内容平台,既要保证每个站点独立运行,又能实现内容和资源的灵活整合?安企CMS正是为解决这一痛点而生,它提供了一套优雅且实用的解决方案,让多站点内容的独立管理与统一展示变得触手可及。 安企CMS的核心优势之一,便是其强大的多站点管理能力。当您需要运营多个网站时,例如一个企业官网

2025-11-09

如何利用安企CMS的灵活内容模型来展示不同类型的内容结构(如文章、产品、活动)?

安企CMS在内容管理方面提供了一项强大的核心能力,那就是其高度灵活的内容模型。这项功能使得我们能够根据网站的实际需求,自由定义和组织各种类型的内容,无论是传统的文章资讯、详细的产品介绍,还是时效性较强的活动发布,都能在同一系统内得到高效而有序的管理。它摆脱了传统CMS固定内容类型的束束缚,让我们能更专注于业务逻辑本身,而不是被系统框架所限制

2025-11-09

安企CMS如何配置和显示多语言内容,以满足不同地区用户的访问需求?

在全球化趋势下,网站若想触达更广泛的受众,提供多语言内容已成为一项基本需求。安企CMS(AnQiCMS)在设计之初就充分考虑了这一点,通过其强大的多站点管理和灵活的模板机制,为用户提供了配置和显示多语言内容的有效途径,以满足不同地区访问者的需求。 ### 理解安企CMS的多语言运作机制 在安企CMS中,多语言的实现主要分为两个层面:一是系统后台及前端界面的语言切换

2025-11-09