驾驭安企CMS categoryList 标签:如何高效获取指定模型与上级分类下的子分类

在安企CMS(AnQiCMS)的日常运营中,内容分类是网站结构的核心,它不仅关系到用户浏览体验的流畅性,更是搜索引擎优化(SEO)不可忽视的关键环节。为了帮助大家更好地管理和展示网站内容,今天我们就深入探讨安企CMS中一个极为实用且功能强大的模板标签——categoryList,特别是如何运用它来获取指定内容模型或特定上级分类下的子分类列表。

安企CMS以其基于Go语言的高效架构和灵活的内容模型设计,为中小企业和内容运营团队提供了极佳的内容管理解决方案。理解并善用categoryList标签,将能助您构建出更加动态、可扩展的网站导航和内容结构。

categoryList 标签概览:内容结构的基础

categoryList 标签的主要作用是帮助我们从数据库中提取分类数据,并以列表的形式在前端页面展示。它遵循Django模板引擎的语法风格,通过简洁的参数配置,就能实现多种复杂的分类数据调用需求。

最基础的categoryList使用方式通常是这样的:

{% categoryList categories with moduleId="1" parentId="0" %}
    {# 在这里循环输出分类信息 #}
{% endcategoryList %}

在这里,categories是我们定义的一个变量名,用于存储获取到的分类列表数据。接下来的内容,我们将详细解析如何通过moduleIdparentId这两个核心参数,精准地获取我们想要的子分类数据。

精确定位分类数据:核心参数解析

要获取指定内容模型或特定上级分类下的子分类,categoryList标签提供了两个至关重要的参数:moduleIdparentId

一、指定内容模型:moduleId的力量

安企CMS的一大亮点是其“灵活的内容模型”功能,这意味着您可以根据业务需求创建不同的内容类型,如“文章”、“产品”、“活动”等。每个内容模型都会有自己独立的分类体系。当您需要获取某一特定内容模型下的分类时,moduleId参数就派上了用场。

例如,如果您想在页面上展示“文章”模型下的所有顶级分类,您需要首先知道“文章”模型对应的moduleId(通常在后台内容模型管理中可以查看到,系统默认文章模型ID一般为1,产品模型ID为2)。然后,您可以这样使用moduleId

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

在这段代码中,moduleId="1"明确告诉系统,我们只关注ID为1(即文章模型)的分类数据。如果您不指定moduleId,系统可能会尝试获取所有模型下的分类,这在某些特定场景下可能会导致数据混淆或不符合预期。

二、获取上级分类下的子分类:parentId的灵活运用

网站的分类结构往往是多层级的,例如“新闻中心”下可能有“公司新闻”、“行业动态”等子分类。parentId参数正是用来控制您想要获取哪个层级的子分类。

  1. 获取顶级分类: 当您想获取所有没有上级分类的顶级分类时,将parentId设置为"0"即可。

    {% categoryList topCategories with moduleId="1" parentId="0" %}
        {# 循环输出所有文章模型的顶级分类 #}
    {% endcategoryList %}
    
  2. 获取特定父分类的直接子分类: 这是最常见的应用场景之一。假设您已经在一个循环中获取了某个父分类(例如item),现在想在父分类下方列出它的直接子分类,您可以使用parentId=item.Id。这里的item.Id是外部循环中当前父分类的ID。

    {% categoryList mainCategories with moduleId="1" parentId="0" %}
        {% for parentItem in mainCategories %}
            <h3><a href="{{ parentItem.Link }}">{{ parentItem.Title }}</a></h3>
            <ul>
                {% categoryList subCategories with parentId=parentItem.Id %}
                    {% for childItem in subCategories %}
                        <li><a href="{{ childItem.Link }}">{{ childItem.Title }}</a></li>
                    {% endfor %}
                {% endcategoryList %}
            </ul>
        {% endfor %}
    {% endcategoryList %}
    

    这段代码首先获取所有文章模型的顶级分类,然后对每个顶级分类,再利用其ID作为parentId,获取其下一级的所有子分类。通过这种嵌套的方式,您可以轻松构建出多级导航菜单。

  3. 获取当前分类页面的直接子分类: 如果您当前正处于某个分类的列表页(例如“公司新闻”分类页),并且希望显示该分类下的直接子分类,您可以简单地省略parentId参数。系统会自动判断当前页面的分类ID,并获取其直接子分类。

    {# 假设当前页面是某个分类的列表页 #}
    {% categoryList currentSubCategories %}
        {% for item in currentSubCategories %}
            <li><a href="{{ item.Link }}">{{ item.Title }}</a></li>
        {% endfor %}
    {% endcategoryList %}
    
  4. 获取当前分类的兄弟分类(同级分类): 在某些情况下,您可能希望在某个分类页面显示与其同级的其他分类。这时,可以将parentId设置为"parent"。请注意,这个用法仅在您当前页面是分类详情或列表页时有效。

    {# 假设当前页面是某个分类的列表页 #}
    {% categoryList siblingCategories with parentId="parent" %}
        {% for item in siblingCategories %}
            <li><a href="{{ item.Link }}">{{ item.Title }}</a></li>
        {% endfor %}
    {% endcategoryList %}
    

实用技巧:构建灵活的导航与内容结构

理解了moduleIdparentId的用法,您就可以开始构建更加灵活多样的网站布局了。

  • 多级导航菜单: 结合for循环和item.HasChildren(判断当前分类是否有子分类)字段,您可以动态渲染出层级清晰的下拉菜单或侧边栏导航,极大地提升用户体验。

    ”`twig