插件
本文整理智简魔方财务系统中“插件”相关的配置、操作或问题处理内容,供管理员和运维人员按原文步骤查阅与执行。
插件开发文档
【魔方开发者交流群:682866869】
一、插件开发目录:public\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 文件,内容如下:
<?php
namespace 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
*/后台路由地址:
http://www.test.com/admin/addons?_plugin=client_care&_controller=client_care&_action=index前台路由地址:
http://www.test.com/addons?_plugin=205&_controller=client_care&_action=index10、插件管理界面
若需要后台菜单:插件根目录下建立 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-name
description:compser 包的描述
type:compser 包的类型,这里固定为 cmf-plugin
license:compser 包的开源协议
authors:compser 包的作者及联系方式
require 为依赖库配置;没有依赖时使用:
"require": {}安装第三方库
cd 到插件目录下,然后执行 composer安装命令,如:
composer require phpoffice/phpspreadsheet剩下所有更新,删除包等操作就是标准的 composer 操作