如何获取特定内容模型(如文章、产品)下的分类列表?

作为一名资深的安企CMS网站运营人员,我深知内容组织和用户体验对于网站成功的重要性。精确地展示内容分类,不仅能帮助用户快速找到他们感兴趣的信息,也能提升网站的整体SEO表现。今天,我们将深入探讨如何在AnQiCMS中获取特定内容模型(如文章、产品)下的分类列表,这对于构建清晰的网站导航、内容聚合模块以及专题页面至关重要。

理解AnQiCMS的内容模型与分类体系

AnQiCMS在内容管理方面提供了极大的灵活性,其核心之一便是“灵活的内容模型”。这意味着您可以根据业务需求自定义内容类型,例如,除了默认的文章和产品模型外,还可以创建活动、案例等多种模型。这些内容模型是您网站内容的基础结构。

与内容模型紧密关联的是分类体系。在AnQiCMS中,每个分类都明确地属于一个且仅属于一个内容模型。这意味着当您创建一个“新闻”分类时,它可能被指定为属于“文章”模型;而一个“手机”分类则可能属于“产品”模型。这种设计确保了内容的高度组织性,避免了不同类型内容分类的混淆,使得内容管理和前端展示更为清晰高效。

利用categoryList标签获取分类列表

在AnQiCMS的模板设计中,categoryList标签是获取分类列表的核心工具。它允许您根据多种条件过滤和排序分类,其中最关键的参数之一就是moduleId,它让您能够精准地指定获取哪个内容模型下的分类。

要使用categoryList标签,您需要在模板文件中以以下基本格式进行调用:

