智简魔方文档

插件

本文整理智简魔方财务系统中“插件”相关的配置、操作或问题处理内容,供管理员和运维人员按原文步骤查阅与执行。

插件开发文档


【魔方开发者交流群: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=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-name

description:compser 包的描述

type:compser 包的类型,这里固定为 cmf-plugin

license:compser 包的开源协议

authors:compser 包的作者及联系方式

require 为依赖库配置;没有依赖时使用:

"require": {}

安装第三方库

cd 到插件目录下,然后执行 composer安装命令,如:

composer require phpoffice/phpspreadsheet

剩下所有更新,删除包等操作就是标准的 composer 操作