SEO技术

SEO技术

Products

当前位置:首页 > SEO技术 >

DedeCms联动类型如何设置只显示枚举值勾选技巧?

96SEO 2025-10-22 10:45 0


DedeCms联动类型概述

DedeCms作为国内极为流行的开源CMS,内置了丰富的自定义表单功能。其中, 联动类型是一种常用的数据选择方式,尤其适合地区、分类等多级依赖的数据展示。它通过枚举值关联实现动态选择,提升用户体验。

只是 在实际应用中,经常遇到的问题是:后台和前台显示的联动字段只呈现枚举值,而非对应的中文名称或选项内容。这给管理和用户带来困扰。本文将针对这一问题,深入讲解如何正确设置DedeCms联动类型,实现只显示枚举值勾选对应的中文名称。

DedeCms自定义表单联动类型只显示枚举值的问题

DedeCms中“联动类型”与“枚举值”的关系解析

先说说理解两个核心概念:

  • 枚举值:系统内部存储的标识符, 一般是数字或编码,比如“10001.001”,代表某个具体项。
  • 联动类型:基于“枚举表”数据构建的多级联动菜单,比如省-市-区三级城市选择。

DedeCms内部存储时采用dede_sys_enum表保存所有枚举数据, 每条记录包括组别名、数值及对应显示文字。在自定义表单里使用联动字段时 数据库存入的是枚举值但后台和前台展示时默认直接输出的是该数字,这就导致了界面上出现数字而非中文名称的问题。

为何默认只显示枚举值?

DedeCms在调用自定义表单数据时 如果未对该字段做特殊处理,就会直接输出数据库里的原始数据——即数值,而非转译后的文字。这主要体现在模板标签调用及后台列表页展示中。

DedeCms设置联动类型实现只显示中文名称详细步骤

1. 确认dede_sys_enum表中正确配置枚举数据

dede_sys_enum是DedeCms管理所有“类别”“地区”“属性”等数据源的基础。要确保每一级别的数据均已正确添加, 比方说三级地区应该有省、市、区对应完整且规范的evalue及ename。否则后续无法正常转译显示。

示例SQL查询三级城市枚举:

SELECT evalue, ename FROM dede_sys_enum WHERE egroup='city' ORDER BY evalue ASC;

注意:dede_sys_enum中的evalue尽量保持格式统一,如:“10001.001”。不规范如“10001.1”可能导致程序无法正确匹配与转换。

2. 修改/GetEnums函数, 实现根据evalue获取对应ename文本

DedeCms核心文件中存在一个函数Getenums,用于将evalue转换成ename,但其默认行为可能不支持复杂多级编码或存在BUG,需要我们优化此函数以便支持准确转换并返回完整文本信息。


解释:

  • 判断缓存是否存在 不存在则生成并加载;
  • 根据不同格式处理多级编码,如"10001.001"拆解返回完整字符串;
  • 保证即使是复杂的三段式编码,也能正确显示相应文字;
  • null或未找到返回空字符串避免报错;
  • - 注意:这是示意代码,根据版本调整路径与逻辑细节。

3. 在自定义表单模板diy_文件夹下修改模板代码实现调用Getenums函数渲染文字内容

DedeCMS自定义表单一般会调用类似以下代码渲染数据:


- 实操建议:

  • IDE或FTP定位到 /templets/diy_目录下相应模板文件;
  • $egroup参数必须与dede_sys_enum中的组别名一致;

4. 后台管理界面调整, 让管理员只看到可选中文名称勾选框而非纯数字

DedeCMS后台原生对自定义表单“联动”类型支持有限,往往只能看到数字或不友好的编码。不少开发者选择自行开发JS脚本或者修改后台模板, 实现勾选框仅显示预设好的可读中文列表,从而大大提升操作体验。常用技巧有:

  • 将原本渲染select或input改为动态加载对应组别所有ename做options供管理员勾选, 并传回其对应enum_value;
  • 当管理员点击某个类别时由AJAX请求获得JSON格式全套分类列表,自动生成勾选项;
  • 避免管理员因误操作录入不存在或者非法码,提高数据质量与平安性;

DedeCms实际案例演示:三级地区联动只显示中文名称实操详解

第一步:准备三级地区完整dede_sys_enum记录

\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \
id etype ename evalues
1 city 广东省 10000
2 city 广州市 10000.001
3 city 天河区 10000.001.001

上述结构清晰映射省 - 市 - 区,每层均有唯一数值串作为索引,并且保证格式统一方便程序解析映射关系。

第二步:修改/Getenums方法支持三级解析及优化缓存载入机制 。确保每次系统调用都是最新缓存,不会出现读取错误情况。注重兼容官方升级版本差异进行备份比对后再覆盖替换!

第三步:修改前端页面/后台列表页模版,将output从纯数字变更成Getenums函数返回后来啊。 比方说在templets/diy_list.htm里 将:

{field.city}

改为:

{php}$cityname=Getenums;{/php}
{$cityname}

这样即可让前端页面输出真正意义上的地区名称,而不是隐藏且难懂的数字编码。



提交需求或反馈

Demand feedback