>[info]在后台【插件管理】里在线安装【字段管理】插件,然后你就可以直接使用 >[danger]注意:在字段在线安装后,系统会默认生成一个管理cowcms_field_ceshi数据表的入口,但是该操作中并没有生成cowcms_field_ceshi数据表,需要用户自行在数据库中添加这个表,如果熟悉该插件,可以直接删除 使用方法: 如管理 cowcms_field_ceshi数据表的字段,请直接访问url('field/Field/field_list',['table'=>'field_ceshi'])生成的连接,即可操作该数据表 ![](https://box.kancloud.cn/a841c1dd458f9b0b02907547a161d800_1662x713.jpg) 添加字段后 可以通过 url('field/Input/form_add',['table'=>'field_ceshi',‘sign’=>0])生成的连接向cowcms_field_ceshi数据表添加数据 其中 table为数据表,不带前缀,sign为模版方案的id或者方案标识 ![](https://box.kancloud.cn/942027aa1a7e819655f702deac8d713e_1056x708.jpg) ![](https://box.kancloud.cn/a571935271b7f6280003d37737a98226_584x345.jpg) 可以通过 url('field/Input/form_edit',['table'=>'field_ceshi',‘sign’=>0,‘id’=>1])生成的连接编辑cowcms_field_ceshi数据表数据 其中 table为数据表,不带前缀,sign为模版方案的id或者方案标识,id为cowcms_field_ceshi表中要编辑记录的id >[info]也可以自定义表单提交和表单编辑的页面,你可以在任何模块创建你自己的表单页面 第一步:创建控制器,创建控制时,必须要继承Form类 ``` namespace app\【moduleName】\controller; use form\Form; class Input extends Form /************************************************************* form_add 添加 *************************************************************/ public function form_add() { $table = $this->request->param('table'); $sign = $this->request->param('sign',''); if($this->request -> isAjax() || $this->request-> isPost()) { $return = formSave(); return $return; } else { return $this->fetch(); } } /************************************************************* form_edit 编辑 *************************************************************/ public function form_edit() { $table = $this->request->param('table'); $id = $this->request->param('id/d',0); $sign = $this->request->param('sign',''); if($this->request -> isAjax() || $this->request-> isPost()) { $return = formSave($id); return $return; } else { return $this->fetch(); } } ``` ``` /************************************************************* formSave 保存或者返回提交参数 @param save int 是否直接保存数据 1:直接保存到数据库中,如果有错误提示,返回格式为['err'=>1,'content'=>'错误信息'],如果保存成功['err'=>0,'content'=>'操作成功'],0:返回表单提交的数据,如果有错误提示,返回格式为['err'=>1,'content'=>'错误信息'],如果没错误信息,直接返回处理后的提交表单的数据,为数组 @param id int 编辑记录的id @param table tring 数据表名称 @return int *************************************************************/ formSave($id=0,$save=1,$table=NULL){ } ``` >[danger]注意:formSave 说明 $id:如果id为真,表示编辑数据表中对应id的记录,如果不为真,表示插入数据表 $save:是否直接保存数据 1:直接保存到数据库中,如果有错误提示,返回格式为['err'=>1,'content'=>'错误信息'],如果保存成功['err'=>0,'content'=>'操作成功'],0:返回表单提交的数据,如果有错误提示,返回格式为['err'=>1,'content'=>'错误信息'],如果没错误信息,直接返回处理后的提交表单的数据,如['username'=>'wangshan','pass'=>'123456'] $table:如果为真,表示当前操作的数据表,如果不为真,将获取表单post过来的table,request()->param('table') 第二步:在对应的模版文件中引入js和css文件 ``` <link rel="stylesheet" type="text/css" href="__STATIC__style/module/css/font/iconfont.css?v=1.0.1" media="all"> <link rel="stylesheet" type="text/css" href="__STATIC__plug/layui/css/layui.css?v=2.2.2" media="all"> <script type="text/javascript" src="__STATIC__plug/layui/layui.js?v=2.2.2"></script> <script type="text/javascript" src="__STATIC__style/module/js/common.js?v=2.0.1"></script> ``` 其中 __STATIC__为模版替换变量,需要在当前模块template.php配置文件中设置 ``` 'tpl_replace_string' => [ '__STATIC__'=> getRoot().'public/static/', ] ``` 第三步:在模版中输出HTML的表单内容 模版中可以直接使用2个变量 form_group:分组显示每个分组的表单HTML内容 ![](https://box.kancloud.cn/c6dd9613fa19fbfc81a054f7eff573de_788x407.jpg) 如在添加字段时,字段分组为base,模版中可以通过{$form_group['base']}输出所有base分组字段的HTML表单内容 form:不进行分组显示,直接显示所有字段的HTML表单内容 ``` <form id="form1" class="layui-form" action="" method="POST"> {:htmlspecialchars_decode($form)} <div class="layui-form-item"> <div class="layui-input-block"> <button class="layui-btn" lay-submit lay-filter="add_submit">{:lang('add')}</button> <button type="reset" class="layui-btn layui-btn-primary">{:lang('reset')}</button> </div> </div> </form> ``` 第四步:提交表单代码 ``` <script> layui.use(['jquery','jqbind','form'],function(){ var $ = layui.jquery, jqbind = layui.jqbind, form = layui.form form.on('submit(add_submit)', function(data){ url = ""; $.post(url,data.field,function(res){ if(res.err == 0) { parent.layer.msg("{:lang('add')}{:lang('success')}"); var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引 parent.layer.close(index); //再执行关闭 } else { form.render(); layer.msg(res.content); } }, "json"); return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。 }); }) </script> ``` 提交代码可以自行编写,只要能post提交数据即可