在安企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 被设置时:
- 它会获取指定模型(如果
moduleId也被设置)下的所有分类。 这意味着,无论分类是顶级、二级还是三级,都会被包含在返回的categories变量中。 - 如果未指定
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=true与moduleId参数结合使用时,能够帮助您精确地获取某个特定内容模型下的所有分类。这在您网站内容结构复杂,需要分别展示不同模型分类时非常有用,例如在一个侧边栏显示所有文章分类,在另一个侧边栏显示所有产品分类。对
parentId的“覆盖”效果: 当all=true启用时,parentId参数将不再对初始数据获取起作用。它会一次性将所有(或指定模型下的所有)分类拉取到模板变量中。如果您需要在此基础上构建多级嵌套的侧边栏,您将需要编写更复杂的模板逻辑来根据item.ParentId属性手动构建层级关系,或者在循环中再次调用categoryList(但不使用all=true)来获取子分类。但对于仅仅展示所有分类的列表而言,all=true是最直接高效的方式。潜在的性能考量: 虽然
all=true提供了极大的便利,但如果您的网站拥有成千上万的分类,一次性获取所有分类可能会对性能产生轻微影响。不过对于大多数中小企业网站而言,这种影响微乎其微,安企CMS高效的Go语言后端通常能够轻松应对。即便如此,在设计大型网站时,仍建议根据实际需求,权衡便利性与性能。
###