{% categoryList 变量名称 with moduleId="模型ID" %}
    {# 循环输出分类数据 #}
    {% for item in 变量名称 %}
        <a href="{{ item.Link }}">{{ item.Title }}</a>
    {% endfor %}
{% endcategoryList %}

这里,变量名称是您为获取到的分类列表指定的任意名称,例如categoriesmoduleId参数则用于指定您希望获取分类列表的内容模型ID。

确定内容模型的ID

在AnQiCMS中,每个内容模型都有一个唯一的数字ID。通常,“文章模型”的ID默认为1,“产品模型”的ID默认为2,但这可能会根据您的系统配置或自定义模型的创建顺序有所不同。

要准确获取您内容模型的ID,您需要登录AnQiCMS的后台管理界面。在“内容管理”部分找到“内容模型”菜单。进入该页面后,您将看到所有已定义的内容模型及其详细信息,通常包括它们的ID。记录下您需要查询的“文章”或“产品”等模型的对应ID,以便在模板标签中使用。例如,如果您要获取“文章”模型下的分类,并且其ID是1,那么moduleId参数的值就应设为"1"

实际应用:获取文章和产品分类列表

掌握了moduleId的用法后,获取特定内容模型下的分类列表变得非常直接。

获取文章模型下的分类列表

假设您的“文章”模型ID为1,并且您希望显示顶级分类(即没有上级分类的分类),您可以在模板中这样调用:

<div class="article-categories">
    <h3>文章分类</h3>
    <ul>
        {% categoryList articleCategories with moduleId="1" parentId="0" %}
            {% for category in articleCategories %}
                <li><a href="{{ category.Link }}">{{ category.Title }}</a></li>
            {% endfor %}
        {% endcategoryList %}
    </ul>
</div>

这段代码会遍历所有属于文章模型的顶级分类,并以无序列表的形式显示它们的名称和链接。parentId="0"在这里的作用是限定只显示没有上级分类的顶级分类。

获取产品模型下的分类列表

同理,如果您的“产品”模型ID为2,您希望获取其下的所有分类(包括子分类),则可以这样实现:

<div class="product-categories">
    <h3>产品分类</h3>
    <ul>
        {% categoryList productCategories with moduleId="2" all=true %}
            {% for category in productCategories %}
                <li><a href="{{ category.Link }}">{{ category.Spacer | safe }}{{ category.Title }}</a></li>
            {% endfor %}
        {% endcategoryList %}
    </ul>
</div>

在这里,all=true参数指示categoryList标签获取指定模型下的所有分类,而不仅仅是顶级分类。{{ category.Spacer | safe }}用于在有层级关系的分类前添加缩进,以视觉上区分父子分类。

结合父级分类参数构建层级导航

除了moduleIdcategoryList标签还支持parentId参数,这对于构建多级分类导航非常有用。您可以先获取顶级分类,然后在每个顶级分类的循环内部,再次调用categoryList来获取其子分类。

<nav class="main-navigation">
    {% categoryList topLevelCategories with moduleId="1" parentId="0" %}
        <ul>
            {% for topCat in topLevelCategories %}
                <li>
                    <a href="{{ topCat.Link }}">{{ topCat.Title }}</a>
                    {% if topCat.HasChildren %}
                        <ul class="sub-categories">
                            {% categoryList subCategories with parentId=topCat.Id %}
                                {% for subCat in subCategories %}
                                    <li><a href="{{ subCat.Link }}">{{ subCat.Spacer | safe }}{{ subCat.Title }}</a></li>
                                {% endfor %}
                            {% endcategoryList %}
                        </ul>
                    {% endif %}
                </li>
            {% endfor %}
        </ul>
    {% endcategoryList %}
</nav>

这段代码首先获取文章模型下的所有顶级分类。对于每个顶级分类,如果它包含子分类(通过topCat.HasChildren判断),则会再次调用categoryList,并将当前顶级分类的ID作为parentId,以获取并显示其直接子分类。

运营人员的思考与**实践

作为网站运营者,有效地利用这些标签能够极大地简化网站的维护工作。例如,当您需要更新网站导航或在特定页面展示某个产品系列的分类时,无需手动修改HTML,只需在AnQiCMS后台调整分类结构,前端页面便会自动更新。

我们建议您在模板开发初期就规划好各个内容模型和分类的对应关系,并在后台清晰地命名分类,以便在使用categoryList标签时能快速定位所需的moduleIdparentId。同时,利用AnQiCMS的模块化设计,将常用的分类列表代码封装在局部模板中,通过include标签复用,可以进一步提高开发效率和代码的可维护性。

总而言之,AnQiCMS提供的categoryList标签及其moduleId参数,是网站运营人员和模板开发者高效管理和展示特定内容模型分类的强大工具。通过灵活运用,您可以构建出结构清晰、用户友好的内容展示界面,从而提升您的网站在内容营销和用户体验方面的表现。


常见问题解答 (FAQ)

1. 我如何在AnQiCMS后台找到具体内容模型的moduleId

要查找特定内容模型的ID,您可以登录AnQiCMS后台,导航至“内容管理”菜单下的“内容模型”页面。在该页面中,系统会列出所有已创建或内置的内容模型,通常每个模型都会有一个对应的数字ID。例如,“文章模型”通常是1,“产品模型”通常是2。如果无法直接看到ID,您可以尝试点击编辑某个模型,URL中可能会包含其ID,或者系统界面上会明确标注。

2. 我能否在同一个categoryList标签中显示来自不同内容模型的分类?

categoryList标签的设计是针对单一内容模型进行分类获取的,因此您不能在同一个categoryList标签中直接指定多个moduleId来获取混合分类。如果需要展示来自不同内容模型的分类,您应该为每个内容模型分别调用一次categoryList标签,然后将它们的结果在前端模板中进行组合或独立展示。

3. 如何确保我获取的分类列表只包含有内容的分类?

categoryList标签本身不提供直接过滤空分类的参数。如果您希望只显示包含文档的分类,您可以在for循环中,利用item.ArchiveCount属性进行判断。ArchiveCount表示该分类下所关联的文档数量。例如:

{% categoryList categories with moduleId="1" parentId="0" %}
    {% for category in categories %}
        {% if category.ArchiveCount > 0 %}
            <li><a href="{{ category.Link }}">{{ category.Title }} ({{ category.ArchiveCount }})</a></li>
        {% endif %}
    {% endfor %}
{% endcategoryList %}

这段代码将确保只有当分类下的文档数量大于0时,该分类才会被显示出来。