>[danger] 注意:所有插件的数据表命名格式必须为:cowcms_插件模块名_数据表名称,比如模块为admin,数据表名称为menu,创建数据表最终的名称为:cowcms_admin_menu。 > 插件的开发和THINKPHP模块的开发基本没什么区别,唯一的区别就是插件模块中多了一个exec的目录。 >[info]exec目录展示 > ~~~ application 模块的总目录 │ ├─common 公共模块目录(可选) │ ├─module1 模块目录 │ │ ├─exec 操作执行目录 │ │ │ ├─install 安装模块执行目录 │ │ │ │ ├─sql sql文件目录,在该目录中的sql文件,在安装模块被执行 │ │ │ │ ├─exec.php 在模块安装时执行该文件 │ │ │ ├─uninstall 卸载模块执行目录 │ │ │ │ ├─exec.php 在模块卸载时执行该文件 │ │ │ ├─update 更新目录执行目录 │ │ │ │ ├─sql sql文件目录,在该目录中的sql文件,在模块时被执行 │ │ │ │ ├─exec.php 在模块更新时执行该文件 │ │ │ ├─config.php 模块配置文件 │ │ │ ├─tables.php 数据表文件,在安装时根据执行的sql文件保存sql文件中创建的数据表 │ │ │ ├─auth.php 安装时加入的权限规则表 │ │ │ ├─menu.php 安装时加入的菜单列表 │ │ │ ├─event.php 安装时关联的碎片功能 │ │ └─ ... 更多类库目录 ~~~ >[info] config.php---模块的配置文件 > ~~~php [ 'name' =>'文章系统', //模块名称 'author'=>'COWCMS', //开发作者 'version'=>'5.1.1', //模块版本号 'qq'=>'360881323', //开发者QQ号 'web'=>'//open.cowcms.com', //开发者个人主页 'sign'=>'gQrr7uc0eP7GX0rtLTcqoazmOOUk9h0rcAow', //是模块的唯一标识吗 32为字符 'describe'=>'COWCMS插件是一个插件库', //模块功能描述 ] ~~~ >[danger]特别注意:config.php文件中的 【sign】值,该值是每个模块对应的一个唯一的标识码,一个32为的字符串 > * [ ] 【功能作用】是实现在线更新功能,此值为空的模块不支持在线更新。 * [ ] 【获取方法】在 //open.cowcms.com 网站上注册会员,添加插件后,管理员审核通过,会在会员中心找到该 【sign】的值。 ![](https://box.kancloud.cn/bb6642feb47ede35bf19ffff939db409_1531x236.jpg) >[info] exec.php---模块执行文件,在模块执行 安装,更新,卸载操作的时候,都会执行其对应目录下的exec.php文件和sql目录下的sql文件。 > 模块安装时:要执行--install 目录下的exec.php文件,以及sql目录下的sql文件 模块卸载时:要执行--uninstall 目录下的exec.php文件,以及sql目录下的sql文件 模块更新时:要执行--update 目录下的exec.php文件,以及sql目录下的sql文件 >[info] 执行文件 exec.php,在这个文件中预设了几个执行函数 > ~~~php //在执行安装,卸载,更新时,提交的表单数据 // $module_name 当前执行的模块名 $this->field = function($module_name){ $fields=[ [ 'name'=>"username",//字段名称 'title'=>"用户名",//字段别名 'verify'=>"required",//表单验证(支持text|textarea),多个用|隔开 required(必填项) phone(手机号)email(邮箱)url(网址)number(数字)date(日期)identity(身份证) 'type'=>"text",//表单类型 可选 text|select|checkbox|radio|textarea 'value'=>"admin",//表单默认值 在(text|textarea)表单类型值为字符串,在(select|checkbox|radio) 表单类型值为默认选择的索引,在checkbox表单类型,默认值可以为数组 'option'=>"",// 在(checkbox|select|radio)表单类型 该字段有效,格式为text=value|text=value 'placeholder'=>''//placeholder值,对(text|textarea)表单类型有效 ] ]; return $fields; }; //在执行安装,卸载,更新时,如果field函数返回了字段且有表单数据被提交会执行此函数 // $module_name 当前执行的模块名 // $data field函数中产生的表单提交过来的数据 $this->form = function($module_name,$data){ return $data; }; //在执行安装,卸载,更新之前要执行该函数 // $module_name 当前执行的模块名 // $data form函数中反回来的数据 $this->begin = function($module_name,$data){ return $data; }; //在执行安装,更新时,如果有sql文件,在执行sql文件前会执行此函数 // $module_name 当前执行的模块名 // $data form函数中反回来的数据 // $param 前边函数返回的值 $param['begin'] :begin函数返回的值 $this->sqlBegin = function($module_name,$data,$param){ return $data; }; //在执行安装,更新时,如果有sql文件,在执行sql文件完成后会执行此函数 // $module_name 当前执行的模块名 // $data form函数中反回来的数据 // $param 前边函数返回的值 $param['begin'] :begin函数返回的值,$param['sqlBegin'] :sqlBegin函数返回的值 $this->sqlEnd = function($module_name,$data,$param){ return $data; }; //在执行安装,卸载,更新完成后会执行此函数 // $module_name 当前执行的模块名 // $data form函数中反回来的数据 // $param 前边函数返回的值 $param['begin'] :begin函数返回的值,$param['sqlBegin'] :sqlBegin函数返回的值,$param['sqlEnd'] :sqlEnd函数返回的值 $this->finish = function($module_name,$data,$param){ return $data; }; ~~~ >[info] 执行文件 exec.php中 $this->field函数中字段设置效果,如 > ~~~php $this->field = function($module_name){ $fields=[ [ 'name'=>"username",//字段名称 'title'=>"用户名",//字段别名 'verify'=>"required",//表单验证(支持text|textarea),多个用|隔开 required(必填项) phone(手机号)email(邮箱)url(网址)number(数字)date(日期)identity(身份证) 'type'=>"text",//表单类型 可选 text|select|checkbox|radio|textarea 'value'=>"admin",//表单默认值 在(text|textarea)表单类型值为字符串,在(select|checkbox|radio) 表单类型值为默认选择的索引,在checkbox表单类型,默认值可以为数组 'option'=>"",// 在(checkbox|select|radio)表单类型 该字段有效,格式为text=value|text=value 'placeholder'=>''//placeholder值,对(text|textarea)表单类型有效 ], [ 'name'=>"group_1",//字段名称 'title'=>"会员组1",//字段别名 'verify'=>"required",//表单验证(支持text|textarea),多个用|隔开 required(必填项) phone(手机号)email(邮箱)url(网址)number(数字)date(日期)identity(身份证) 'type'=>"select",//表单类型 可选 text|select|checkbox|radio|textarea 'value'=>"2",//表单默认值 在(text|textarea)表单类型值为字符串,在(select|checkbox|radio) 表单类型值为默认选择的索引,在checkbox表单类型,默认值可以为数组 'option'=>"普通会员=10|高级会员=11|合作会员=12",// 在(checkbox|select|radio)表单类型 该字段有效,格式为text=value|text=value 'placeholder'=>''//placeholder值,对(text|textarea)表单类型有效 ], [ 'name'=>"group_2",//字段名称 'title'=>"会员组2",//字段别名 'verify'=>"required",//表单验证(支持text|textarea),多个用|隔开 required(必填项) phone(手机号)email(邮箱)url(网址)number(数字)date(日期)identity(身份证) 'type'=>"radio",//表单类型 可选 text|select|checkbox|radio|textarea 'value'=>"2",//表单默认值 在(text|textarea)表单类型值为字符串,在(select|checkbox|radio) 表单类型值为默认选择的索引,在checkbox表单类型,默认值可以为数组 'option'=>"普通会员=10|高级会员=11|合作会员=12",// 在(checkbox|select|radio)表单类型 该字段有效,格式为text=value|text=value 'placeholder'=>''//placeholder值,对(text|textarea)表单类型有效 ], [ 'name'=>"group_3",//字段名称 'title'=>"会员组3",//字段别名 'verify'=>"required",//表单验证(支持text|textarea),多个用|隔开 required(必填项) phone(手机号)email(邮箱)url(网址)number(数字)date(日期)identity(身份证) 'type'=>"checkbox",//表单类型 可选 text|select|checkbox|radio|textarea 'value'=>"2",//表单默认值 在(text|textarea)表单类型值为字符串,在(select|checkbox|radio) 表单类型值为默认选择的索引,在checkbox表单类型,默认值可以为数组 'option'=>"普通会员=10|高级会员=11|合作会员=12",// 在(checkbox|select|radio)表单类型 该字段有效,格式为text=value|text=value 'placeholder'=>''//placeholder值,对(text|textarea)表单类型有效 ] ]; return $fields; }; ~~~ ![](https://box.kancloud.cn/70eb110f919a686e7d804f8466e20932_968x730.jpg)