96SEO 2025-10-22 10:45 0
DedeCms作为国内极为流行的开源CMS,内置了丰富的自定义表单功能。其中, 联动类型是一种常用的数据选择方式,尤其适合地区、分类等多级依赖的数据展示。它通过枚举值关联实现动态选择,提升用户体验。
只是 在实际应用中,经常遇到的问题是:后台和前台显示的联动字段只呈现枚举值,而非对应的中文名称或选项内容。这给管理和用户带来困扰。本文将针对这一问题,深入讲解如何正确设置DedeCms联动类型,实现只显示枚举值勾选对应的中文名称。

先说说理解两个核心概念:
DedeCms内部存储时采用dede_sys_enum表保存所有枚举数据, 每条记录包括组别名、数值及对应显示文字。在自定义表单里使用联动字段时 数据库存入的是枚举值但后台和前台展示时默认直接输出的是该数字,这就导致了界面上出现数字而非中文名称的问题。
DedeCms在调用自定义表单数据时 如果未对该字段做特殊处理,就会直接输出数据库里的原始数据——即数值,而非转译后的文字。这主要体现在模板标签调用及后台列表页展示中。
dede_sys_enum是DedeCms管理所有“类别”“地区”“属性”等数据源的基础。要确保每一级别的数据均已正确添加, 比方说三级地区应该有省、市、区对应完整且规范的evalue及ename。否则后续无法正常转译显示。
SELECT evalue, ename FROM dede_sys_enum WHERE egroup='city' ORDER BY evalue ASC;
注意:dede_sys_enum中的evalue尽量保持格式统一,如:“10001.001”。不规范如“10001.1”可能导致程序无法正确匹配与转换。
DedeCms核心文件中存在一个函数Getenums,用于将evalue转换成ename,但其默认行为可能不支持复杂多级编码或存在BUG,需要我们优化此函数以便支持准确转换并返回完整文本信息。
解释:
DedeCMS自定义表单一般会调用类似以下代码渲染数据:
- 实操建议:
DedeCMS后台原生对自定义表单“联动”类型支持有限,往往只能看到数字或不友好的编码。不少开发者选择自行开发JS脚本或者修改后台模板, 实现勾选框仅显示预设好的可读中文列表,从而大大提升操作体验。常用技巧有:
| id | etype | ename | evalues |
|---|---|---|---|
| 1 | \city | \广东省 | \10000 | \
| 2 | \city | \广州市 | \10000.001 | \
| 3 | \city | \天河区 | \10000.001.001 | \
上述结构清晰映射省 - 市 - 区,每层均有唯一数值串作为索引,并且保证格式统一方便程序解析映射关系。
{field.city}
改为:
{php}$cityname=Getenums;{/php}
{$cityname}
这样即可让前端页面输出真正意义上的地区名称,而不是隐藏且难懂的数字编码。
Demand feedback