DEDE织梦cms常用的参数标签汇总、以及操作过程中的一些bug问题解决方法,dede网站二开,以下龙腾飞网络科技-小吴在建站实操中笔记记录,织梦dede建站教程保存使用非常方便:
【DEDE建站教程】织梦dede如何添加“自定义表单”实现反馈信息、在线留言、在线订购、在线报名系统及标签怎么调用
做一些提交信息到后台或发送到邮箱的功能,以便于收集、统计、分析及处理更多的数据。比如:在线订单、在线报名、在线留言、反馈信息、在线订购等一些常见的互动应用。
问题:织梦dede如何添加“自定义表单”实现反馈信息、在线留言、在线订购、在线报名系统及标签怎么调用?
解决方法:使用织梦自带的织梦自定义表单即可实现
1、自定义表单管理
后台管理 - 核心 - 频道模型 - 自定义表单 - 增加新的自定义表单
1)填写这个表单的名称——添加名称——公开审核过的——确认——建立了表单;
2)选择管理——修改——添加新字段——添加名称,代码;
这个待会会调用前台别人要填的项目(数据字段可用首拼,数据类型一般写单行文本或多行文本,可以选下拉)——确定——因为刚刚点了“选择公开审核过的”所以能够点该表单的管理——前台预览——新页面打开——发布信息——右键源代码;
以下代码就是表单的代码调用的单页面
把内容
{dede:field.content/}
改成或加上以下代码,调用好样式即可。
<form action="/plus/diy.php" enctype="multipart/form-data" method="post"> <input type="hidden" name="action" value="post" /> <input type="hidden" name="diyid" value="1" /> <input type="hidden" name="do" value="2" /> <table style="width:97%;" cellpadding="0" cellspacing="1"> <tr> <td align="right" valign="top">称呼:</td> <td><textarea name='ch' id='ch' style='width:90%;height:80'></textarea> </td> </tr> <tr> <td align="right" valign="top">电话:</td> <td><input type='text' name='dh' id='dh' style='width:250px' class='intxt' value='' /> </td> </tr> <tr> <td align="right" valign="top">备注:</td> <td><textarea name='bz' id='bz' style='width:90%;height:80'></textarea> </td> </tr> <input type="hidden" name="dede_fields" value="ch,multitext;dh,text;bz,multitext" /> <input type="hidden" name="dede_fieldshash" value="48611872c03062c5f0bd2cafdf2ab5fc" /></table> <div align='center' style='height:30px;padding-top:10px;'> <input type="submit" name="submit" value="提 交" class='coolbg' /> <input type="reset" name="reset" value="重 置" class='coolbg' /> </div> </form>
如果已有表单,提取以下“value”编号即可
<input type="hidden" name="dede_fieldshash" value="a1cc2ff79b9607eb3a3aa3b48f91b8a7" />
修改后,可以选择屏蔽掉“公开审核过的”,选择[不公开],即使选错审核了也不会在前台公开。
还有就怎样把留言的信息调用出来,上面明白搞出来,下面就简单了。
{dede:loop table='dede_diyform1' sort='' row='10' if=''} <a href='[field:dosxp/]' target="_blank">[field:ainixp/]</a> {/dede:loop} 'dede_diyform1' 是要调用的表的名称 [field:dosxp/] 是你添加的表的字段名称
要想无需审核,提交之后立刻显示,在增加新表单的“前台列表和内容页公开——”选项——完全公开”
【后续问题一】dedecms自定义表单提交成功如何返回当前页面
解决方法一:
自定义表单的数据,是提交到dedecms自带的plug下的diy.php文件进行处理,
$bkmsg = '发布成功,请等待管理员处理…';
这里修改提交成功的信息。
plus/diy.php自带的代码,需要在
$bkmsg = '发布成功,请等待管理员处理…';
这后面添加一段代码让他返回到当前页面,代码是
echo "<script>alert('提交成功!'); history.go(-1)</script>";
这样添加过后就可以了。
然后替换掉网站原来的文件,就可以实现表单提交过后返回当前页面。
最后的代码如下:
if($dsql->executenonequery($query)) { $id = $dsql->GetLastID(); if($diy->public == 2) { //diy.php?action=view&diyid={$diy->diyid}&id=$id $goto = "diy.php?action=list&diyid={$diy->diyid}"; $bkmsg = '发布成功,现在转向表单列表页…'; } else { $goto = !empty($cfg_cmspath) ? $cfg_cmspath : '/'; $bkmsg = '发布成功,请等待管理员处理…'; echo "<script>alert('提交成功!'); history.go(-1)</script>"; } showmsg($bkmsg, $goto); }
解决方法二:
打开 plus/diy.php 文件
找到
$goto = !empty($cfg_cmspath) ? $cfg_cmspath : '/'; $bkmsg = '发布成功,请等待管理员处理…'; showmsg($bkmsg, $goto);
改成
$goto = !empty($cfg_cmspath) ? $cfg_cmspath : '/'; $bkmsg = '发布成功,请等待管理员处理…'; showmsg($bkmsg, -1);
【后续问题二】dede自定义表单防止多次提交
解决方法一:
if(!is_array($diyform)) { showmsg('自定义表单不存在', '-1'); exit(); }
再其下添加
//检测游客是否已经提交过表单 if(isset($_COOKIE['VOTE_MEMBER_IP'])) { if($_COOKIE['VOTE_MEMBER_IP'] == $_SERVER['REMOTE_ADDR']) { echo "<script>alert('您已经填写过表单啦!'); history.go(-1)</script>"; //*ShowMsg('您已经填写过表单啦','-1');//该项是直接跳到页面的,可能出现错误,可删除换成上面的代码*/ exit(); } else { setcookie('VOTE_MEMBER_IP',$_SERVER['REMOTE_ADDR'],time()*$row['spec']*3600,'/'); } } else { setcookie('VOTE_MEMBER_IP',$_SERVER['REMOTE_ADDR'],time()*$row['spec']*3600,'/'); }
此方法能够仿制初级用户重复提交,但是如果清除cookie的话还可以可以提交的。
解决方法二:测试后弹出已填过表单,同时也会再次弹出“提交成功”
根目录下的 /plus/diy.php 文件,大约在58行,
1、查找,修改成如下代码即可。
修改前:
if(!empty($dede_fields)) { $fieldarr = explode(';', $dede_fields);
修改后:
if(!empty($dede_fields)) { session_start(); $cur_ip=GetIP(); if($cur_ip==$_SESSION['form_ip']) { echo "<script>alert('您已经填写过表单啦!'); history.go(-1)</script>"; /*showmsg('Please do not repeat the submission','/',0,10000);exit;//会跳到另外一个页面,可删除*/ } else { $_SESSION['form_ip']=$cur_ip; }//防止表单重复提交 $fieldarr = explode(';', $dede_fields);
修改完成后,可以防止dede自定义表单被重复提交。
【后续问题】织梦(dedecms)自定义表单,“必填项”设置方法
解决方法:
1、打开 plus/diy.php 文件,在40行左右
查找:
$dede_fields = empty($dede_fields) ? '' : trim($dede_fields);
在下面加入代码:
//增加必填字段判断 if($required!=''){ if(preg_match('/,/', $required)) { $requireds = explode(',',$required); foreach($requireds as $field){ if($$field==''){ echo "<script>alert('带*号的为必填内容,请正确填写'); history.go(-1)</script>"; /*showMsg('带*号的为必填内容,请正确填写', '-1');//跳转到另外页面了,删掉这条代码*/ exit(); } } }else{ if($required==''){ echo "<script>alert('带*号的为必填内容,请正确填写'); history.go(-1)</script>"; /*showMsg('带*号的为必填内容,请正确填写', '-1');//跳转到另外页面了,删掉这条代码*/ exit(); } } } //end
2、在表单页面找到这行代码
<form action="/plus/diy.php" enctype="multipart/form-data" method="post">
在下面加入代码:
<input type="hidden" name="required" value="数据字段名,数据字段名" />
注意这行代码要修改下,根据你的表单所需要设置的必填项,
例如:设置“姓名”、“邮箱”为必填项。
添加新字段--“表单提示文字”:姓名--“字段名称”:name
添加新字段--“表单提示文字”:邮箱--“字段名称”:email
此行代码应为:
<input type="hidden" name="required" value="name,email" />
这样就把这两个选项设置为必填项了。
如果没有填写就提交,会打开窗口提示“带*号的为必填内容,请正确填写”,这一句话可以改成其它的文字。