织梦二次开发

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

[共用功能] 织梦“添加自定义表单字段”功能分析教程

[复制链接]

1046

主题

1109

帖子

5334

积分

超级版主

Rank: 8Rank: 8

金币
256
贡献
3959
发表于 2015-11-9 14:58:36 | 显示全部楼层 |阅读模式
  我们先来看看如何为一个表单添加字段,具体流程如下:

  织梦系统dedecms添加自定义表单字段指的是,建立好自定义表单后,点击表单后面的“更改”按扭,如下图所示:

更改

更改


  然后,进入到表单的更改页面如下图所示:

添加字段

添加字段


  点击添加字段,进入到添加字段界面,如下图所示:

添加字段界面

添加字段界面


  然后,进行添加字段即可。

  本教程将对这个添加字段的功能进行分析研究,从上面的流程我们可以看出,添加一个字段,其实,就是打开“增加新字段”的界面,然后,填写上字段内容,然后,点击“确定”,即可把字段添加到数据库表里面。从这一分析过程来看,添加字段,其实是分为两部分来进行的,调出织梦模板文件,显示添加字段界面,然后,点击“确定”后,执行把数据库插入到数据库表里面。

  添加字段功能处理文件是:diy_field_add.php,对应的模板文件是diy_field_add.htm。

  打开文件diy_field_add.php,我把这个文件里面的代码分为三部分:

添加自定义表单代码

添加自定义表单代码


  第一部分是公共部分,是处理当前mysql的版本,以及引入一些需要的文件。

  第二部分是当我们填写完字段信息后,点击“确定”后处理的数据。

  第三部分也就是上面提到的第一部分显示添加字段界面。

代码分析开始:

  1. 当我们点击“添加字段”后,进入到添加字段信息界面,此时,执行的是上面第三部分代码,我们先来分析一下这一功能的实现代码。

  因为要添加字段,所以,要添加字段的表必须存在,如果不存在,则创建之,在我们以后做织梦二次开发时,也要这样处理,不要等到点击“确定”后,才来判断这个表存不存在,而是在填写字段内容前就先判断这个字段是不是已经存在。

  a)查询要添加字段的表单:
  1. $row = $dsql->GetOne("SELECT `table` FROM #@__diyforms WHERE diyid='$diyid'");
复制代码


  然后,查询的目的就是为了获取这个表单对应的表$row['table']是不是存在。

  b) 如果表不存在则创建之,代码如下:

创建表代码

创建表代码


  c)要知道上面只是猜测这个表是不是存在,如果不存在则创建之,但是,如果这个表已经存在,并且已经有一些字段内容了,这时如果你添加的字段已经存在表里面,是不是就要提示一下已经有这个字段,或在模板里面当我们填写完字段信息后,就要检测一下添加的字段是不是已经在表里面了,如果在了就不让用户提交,否则,就有可能覆盖掉别人添加的字段信息,这是非常危险的。

  如何检测呢?其实,比较简单,把表里面的字段查询出来,然后,在用户提交时,与查询出来的字段进行对比,看看有没有一样的,一样的就说明新添加的字段已经在表中,就不要处理了,并提示已经在表存在了,处理重复字段的原理就是如何,我们看看织梦是如何处理的。

  织梦是这样处理重复字段的,先查询出表中的字段,通过我们不常用的sql语句:
  1. show fields from `$trueTable`
复制代码


  然后,通过遍历把这个表$trueTable里面的字段查询出来,并存到数组$fields里面,然后,再遍历这个数组,把字段放到字符串$f里面。
6.jpg
  然后,在模板文件diy_field_add.htm里面的js来处理,如下图示:

7.jpg

  到此,整个提交前的功能处理完了。

  2. 处理提交后的数据,也就是把数据插入到表里面的功能,这个是由if($action=='save')里面的代码执行的。

   在分析代码前,我们需要先知道,如果添加一个字段,那么,就要在表#@__diyforms和对应的字段表$trueTable插入数据,我们以自定义表单“建站客户留言”为例子,查看一下对应的这个表单在数据库表#@__diyforms里面存储的内容为:

字段添加的表

字段添加的表


  特别注意上面表中的字段info,因为,我们添加完字段信息后,要在这个字段里面添加数据,这就麻烦了,因为,在这个里面已经有字段值,而且,还都是一些标签值,此时,就突显出织梦模板引擎的伟大之处了。

  然后,处理完这个表后,还要在表dede_diyform2里面添加字段信息,如下图所示:

9.jpg

  所以,添加字段信息就是要把字段信息添加到这两个表里面,这段处理代码就是围绕着添加字段信息到这两个表来进行的。

  a) 处理配置信息,以及表#@__diyforms里面的字段info值:

配置信息处理代码

配置信息处理代码


  b) 检测被修改的字段类型
  1.     $fieldinfos = GetFieldMake($dtype,$fieldname,$dfvalue,$mxlen);
  2.     $ntabsql = $fieldinfos[0];
  3.     $buideType = $fieldinfos[1];
复制代码


  c) 添加字段到dede_diyform2里面,当然,这里使用的是$trueTable:
  1. $rs = $dsql->ExecuteNoneQuery(" ALTER TABLE `$trueTable` ADD  $ntabsql ");
复制代码


  d) 获取info字段信息$oksetting,在这个字段里面已经通过模板引擎功能处理好了,把新加的字段内容添加到了这个字符串里面了,代码如下:

11.jpg

  e) 获取添加的字段:$addlist = GetAddFieldList($dtp,$oksetting);

  f) 更新自定义表单表#@__diyforms:
  1. $rs = $dsql->ExecuteNoneQuery("Update #@__diyforms set `info`='$oksetting' where diyid='$diyid' ");
复制代码


  最后,退出程序。
回复

使用道具 举报

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

本版积分规则

QQ|织梦二次开发

GMT+8, 2019-9-17 20:52 , Processed in 0.243137 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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