DEDE织梦教程

【DEDE】织梦dede如何添加“自定义表单”实现反馈信息、在线留言、在线订购、在线报名系统及标签怎么调用
时间: 2024-09-18 06:32:23 浏览次数:2
DEDE织梦cms常用的参数标签汇总、以及操作过程中的一些bug问题解决方法,dede网站二开,以下龙腾飞网络科技-小吴在建站实操中笔记记录,织梦dede建站教程保存使用非常方便:【DEDE建站教程】织梦dede如何添加“自定义表单”实现反馈信息、在线留言、在线订购、在线报名系统及标签怎么调用做一些提交信息到后台或发送到邮箱的

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' />
&nbsp;
<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-&gt;executenonequery($query))
{
$id = $dsql-&gt;GetLastID();
if($diy-&gt;public == 2)
{
//diy.php?action=view&amp;diyid={$diy-&gt;diyid}&amp;id=$id
$goto = "diy.php?action=list&amp;diyid={$diy-&gt;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" />

这样就把这两个选项设置为必填项了。


如果没有填写就提交,会打开窗口提示“带*号的为必填内容,请正确填写”,这一句话可以改成其它的文字。


系统开发专题地图
Copyright©2011 Guangzhou Longtengfei Network Technology Co., Ltd. 广州龙腾飞网络科技有限公司 粤ICP备18029205号 XML地图