QQ登录 账号密码登陆 官网首页

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