插件开发教程第一讲

插件目录:

controller控制器目录

data数据库安装和卸载文件

model是数据模型目录

static常用资源目录,如css、js等

validate数据验证文件目录

view模板目录


例如我们需要开发一个友情链接插件,随便给他定义一个名称Superlinks。

首先,我们需要建立一个superlinks的文件夹,名称保持全部小写。

在文件夹superlinks中建立一个Superlinks.php文件。



namespace addon\superlinks;
use app\common\controller\Addonbase;
use addon\AddonInterface;
/**
 * 合作单位插件
 * @author 苏南
 */
class Superlinks extends Addonbase implements AddonInterface
{
}



首先命名空间那里根据实际的文件夹路径填写,注意文件夹的路径,都是小写。

之后use两个文件,是固定的,不用更改。


建立了这个文件,首先我们加入插件的信息


    /**
     * 插件基本信息
     */
    public function addonInfo()
    {
        
     return [
     		     'name' => 'Superlinks'
        		 'title' => '友情链接' 
        		 'describe' => '友情链接'
        		 'author' => '苏南 newsn.net'
        		 'version' => '1.0'
     		     'has_adminlist' => '1'
               ];
    }


这里的name我们是大写的,表示的是这个文件类名。has_adminlist=1表示我们后台需要显示链接的数据菜单。

因为我们的友情链接肯定是要在后台添加、编辑和删除操作的,所以我们需要一个后台菜单,那么就还需要加上


public $admin_list = array(
        'listKey' => array(
            'title' => '站点名称'
            'type' => '类型'
            'status' => '显示状态'
            'level' => '优先级'
            'create_time' => '创建时间'
        )
        'model' => 'superlinks'
        'order' => 'level descid asc'
        'field' => '*'
    );
    public $custom_adminlist = 'adminlist.html';


之后就是安装插件和删除插件两个函数



 /**
     * 插件安装
     */
    public function addonInstall()
    {
    	$arr=$this->addonInfo();
    	$this->getisHook('friendlink' $arr['name'] $arr['describe']);
    	$this->installAddon($arr);
    	
        
        return [RESULT_SUCCESS '安装成功'];
    }
    
    /**
     * 插件卸载
     */
    public function addonUninstall()
    {
    	$arr=$this->addonInfo();
    	$this->deleteHook('friendlink');
    	$this->uninstallAddon($arr['name']);
     
        
        return [RESULT_SUCCESS '卸载成功'];
    }
安装和删除大部分都是固定的,不需要更改。需要更改的就是deletehook和getishook这两个里边的钩子名称。


因为我们的钩子都是唯一的,跟别的插件的钩子也不能重名,我们这里使用了friendlink作为钩子名称。前台在需要的地方调用钩子就可以执行这个friendlink的函数,这个函数也要放在这个插件文件里。


  //钩子方法
    public function friendlink($param)
    {
    	$list = db('superlinks')->where('status = 1')->order('level descid asc')->getList();
    	foreach($list as $key=>$val){
    		if($val['type'] == 1){//图片连接
    			
    			
    			$list[$key]['savepath'] = get_picture_url($val['cover_id']);
    		}
    	}
    	
    	
 
        
    
        
        $this->assign('list' $list);
        $this->assign('link' $param);
        $this->addonTemplate('widget''index'); 
 
    }



最后一句就是模板文件的名称widget这个,在view这个文件夹中,刚才已经说过了。


这样前台当在模板中使用

{:hook('friendlink')} 
就可以调用这个插件了。
钩子函数的逻辑怎么写,你可以自己发挥的。先写到这里吧。下一次说说controller的里边的操作和model里的数据。


欢迎积极参与 - 本帖共被表态39次
本帖最后编辑于04月11日 23:57
奇点

奇点

赞同来自: wety56

学习了


546160

546160

赞同来自: wety56

没学会
支持支持
zhichi

要回复讨论请先登录注册