财务系统开发文档>插件
c\plugins\addons\ 目录下;(具体可参考demo_style插件)二、插件目录结构client_care -------------------------------------------------------------------插件名称 | config | config.php-------------------------------------------基础配置 controller | Clientarea-------------------------------------------插件前台访问控制器目录 ClientCareController.php------------------------后台外部访问控制器 lang-----------------------------------------------------------多语言 validate model template | clientarea-------------------------------------------插件前台模板 admin------------------------------------------------后台模板 | Index.tpl------------------------------------模板(对应控制器中的fetch(‘/index’)) ClientCarePlugin.php-------------------------------------插件主文件(可实现系统钩子) config.php---------------------------------------------------插件配置文件 menu.php----------------------------------------------------后台菜单文件 menuclientarea---------------------------------------------前台菜单文件 hook.php----------------------------------------------------钩子文件 README.md------------------------------------------------插件说明文档 三、插件类主文件 插件命名规范插件类名采用大驼峰命名法,都带 Plugin类名后缀,如 DemoPlugin,ClientCarePlugin插件目录名应该把插件类名转化为小写下划线形式的,如 demo,client_care 插件类主文件位于插件根目录命名格式:插件名+Plugin.php 在插件根目录创建DemoPlugin.php文件,内容如下: <?php namespace addons\demo;//Demo插件英文名,改成你的插件英文就行了use app\admin\lib\Plugin; //Demo插件英文名,改成你的插件英文就行了class DemoPlugin extends Plugin{ public $info = array( 'name' => 'Demo',//Demo插件英文名,改成你的插件英文就行了 'title' => '插件演示',//插件名称 'description' => '插件演示',//插件说明 'status' => 1, //插件状态 1开启 0禁用,3未安装 'author' => 顺戴网络, //作者 'version' => '1.0', //版本 'module' => 'addons' //所属模块,这里固定为addons ); // 插件安装 public function install() { return true;//安装成功返回true,失败false } // 插件卸载 public function uninstall() { // 在这里不要try catch数据库异常,直接抛出上层会处理异常后回滚的 return true;//卸载成功返回true,失败false } //实现的footer_start钩子方法(footer_start官方定义钩子名称) public function footerStart($param) { $config = $this->getConfig(); $this->assign($config); echo $this->fetch('widget'); } }四、开发流程 插件模板文件:插件列表:public/admin/themes/default/addons.tpl (操作:设置/禁用(启用)/更新/卸载)插件通用设置模板文件:public/admin/themes/default/addons/setting.tpl插件通用js函数:public/admin/themes/default/addons/functions.tpl 2、插件后台控制器(后台基类控制器app\admin\controller\PluginAdminBaseController;增加了登录验证)cmf_get_current_admin_id();可获取后台管理员id,可用于判断是否登录 在插件controller目录下创建IndexController.php文件,内容如下:<?phpnamespace plugins\demo\controller; //Demo插件英文名,改成你的插件英文就行了use cmf\controller\PluginBaseController;use plugins\Demo\Model\PluginDemoModel;use think\Db; class IndexController extends PluginAdminBaseController{ function index($id) { $users = Db::name("user")->limit(0, 5)->select(); $demos=PluginDemoModel::all(); // print_r($demos); $this->assign("users", $users); $this->assign("Title", ‘Demo title’);# 自定义title return $this->fetch("/index"); }}4、插件前台控制器(前台基类控制器app\home\controller\PluginHomeBaseController;)在插件controller/clientarea目录下创建,与后台类似;注意命名空间:namespace addons\插件目录\controller\clientarea; 例:namespace addons\client_care\controller\clientarea;具体可以参考demo_style插件; 5、模板目录插件目录下template目录:后台模板目录template/admin/;前台模板目录template/clientarea/;模板常量__ROOT__: 网站根目录,不带/;__PLUGIN_ROOT__: 插件根目录,不带/;__PLUGIN_TMPL__: 插件模板根目录,也就是插件目录下template目录,不带/;__PLUGIN_ADMIN_TMPL__: 插件模板后台根目录,template/admin目录,不带/;__PLUGIN_CLIENTAREA_TMPL__: 插件模板前台根目录,template/clientarea目录,不带/;__ADMIN_TMPL__: 系统后台模板根目录,用于加载后台模板的相关 css,js 等资源文件,不带/;__STATIC__: public/static目录,不带/;include标签: 加载插件模板目录 public文件夹下head.html文件(参考thinkPHP5.1){include file="public/head"/}标签用法参考thinkPHP5.1;6、模型7、多语言lang/目录下,建en-us.php ,zh-cn.php等;8、第三方库(待定)9、Url生成方法说明:shd_addon_url($url, $vars = [], $home = false)/** * 生成访问插件的url * @param string $url url格式:插件名://控制器名/方法 * @param array $vars 参数 [‘id’=>1,’page’=>1] * @param bool $home 是否前台 * @return string */后台路由地址:www.test.com/admin/addons?_plugin=client_care&_controller=client_care&_action=index前台路由地址:www.test.com/addons?_plugin=205&_controller=client_care&_action=index 10、插件管理界面若需要后台菜单:插件根目录下建立index.tpl,例:(舍弃)<a href="{:shd_addon_url('DingtalkTicket://AdminIndex/setting')}">设置</a><a href="{:shd_addon_url('DingtalkTicket://AdminIndex/setWebHook')}">提交</a>若需要后台菜单:插件根目录下建立menu.php,例:(2.1.9版本后)<?php/* * 自定义菜单 */return [ [ 'name' => '样式1', # 链接名称 'url' => 'DemoStyle://AdminIndex/addhelp', # 链接格式 插件名://控制器名/方法 'custom' => 0, # 是否为自定义路由 ], [ 'name' => '样式7', 'url' => 'https://www.baidu.com', 'custom' => 1, ],];11、插件前台菜单插件根目录下创建menuclientarea.php文件,范例如下<?php/* * 前台自定义菜单 */return [ [ 'name' => '插件样式Demo', # 菜单名称 默认为一级菜单 'url' => '', # 菜单路由 (若有子菜单,此值留空) 'fa_icon' => 'bx bxs-grid-alt', # 菜单图标 支持bootstrap 'lang' => [ # 菜单多语言 'chinese' => '插件样式Demo', # 中文 'chinese_tw' => '插件样式Demo', # 台湾 'english' => 'Style Demo', # 英文 ], 'child' => [ # 子菜单 没有定义为空数组 [ 'name' => '样式1', # 链接名称 'url' => 'DemoStyle://Index/addhelp', # 链接格式 插件名://控制器名/方法 菜单路由 (若有子菜单,此值留空) 'fa_icon' => '', 'lang' => [ # 菜单多语言 'chinese' => '样式1', # 中文 'chinese_tw' => '样式1', # 台湾 'english' => 'Style1', # 英文 ], 'child' => [] ], [ 'name' => '样式2', # 链接名称 'url' => 'DemoStyle://Index/customerdetail1', # 链接格式 插件名://控制器名/方法 'fa_icon' => '', 'lang' => [ # 菜单多语言 'chinese' => '样式2', # 中文 'chinese_tw' => '样式2', # 台湾 'english' => 'Style2', # 英文 ], 'child' => [] ], [ 'name' => '样式3', # 链接名称 'url' => 'DemoStyle://Index/customerdetail2', # 链接格式 插件名://控制器名/方法 'fa_icon' => '', 'lang' => [ # 菜单多语言 'chinese' => '样式3', # 中文 'chinese_tw' => '样式3', # 台湾 'english' => 'Style3', # 英文 ], 'child' => [] ], [ 'name' => '样式4', # 链接名称 'url' => 'DemoStyle://Index/customerdetail3', # 链接格式 插件名://控制器名/方法 'fa_icon' => '', 'lang' => [ # 菜单多语言 'chinese' => '样式4', # 中文 'chinese_tw' => '样式4', # 台湾 'english' => 'Style4', # 英文 ], 'child' => [] ], [ 'name' => '样式5', # 链接名称 'url' => 'DemoStyle://Index/customerdetail4', # 链接格式 插件名://控制器名/方法 'fa_icon' => '', 'lang' => [ # 菜单多语言 'chinese' => '样式5', # 中文 'chinese_tw' => '样式5', # 台湾 'english' => 'Style5', # 英文 ], 'child' => [] ], [ 'name' => '样式6', # 链接名称 'url' => 'DemoStyle://Index/helplist', # 链接格式 插件名://控制器名/方法 'fa_icon' => '', 'lang' => [ # 菜单多语言 'chinese' => '样式6', # 中文 'chinese_tw' => '样式6', # 台湾 'english' => 'Style6', # 英文 ], 'child' => [] ] ] ]]; 12、安装第三方库创建 composer.json,以export_excel为例:在export_excel插件根目录public/plugins/addons/export_excel中创建composer.json文件{ "name": "thinkcmf/export_excel", "description": "ExportExcel", "type": "cmf-plugin", "license": "apache2.0", "authors": [ { "name": "test", "email": "test@qq.com" } ], "require": { }} composer.json属性:name: compser包的的名称,格式your-vendor-name/package-namedescription:compser包的描述type:compser包的类型,这里固定为 cmf-pluginlicense:compser包的开源协议authors:compser包的作者及联系方式require:依赖库,这里留空{} 安装第三方库cd 到插件目录下,然后执行 composer安装命令,如:composer require phpoffice/phpspreadsheet剩下所有更新,删除包等操作就是标准的composer操作