在安企CMS中,高效地管理和展示网站内容是运营成功的关键。侧边栏作为网站的重要导航区域,常常需要展示清晰的分类结构,以引导用户快速找到所需信息。当您希望在侧边栏显示所有分类,并且对于 categoryList 标签的 all=true 参数感到疑惑时,这正是我们今天将深入探讨的主题。

安企CMS中的分类管理:内容的骨架

在安企CMS中,分类是组织网站内容的骨架。无论是文章、产品还是其他自定义内容模型,它们都通过分类进行归类和管理。这种结构不仅有助于网站内容的清晰呈现,也为搜索引擎优化(SEO)打下了良好的基础。每个分类都可以有自己的名称、简介、图片,甚至支持多级嵌套,形成丰富的层级结构。

categoryList 标签初探:灵活的分类调用工具

为了在网站前端灵活地展示这些分类,安企CMS提供了功能强大的 categoryList 模板标签。这个标签允许您根据不同的需求,调用特定模型下、特定父级下的分类列表。它的语法简洁而富有表现力,与 Django 模板引擎类似,让模板开发者能够轻松上手。

通常情况下,我们可能会这样使用 categoryList 标签来获取某个内容模型下的顶级分类:

{% categoryList categories with moduleId="1" parentId="0" %}
    {# 循环输出顶级文章分类 #}
    {% for item in categories %}
        <li><a href="{{ item.Link }}">{{ item.Title }}</a></li>
    {% endfor %}
{% endcategoryList %}

这里 moduleId="1" 指定了文章模型,parentId="0" 则表示只获取没有上级分类的顶级分类。但有时,我们的需求不仅仅是顶级分类,而是希望获取所有分类,无论它们处于哪个层级,或者属于哪个父级分类。这时,all=true 参数就显得尤为重要了。

all=true:解锁全部分类显示

all=true 参数是 categoryList 标签的一个强大修饰符,它的核心作用是忽略 parentId 属性的限制,获取所有符合条件的分类列表

想象一下,如果您的网站有复杂的分类层级,例如:

  • 新闻中心
    • 国内新闻
    • 国际新闻
  • 产品展示
    • 电子产品
      • 手机
      • 电脑
    • 家居用品

如果您使用 parentId="0",只能获取到“新闻中心”和“产品展示”这两个顶级分类。但如果您希望侧边栏展示一个扁平化的所有分类列表,或者需要获取所有分类以便在模板中进行自定义的层级构建,那么 all=true 就是您的不二之选。

all=true 被设置时:

  1. 它会获取指定模型(如果 moduleId 也被设置)下的所有分类。 这意味着,无论分类是顶级、二级还是三级,都会被包含在返回的 categories 变量中。
  2. 如果未指定 moduleId,它将尝试获取所有内容模型下的所有分类。 这种情况下,您会得到一个包含网站所有分类的庞大列表。

侧边栏实战:显示所有分类

现在,让我们通过一个实际的例子,看看如何在侧边栏中使用 all=true 来显示所有分类。假设我们想在侧边栏展示所有文章分类,形成一个简单的、可点击的列表。

您可以在模板文件的侧边栏部分(例如 partial/sidebar.html 或您自定义的侧边栏模板)添加以下代码:

<div class="sidebar-categories">
    <h3>所有分类</h3>
    <ul>
        {% categoryList allCategories with moduleId="1" all=true %}
            {% for item in allCategories %}
                <li class="category-item-{{ item.Id }}">
                    <a href="{{ item.Link }}" title="{{ item.Title }}">
                        {{ item.Title }}
                    </a>
                </li>
            {% empty %}
                <li>暂无分类。</li>
            {% endfor %}
        {% endcategoryList %}
    </ul>
</div>

代码解析:

  • {% categoryList allCategories with moduleId="1" all=true %}:这是核心部分。
    • allCategories:我们为返回的分类列表指定了一个变量名,您可以根据喜好自定义。
    • moduleId="1":这里我们明确指定了只获取 文章模型 下的所有分类(通常文章模型的 ID 是 1,如果您的系统设置有不同,请相应调整)。如果您希望获取所有内容模型下的所有分类,可以省略 moduleId 参数。
    • all=true:正是这个参数告诉安企CMS,请返回所有符合条件的分类,而不仅仅是顶级分类或当前分类的子分类。
  • {% for item in allCategories %}:我们遍历 allCategories 变量中获取到的每一个分类。
  • {{ item.Link }}:这会输出分类的访问链接。
  • {{ item.Title }}:这会输出分类的名称。
  • {% empty %}:这是一个非常实用的特性,当 allCategories 列表为空时,会显示“暂无分类。”这条信息,避免页面空白。

通过这段代码,您的侧边栏将呈现一个包含所有文章分类的列表。每个分类都将是可点击的链接,直接跳转到该分类下的内容列表页。

深入理解 all=true 的组合使用

  • moduleId 结合的精确控制: 正如实战示例所示,all=truemoduleId 参数结合使用时,能够帮助您精确地获取某个特定内容模型下的所有分类。这在您网站内容结构复杂,需要分别展示不同模型分类时非常有用,例如在一个侧边栏显示所有文章分类,在另一个侧边栏显示所有产品分类。

  • parentId 的“覆盖”效果:all=true 启用时,parentId 参数将不再对初始数据获取起作用。它会一次性将所有(或指定模型下的所有)分类拉取到模板变量中。如果您需要在此基础上构建多级嵌套的侧边栏,您将需要编写更复杂的模板逻辑来根据 item.ParentId 属性手动构建层级关系,或者在循环中再次调用 categoryList(但不使用 all=true)来获取子分类。但对于仅仅展示所有分类的列表而言,all=true 是最直接高效的方式。

  • 潜在的性能考量: 虽然 all=true 提供了极大的便利,但如果您的网站拥有成千上万的分类,一次性获取所有分类可能会对性能产生轻微影响。不过对于大多数中小企业网站而言,这种影响微乎其微,安企CMS高效的Go语言后端通常能够轻松应对。即便如此,在设计大型网站时,仍建议根据实际需求,权衡便利性与性能。

###