tpshop的功能插件
插件千变万化, 一般插件安装卸载都会写份文档, 教开发者复制哪些文件到哪些目录, 然后执行哪些sql 新建哪些表。
卸载插件的时候 也很麻烦需要一个个文件去寻找删除。
但是tpshop 中的万能插件安装卸载 却很方便, 从此不需要像普通那么麻烦, 能做到一键安装 一键卸载, 前提条件是某些文件必须没有经过二次开发, 否则怕覆盖掉被开发的文件,
所以在安装卸载插件的时候, 请注意将会覆盖哪些文件。 话不多说, 先看下tpshop 插件管理类的 如下安装代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | //如果是功能插件 if ( $condition [ 'type' ] == 'function' ) { include_once "plugins/function/{$condition['code']}/plugins.class.php" ; $plugin = new \plugins(); if ( $update [ 'status' ] == 1) // 安装 { $execute_sql = $plugin ->install_sql(); // 执行安装sql 语句 $plugin ->install(); // 执行 插件安装代码 } else // 卸载 { $execute_sql = $plugin ->uninstall_sql(); // 执行卸载sql 语句 $plugin ->uninstall(); // 执行插件卸载代码 } $Model = new \Think\Model(); $Model ->execute( $execute_sql ); // 执行插件所需的sql 语句 } |
然后看看插件目录。 其中 www 是所需要用到覆盖的文件,
config.php 插件配置
install.sql 插件安装时用到的sql
logo.jpg 插件图标
plugins.class.php 插件安装卸载累 格式固定的, 每个功能插件都必须有这个类, 名字格式都必须一致
uninstall.sql 卸载所用到的文件
下面不多说自己看代码体验一下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
use Think\Model\RelationModel; /** * 插件需要执行的方法 逻辑定义 */ class plugins extends RelationModel { public $tableName = 'plugin' ; // 插件表 public $app_path ; /** * 析构流函数 */ public function __construct() { parent::__construct(); $this ->app_path = dirname( $_SERVER [ 'SCRIPT_FILENAME' ]). '/' ; // 当前项目路径 } /** * 安装 */ function install() { // 执行安装代码 比如复制文件 这里一般是将开发的文件 一个个 copy 到对应的目录中去 // 递归复制文件夹 recurse_copy( $this ->app_path. 'plugins/function/helloworld/www/' , $this ->app_path); } /** * 卸载插件 */ function uninstall() { // 执行卸载代码 比如删除文件 将安装时 复制好的 插件文件 一个个删除掉 delFile( $this ->app_path. 'Application/Admin/Controller/HelloWorldController.class.php' ); delFile( $this ->app_path. 'Application/Admin//View/HelloWorld' ); // 删除HelloWorld目录下所有文件 rmdir ( $this ->app_path. 'Application/Admin//View/HelloWorld' ); // 删除目录 HelloWorld } /** * 安装 sql 语句 * 这里的sql 可以的文件导入 也可以直接写死 插件要用到的新表 数据等 */ function install_sql() { $sql = file_get_contents ( $this ->app_path. 'plugins/function/helloworld/install.sql' ); return $sql ; } /** * 卸载 sql 语句 * 把插件相关的数据删除掉. */ function uninstall_sql() { $sql = file_get_contents ( $this ->app_path. 'plugins/function/helloworld/uninstall.sql' ); return $sql ; } } |