织梦二次开发

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 670|回复: 0

[共用功能] 织梦“[增加新的自定义表单]”功能分析教程

[复制链接]

1046

主题

1109

帖子

5334

积分

超级版主

Rank: 8Rank: 8

金币
256
贡献
3959
发表于 2015-11-8 15:49:31 | 显示全部楼层 |阅读模式
  织梦系统dedecms“增加新的自定义表单”功能指的是点击“增加新的自定义表单”,后添加的自定义表单内容,如下图所示:

增加新的自定义表单

增加新的自定义表单


  要实现这个添加新的自定义表单,需要两步:一步是显示增加表单的具体项,以全填写每一项内容;第二步是,填写好内容后,点击“确定”把数据库提交到数据库表里面;不仅仅是自定义表单这样,织梦系统里面一般的只要有添加或增加功能的都分这两步,所以,我们在分析时也按照这两步来进行,也是技巧了织梦写的代码也是分这两步(其实,不是技碰巧这样,而是织梦基地研究织梦系统很多功能总结出来的,所以,有的织梦系统功能,只要有添加功能,就可以分这两步,如果我们去做织梦二次开发,也可以使用这两步来进行编写程序)。

代码分析开始:

  第一步:显示自定义表单具体项,这个点击“[增加新的自定义表单]”后,便进入到了如下界面:

增加自定义表单内容

增加自定义表单内容


  增加新自定义表单是通过表单处理文件diy_add.php和对应的织梦模板文件diy_add.htm来处理的,打开处理文件diy_add.php,第一步处理代码为:

显示表单项

显示表单项


  也就是条件if(empty($action))里面的代码。

  查询最后一条表单数据id:
  1. $row = $dsql->GetOne("SELECT diyid FROM #@__diyforms ORDER BY diyid DESC LIMIT 0,1 ");
复制代码


  这里是通过降序来查询第一条数据,也就是id最大的那条,为什么要查询最大的那一条呢,因为,我们添加表单时程序会自动把要增加的表单的id增加1,这样就不会重复了,如上图所示diyid是3,因为,在数据库表#@__diyforms里面最大的diyid值为2。

  通过判断查询出来的$row是不是一个数组,如果是一个数组,就按照上面分析的加上1:
  1. if(is_array($row)) $newdiyid = $row['diyid']+1;
复制代码


  如果$row不是一个数组,说明表#@__diyforms里面没有表单内容,那diyid直接从1开始。

  然后,引入模板文件diy_add.htm:
  1. include(DEDEADMIN."/templets/diy_add.htm");
复制代码


  这样在模板里面直接使用处理的数据,例如,<?php echo $newdiyid?>,调用id的,设置数据库表的:
  1. <?php echo $cfg_dbprefix; ?>diyform<?php echo $newdiyid; ?>等。
复制代码


  第二步:当填写完数据后,点击“确定”后,则执行diy_add.php里面的else代码,下面我们一行一行的分析代码,在分析前我们要知道我们现在分析的代码是什么的,这段代码是把我们填写的数据内容插入到自定义表单表#@__diyforms里面的。

  1. 处理表单id为空或不是数值类型以及数据库表为空时的情况:

表单id,数据库表

表单id,数据库表



  2. 处理前台列表和内容页公开?这个参数:
  1. $public = isset($public) && is_numeric($public) ? $public : 0;
复制代码


  3. 处理自定义表单名称,把特殊字符转换成html 实体字符:
  1. $name = dede_htmlspecialchars($name);
复制代码


  4. 检测是不是自定义表单id和自定义表单名称是不是已经存在了:

5.jpg

  5.检查添加的数据库表是不是在数据库表#@__diyforms已经存在了:

判断数据库表是不是存在

判断数据库表是不是存在


  好了,到现在提交过来的数据库已经全部处理好了,现在就是把这些数据插入到对应的表里面,但是,在插入到对应的表里面的数据前,先判断一下这个表是不是存在,上面判断的要插入的数据库表是不是已经存在数据库里面,只是判断处理的重复的情况,如果这个表压根就不存在,那么,还怎么插入数据?所以,接下来就是判断一下表是不是存在,不存在就创建之:

创建表单表

创建表单表


  6. 如果创建成功:
  1. if($dsql->ExecuteNoneQuery($sql))
复制代码


  则把数据插入到创建好的表中:

  1.           $query = "INSERT INTO #@__diyforms (`diyid`, `name`, `table`, `info`, `listtemplate`, `viewtemplate`, `posttemplate`, `public` ) VALUES ('$diyid', '$name', '$table', '', '$listtemplate', '$viewtemplate', '$posttemplate', '$public')";
  2.         $dsql->ExecuteNoneQuery($query);
  3.         showmsg('自定义表单创建成功,请自行添加字段', 'diy_main.php');
复制代码

  否则,提示:自定义表单创建失败。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|织梦二次开发

GMT+8, 2019-9-17 20:48 , Processed in 0.229483 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表