- 理解联动类别的原理
- 如何手动创建和配置联动类别
- 如何在模板和内容页中调用联动类别
第一部分:理解联动类别的原理
织梦的联动类别主要由三个部分组成:

-
后台数据表:
#@sys_enum:这是核心表,用来存储所有的联动类别项,它包含以下关键字段:enid:项目ID(主键)。evalue:项目值,通常用于表单提交和数据库存储。ename:项目名称,这是用户在前端看到的名字。egroup:组名,用于区分不同的联动类别,所有地区相关的项egroup都可能是nativeplace,所有学历相关的项egroup都可能是education。orderkey:排序,决定项目在前端的显示顺序。
-
后台管理:
- 在织梦后台,有一个专门的“联动类别”管理模块,你可以在这里添加、修改、删除不同组(
egroup)下的项目。
- 在织梦后台,有一个专门的“联动类别”管理模块,你可以在这里添加、修改、删除不同组(
-
前端调用:
- 织梦提供了专门的标签
{dede:enum}来遍历和显示联动类别,你可以通过指定group参数来调用不同的联动类别组。 - 模型中,你可以将一个字段设置为“联动类型”,这样在前台发布内容时,就会自动生成一个下拉选择框(或多级联动菜单),数据来源于你配置好的
egroup。
- 织梦提供了专门的标签
第二部分:如何手动创建和配置联动类别
假设我们要创建一个“职位”联动类别,结构为:技术 -> 前端开发, 后端开发, 运维。

步骤 1:进入联动类别管理
登录织梦后台,找到菜单栏的 【核心】 -> 【联动类别】,点击进入。
步骤 2:添加新的联动类别组
- 在联动类别管理页面,点击右上角的 【增加联动类别】 按钮。
- 在弹出的表单中填写信息:
- 组名:
jobposition(这个是唯一的标识符,在模板调用时需要用到,建议用英文或拼音,不要用中文和特殊符号)。 - 组别名称:
职位(这个是后台显示的名称,可以中文)。 - 是否启用:选择“是”。
- 内容显示格式:可以选择“下拉列表”或“多级联动”,对于职位这种层级不深的,下拉列表就足够了,如果像“省/市/区”这种多级,就选“多级联动”。
- 枚举值:这里暂时不填,我们先保存这个组。
- 组名:
- 点击 【确定】,一个名为
jobposition的联动类别组已经创建好了,但它里面还没有任何数据项。
步骤 3:向联动类别组中添加数据项
-
回到“联动类别”管理列表页面,你应该能看到刚才创建的
职位组。 -
点击该组所在行的 【管理】 或 【增加项目】。
-
现在开始添加数据:
(图片来源网络,侵删)- 添加一级项“技术”:
- 在“枚举值”输入框中输入:
技术(这里的ename是显示名) - 在“枚举值”输入框旁边的“值”输入框中输入:
tech(这里的evalue是存储值,最好用英文) - 点击 【新增】 按钮。
- 在“枚举值”输入框中输入:
- 添加二级项“前端开发”:
- 在“枚举值”输入框中输入:
前端开发 - 在“值”输入框中输入:
frontend - 关键一步:在“父id”下拉框中选择
技术对应的ID(通常是1,因为它是第一个)。 - 点击 【新增】 按钮。
- 在“枚举值”输入框中输入:
- 添加二级项“后端开发”:
- 在“枚举值”输入框中输入:
后端开发 - 在“值”输入框中输入:
backend - 在“父id”下拉框中选择
技术对应的ID。 - 点击 【新增】 按钮。
- 在“枚举值”输入框中输入:
- 添加二级项“运维”:
- 在“枚举值”输入框中输入:
运维 - 在“值”输入框中输入:
devops - 在“父id”下拉框中选择
技术对应的ID。 - 点击 【新增】 按钮。
- 在“枚举值”输入框中输入:
- 添加一级项“技术”:
-
调整顺序:你可以通过拖动项目或修改
orderkey字段来调整它们的显示顺序。
至此,后台的联动类别数据已经配置完成。#@sys_enum 表中已经插入了相应的数据。
第三部分:如何在模板和内容页中调用联动类别
联动类别的调用分为两种场景:在普通模板中调用 和 模型中作为字段调用。
在普通模板中调用(在“联系我们”页面显示职位选择)
假设你想在首页的某个位置直接展示一个职位选择的下拉菜单。
使用 标签解析: 这是联动类别的核心应用,让用户在发布内容时可以选择。 创建/修改内容模型 添加联动类型字段 更新缓存 页面查看效果 现在去发布一篇内容(文章、产品等),你应该能看到表单中多出了一个“职位”的下拉选择框,里面包含了我们配置的“前端开发”、“后端开发”等选项。 页模板中调用 一个更好的显示方法(推荐):
你可以在后台SQL查询 最直接的方法是,在发布内容时,用户选择的值是 对于大多数情况,直接显示存储值 通过以上步骤,你就可以熟练地在织梦CMS中创建和使用自定义联动类别了。{dede:enum}
<select name="jobposition">
<option value="0">请选择职位</option>
{dede:enum group='jobposition' type='son'}
<option value="[field:evalue/]">[field:ename/]</option>
{/dede:enum}
</select>
group='jobposition':指定调用我们刚才创建的“职位”联动类别组。type='son':这是一个重要参数,它表示只调用父级(技术)下的子级(前端开发等),如果省略type,则会调用该组下的所有顶级项(在这里就是“技术”),对于多级联动(如省市区),你需要使用 type='sun' 来获取所有子孙项。[field:evalue/]:输出该项的存储值(如 frontend)。[field:ename/]:输出该项的显示名称(如 前端开发)。模型中作为字段调用(最常用的方式)
jobposition (与后台egroup保持一致,方便调用)。职位 (前台显示的名称)。职位。
article_article.htm)。<p>您的职位是:{dede:field name='jobposition'/}</p>
{dede:field name='jobposition'} 输出的是 存储值(如 frontend)。前端开发),你需要使用自定义函数或修改系统文件(不推荐),一个更简单的方法是在发布内容时,手动将显示名也填入一个普通文本字段,或者使用更高级的二次开发。#@sys_enum表,根据存储值找到对应的显示名,但这在模板里比较麻烦。evalue,我们通过evalue去#@sys_enum表里查ename,织梦本身没有提供直接转换的标签,通常我们会通过修改arc.archives.class.php文件来实现,但这属于二次开发范畴。{dede:field name='jobposition'}也是可以接受的,只要前后端约定好即可。总结与最佳实践
egroup(组名)和字段名建议使用英文、数字或下划线,避免使用中文和特殊符号,以防出错。{dede:enum group='nativeplace' type='sun'}来获取所有层级的选项,并配合JavaScript实现动态联动效果。
