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; } } |
