重庆seo2021-04-16 14:37:57阅读()A+ / A-
DedeCMS做表单比较方便,各种自定义字段都有预设:文字、整数、小数、下拉选择、HTML等,大家可以根据自己的需要选择。
织梦比较特殊的是各地区联动,这些地区保存到数据表上是以数字表示而不是具体某个地区。目前有两种方法,有需求的朋友可以参考修改。
分别增加如下自定义字段,数据类型全部为文本,如下
省份,s_province 城市,s_city 地区,s_county
在所需要用到的模板加入如下代码
<script type="text/javascript" src="/js/area.js"></script> <select class="input w100" id="s_province" name="s_province"> <option value="省份">省份</option> </select> <select class="input w100" id="s_city" name="s_city"> <option value="城市">城市</option> </select> <select class="input w100" id="s_county" name="s_county"> <option value="地区">地区</option> </select> <script type="text/javascript">_init_area();</script>
上面用到的area.js下载链接如下,根据自己的要求放到指定的文件夹下即可。
下载链接: https://pan.baidu.com/s/18V-6sEE1MMqazch1-g-Q_w 提取码: stbm
注:经笔者测试放在系统默认的发布表单页面(如:/plus/diy.php?action=post&diyid=1)失效,放在网页模板里可正常使用。
这样在表单列表里看到的就是中文地名而不是显示枚举值(数字)。网上还有用系统自带的联动模型修改,个人感觉修改比较多,根据需要选择。
打开/dede/templets/diy_field_add.htm,大概在146行,可以看到已经被注释了,修改为:
<div class='nw'><input type='radio' class='np' name='dtype' id='dtype16' value="stepselect">联动类型</div>
这样前台就能看到数据类型为联动类型的选择了。这个字段实际上是系统自带的,因此字段名字必须是nativeplace,如下所示:
至此地区联动已经正常使用了,接下来修改表单列表上显示正确的中文地区名。
打开/dede/templets/diy_list.htm,大约在41行,找到
else if($fielddata[1]=='addon') { $fields[$field] = "<a href='{$fields[$field]}' target='_blank'><img src='images/channeladd.gif' border='0' /> 其它附件</a>"; }
在上面加入如下代码段,复制时“分隔符”请自行删除。
//联动类型显示修正开始
else if($fielddata[1]=='stepselect')
{
$db->Execute('me',"SELECT * FROM `#分隔符@__stepselect` WHERE egroup='{$field}'");
while($arr = $db->GetArray(me))
{
$egroup = $arr['egroup'];
}
$fields[$field] = Getenums("{$fields[$field]}",$egroup);
}
//联动类型显示修正结束
继续找到
{/dede:datalist}
下面加入代码段
<?php 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 = preg_replace('/(?<=\.)[0]+/', '', $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]; } } } } ?>
至此修改完毕,最终效果如下
黑龙江省 - 伊春市 - 金山屯区
有些朋友会增加一些表单发送到指定邮箱《DedeCMS用PHPMailer自定义表单发送到QQ邮箱》,建议采用第一种方法,不然发送到邮箱的还是枚举值(数字)。
本文地址:https://www.vi586.com/web/769.html
版权声明:原创文章,版权归重庆SEO吖七所有,欢迎分享本文,支持原创,转载请保留出处