>[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提交数据即可
- 序言
- 基础
- 源码包
- 核心包
- 完整包
- 系统模块
- 安装模块
- 后台模块
- 插件模块
- 插件开发
- 开发基础
- 权限开发
- 菜单开发
- 开发调试
- 碎片开发
- 碎片钩子预设表
- 插件说明
- 字段插件
- 插件介绍
- 字段使用
- 单行文本
- 多行文本
- 选项-下拉
- 选项-复选
- 选项-单选
- 选项-滑块
- 颜色选择器
- 星级评分
- 日期时间
- 文件上传
- 编辑器
- API接口
- 微信插件
- 微信配置
- 公众号配置
- 支付配置
- 微信支付使用
- API类库
- 红包发放
- 付款到零钱
- 碎片
- 公众号碎片
- 红包碎片
- 付款到零钱碎片
- API微信接口
- 支付宝插件
- 支付宝配置
- 支付宝支付使用
- api接口
- api接口后端开发
- api接口前端使用
- API参数接口
- 会员插件
- 登录使用
- 会员碎片
- API会员接口
- API注册接口
- 积分插件
- 积分设置
- 积分碎片
- API积分接口
- API提现接口
- API兑换接口
- API充值接口
- 订单
- 订单碎片
- API订单接口
- 商城
- 商城钩子
- API商城接口
- API商城会员接口
- 签到
- 签到设置
- 签到碎片
- API签到接口
- 上传
- 上传设置
- 上传JS接口
- 推广插件
- 海报设置
- API海报接口
- 文章插件
- 文章设置
- 文章钩子
- API文章接口
- API文章会员接口
- 管理员
- 管理员碎片
- 站内信
- API站内信接口
- 杂项
- 菜单
- 菜单设置
- API菜单接口
- 错误码
- 支付碎片
- 支付
- 充值
- 购买会员组
- 购买产品