织梦DedeCMS自定义函数Getenums实现枚举值调用方法
在织梦DedeCMS开发过程中,经常需要调用自定义表单中的枚举类型字段。通过修改核心文件添加自定义函数,可以轻松实现枚举值的解析与输出。以下为具体实现步骤。
第一步:打开核心函数文件
使用文本编辑器打开织梦CMS根目录下的
/include/extend.func.php
文件。该文件用于存放用户自定义的扩展函数,修改后不会影响系统升级。
第二步:添加Getenums函数代码
在文件末尾另起一行,粘贴以下PHP函数代码:
if(!function_exists('Getenums'))
{
function Getenums($evalue=0,$egroup)
{
if( !isset($GLOBALS['em_'.$egroup.'s']) )
{
$cachefile = DEDEDATA.'/enums/'.$egroup.'.php';
if(!file_exists($cachefile))
{
require_once(DEDEINC.'/enums.func.php');
WriteEnumsCache();
}
if(!file_exists($cachefile))
{
return '';
}
else
{
require_once($cachefile);
}
}
if($evalue>=500)
{
if($evalue % 500 == 0)
{
return (isset($GLOBALS['em_'.$egroup.'s'][$evalue]) ? $GLOBALS['em_'.$egroup.'s'][$evalue] : '');
}
else if (preg_match("#([0-9]{1,})\.([0-9]{1,})#", $evalue, $matchs))
{
$esonvalue = $matchs[1];
$etopvalue = $esonvalue - ($esonvalue % 500);
$esecvalue = $evalue;
$GLOBALS['em_'.$egroup.'s'][$etopvalue] = empty($GLOBALS['em_'.$egroup.'s'][$etopvalue])? '' : $GLOBALS['em_'.$egroup.'s'][$etopvalue];
$GLOBALS['em_'.$egroup.'s'][$esonvalue] = empty($GLOBALS['em_'.$egroup.'s'][$esonvalue])? '' : $GLOBALS['em_'.$egroup.'s'][$esonvalue];
$GLOBALS['em_'.$egroup.'s'][$esecvalue] = empty($GLOBALS['em_'.$egroup.'s'][$esecvalue])? '' : $GLOBALS['em_'.$egroup.'s'][$esecvalue];
return $GLOBALS['em_'.$egroup.'s'][$etopvalue].' -- '.$GLOBALS['em_'.$egroup.'s'][$esonvalue].' -- '.$GLOBALS['em_'.$egroup.'s'][$esecvalue];
}
else
{
$elimit = $evalue % 500;
$erevalue = $evalue - $elimit;
$GLOBALS['em_'.$egroup.'s'][$erevalue] = empty($GLOBALS['em_'.$egroup.'s'][$erevalue])? '' : $GLOBALS['em_'.$egroup.'s'][$erevalue];
$GLOBALS['em_'.$egroup.'s'][$evalue] = empty($GLOBALS['em_'.$egroup.'s'][$evalue])? '' : $GLOBALS['em_'.$egroup.'s'][$evalue];
return $GLOBALS['em_'.$egroup.'s'][$erevalue].' -- '.$GLOBALS['em_'.$egroup.'s'][$evalue];
}
}
}
保存文件后,该函数即可在模板中全局调用。
第三步:在模板中调用Getenums函数
在需要显示枚举值的地方,使用织梦的loop标签配合自定义函数进行调用。以下为典型调用示例:
{dede:loop table=dede_diyform2 row=10}
地区:[field:nativeplace function=Getenums(@me,'nativeplace')/]
行业:[field:vocation function=Getenums(@me,'vocation')/]
信息类型:[field:infotype function=Getenums(@me,'infotype')/]
{/dede:loop}
函数参数说明
Getenums函数包含两个参数:第一个参数
@me
代表当前字段存储的数字值;第二个参数
'nativeplace'
代表枚举组的名称,需与后台自定义表单中设置的枚举组名完全一致。函数会自动读取系统枚举缓存,将数字ID转换为对应的中文名称。
注意事项
确保枚举组名与后台添加的枚举组名称完全匹配,包括大小写。如果枚举缓存文件不存在,函数会自动调用系统函数生成缓存。该函数支持多级枚举值的解析,当数值大于500时会自动处理层级关系。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
