`categoryList`和`categoryDetail`标签如何获取分类列表及单项分类详情?

作为一名资深的安企CMS网站运营人员,我深知内容组织和呈现的灵活性对于吸引并留住用户是多么关键。网站的分类结构不仅是内容的骨架,更是用户探索和发现信息的重要路径。今天,我们就来深入探讨安企CMS中两个核心的模板标签——categoryListcategoryDetail,它们是如何帮助我们高效地获取和展示分类列表及单个分类详情的。

灵活构建分类导航:categoryList 标签的实战运用

在安企CMS中,categoryList 标签是您构建各种分类导航、内容聚合模块的强大工具。作为一名运营人员,我们深知网站导航和内容组织的清晰度对用户体验和搜索引擎优化至关重要。通过这个标签,您可以轻松地控制分类的展示层级、数量以及筛选条件,无论是文章、产品还是其他自定义内容模型,categoryList 都能精准地拉取到所需分类。

使用 categoryList 标签的基础语法是:{% categoryList 变量名称 with 参数... %}...{% endcategoryList %}。在这里,您可以将获取到的分类列表赋值给一个自定义变量,例如 categories,然后在标签内部通过循环来遍历这些分类数据。

categoryList 的核心参数及其运营价值

categoryList 提供了多种参数,让您可以精细化地控制所获取的分类数据,这在不同的运营场景下都显得尤为重要:

  • moduleId:指定内容模型 这个参数允许您明确指定希望获取哪种内容模型的分类列表。例如,设置 moduleId="1" 可以获取文章模型的分类,而 moduleId="2" 则可能对应产品模型。这对于运营多个内容模块的网站(如同时有新闻资讯和商品展示)来说,是保持内容清晰分离的关键。

  • parentId:控制分类层级 parentId 参数是构建分级导航的核心。在构建主导航时,我们通常只需要顶级的分类,这时设置 parentId="0" 就能满足需求。而在侧边栏或下拉菜单中,我们可能需要显示某个特定分类下的子分类,此时通过将 parentId 设置为目标分类的ID,即可轻松实现。甚至,当我们需要在特定分类页面展示其同级分类时,parentId="parent" 的灵活性便显现出来,它会自动识别当前分类的父级,并获取其下的所有兄弟分类,对于优化用户体验和内部链接结构非常有帮助。

  • all:获取所有分类 当您需要一次性获取所有分类,而不考虑其层级或父子关系时,例如在网站的分类归档页面或站点地图生成中,all=true 会非常实用。如果同时指定了 moduleId,它将获取指定模型下的所有分类。

  • limit:限制显示数量 在首页或侧边栏等位置,我们往往不希望展示过多的分类,以免信息过载。limit="10" 这样的设置可以帮助您控制显示数量。此外,它还支持 offset 模式,例如 limit="2,10" 可以从第三个分类开始获取十条数据,这在某些特殊的布局需求下非常灵活。

  • siteId:多站点数据调用 对于那些在安企CMS中管理多个站点的运营者来说,siteId 参数是实现跨站点数据调用的关键。您可以指定 siteId 来获取其他站点下的分类数据,这在构建内容联盟或共享资源时提供了极大的便利。

遍历和展示分类数据

当您通过 categoryList 获取到分类列表并赋值给一个变量(例如 categories)后,就可以使用 for 循环来遍历这些分类,并使用 item 变量访问每个分类的详细信息。item 变量包含了丰富的分类字段,例如:

  • Id:分类的唯一标识ID。
  • Title:分类的显示名称。
  • Link:分类的访问链接,这是构建导航和内容跳转的基础。
  • Description:分类的简短描述,常常用于提升SEO效果或作为导航的补充说明。
  • Content:分类的详细介绍内容。
  • ParentId:分类的父级ID,用于判断层级关系。
  • Logo / Thumb:分类的图片或缩略图,可用于视觉化导航或分类页面的小型Banner。
  • HasChildren:一个布尔值,指示该分类是否有子分类,这对于动态生成菜单结构非常有用。
  • ArchiveCount:该分类下包含的文档数量,可以直观地向用户展示分类内容的丰富程度。

代码示例:构建多级分类导航

以下示例展示了如何构建一个最多三级的分类导航,这对于电商网站的产品分类或资讯网站的栏目结构非常实用。

{% categoryList categories with moduleId="1" parentId="0" %}
{# 一级分类 #}
<ul>
    {% for item in categories %}
    <li>
        <a href="{{ item.Link }}">{{item.Title}}</a>
        <div>
            {% categoryList subCategories with parentId=item.Id %}
            {# 二级分类 #}
            <ul>
                {% for inner1 in subCategories %}
                <li>
                    <a href="{{ inner1.Link }}">{{inner1.Title}}</a>
                    <div>
                        {% categoryList subCategories2 with parentId=inner1.Id %}
                        {# 三级分类 #}
                        <ul>
                            {% for inner2 in subCategories2 %}
                            <li>
                                <a href="{{ inner2.Link }}">{{inner2.Title}}</a>
                            </li>
                            {% endfor %}
                        </ul>
                        {% endcategoryList %}
                    </div>
                </li>
                {% endfor %}
            </ul>
            {% endcategoryList %}
        </div>
    </li>
    {% endfor %}
</ul>
{% endcategoryList %}

这个示例通过嵌套的 categoryList 标签,实现了多层级分类的展示。HasChildren 字段在这里虽然没有直接使用,但在更复杂的动态菜单逻辑中,它能帮助您判断是否需要渲染子菜单。

精准呈现分类详情:categoryDetail 标签的细致解析

当我们希望在某个分类页面展示其自身的详细信息,或者在文档详情页调用其所属分类的完整数据时,categoryDetail 标签便是不可或缺的工具。它能够帮助我们获取单个分类的所有元数据,从而构建出更丰富、更具吸引力的分类页面。

categoryDetail 标签的基础用法是:{% categoryDetail 变量名称 with name="字段名称" id="1" %}。与 categoryList 类似,您可以将获取到的单个分类数据赋值给一个变量,或者直接通过 name 参数获取特定字段的值。

categoryDetail 的核心参数

categoryDetail 的参数设计专注于获取特定分类的详情:

  • idtoken:精确指定分类 默认情况下,当您在分类页面使用此标签时,它会自动识别当前分类。但若您需要获取其他特定分类的信息,通过指定其 id(分类ID)或 token(URL别名)便可精确调用。token 在伪静态URL中尤其有用,可以直接通过分类别名来获取数据。

  • siteId:多站点数据调用categoryList 相同,siteId 参数也支持在多站点环境中调用其他站点的分类详情。

获取和展示分类的详细信息

categoryDetail 标签主要通过 name 参数来指定要获取的分类字段。可用的字段包括:

  • IdTitleLinkDescriptionParentIdArchiveCount:这些字段与 categoryList 中的 item 字段类似,用于获取基本信息、URL和内容统计。
  • Content:分类的详细内容 这个字段包含了您在后台编辑分类时填写的丰富文本内容。它支持Markdown渲染,如果您的分类内容是Markdown格式,可以通过设置 render=true 自动转换为HTML。
  • Logo / Thumb:分类的封面图或缩略图 这两个字段通常用于在分类页面顶部展示醒目的图片,作为视觉引导。Logo 可能用于更大的 Banner 图,而 Thumb 则可能是其缩略版本。
  • **Images:分类的Banner