首頁 >php教程 >php手册 >基于thinksns2.5插件开发

基于thinksns2.5插件开发

WBOY
WBOY原創
2016-06-06 20:08:281456瀏覽

一: 什么是插件 ? 插件位于/addons/plugins/目录下 ? 插件是在不修改任何应用-核心心代码的情况下扩展某些功能,具备可启动可关闭的特性. ? thinksns的插件机制是基于Hook的,所以每个插件实现的hook必然会在制定位置执行一次.多个插件同时实现同一个钩子时也

一: 什么是插件
? 插件位于/addons/plugins/目录下
? 插件是在不修改任何应用-核心心代码的情况下扩展某些功能,具备可启动可关闭的特性.
? thinksns的插件机制是基于Hook的,所以每个插件实现的hook必然会在制定位置执行一次.多个插件同时实现同一个钩子时也会有顺序执行.

二:开发流程
???? 1: 实现插件Addons抽象类的描述对象
???? SimpleAddons:简单插件
???? NormalAddons:复杂的插件
?
??? 在插件/addons/plugins/ 下创建想做的插件文件名(下方我采用HttpReq).
??? HttpReq目录结构如下:
??????????????-hook??????????? 使用hooks集合类(可多个)
??????????? ?-lib???????????? 插件类包
??????????? -html?? 插件页面
?????????? -HttpReqAddons.class.php
????
??? 在HttpReq目录下创建一个描述文件: HttpReqAddons.class.php
??? 注:此名字须是 插件名字+Addons+class.php这样的标准格式.
??? 代码如下:?

<?php class HttpReqAddons extends NormalAddons{
	protected $version = "1.0";
	protected $author  = "tangw";
	protected $site    = "http://www.tangwen.com";
	protected $info    = "织梦端请求接口插件";
        protected $pluginName = "织梦http请求接口插件V1";
        protected $tsVersion = '2.5';
    /**
     * 获得此插件使用了哪些钩子聚合类
     * @return string
     */
    public function getHooksInfo()
    {
        $hooks['list']=array('HttpReqHooks');//钩子聚合类(多个)
        return $hooks;
    }
    /**
     * 该插件的管理界面的处理逻辑。
     * 如果return false,则该插件没有管理界面。
     * 这个接口的主要作用是,该插件在管理界面时的初始化处理
     * @param string $page
    */
    public function adminMenu()
    {
	    return false;
    } 
    /**
     * 在后台启动该插件时的初始化动作(包括停用后再启动)
     * @return type
     */
    public function start()
    {
        return true;
    }
    //后台第一次启动时的初始化动作
    public function install()
    {
        return true;
    }
    /**
     * 在后台卸载插件操作
     * @return type
     */
    public function uninstall()
    {
        return true;
    }
}

?
???? 2:定义hooks集合类
?在/addons/plugins/HttpReq/hook/下创建HttpReqAddons.class.php类getHooksInfo中

HttpReqHooks类.
???? 代码如下:

<?php /**
 *  织梦端->sns端请求获取数据接口
 * 请求地址如:http://whtest.com/index.php?app=home&mod=Widget&act=addonsRequest&addon=HttpReq&hook=get_user_face
 * @author tangw 2013-03-11
 *
 */
class HttpReqHooks extends Hooks{
    /**
     * 根据用户id获取用户信息
     *@author tangw 2013-03-11
     *@return  josn对象
     */
    public function get_user_info(){
      $uid = $_REQUEST['uid'];
      if(empty($uid)){
          $this->_reJson(array("isflag"=>0,"msg"=>"请求参数错误"));
      }
      $userData = M('user')->field("email,uname")->where("uid=$uid")->find();
      if($userData){
           $this->_reJson(array("isflag"=>1,"data"=>$userData));
      }else{
           $this->_reJson(array("isflag"=>2,"msg"=>"此用户不存在"));
      }
    }
    /**
     * 根据用户名获取用户图像
     *
     * @author tangw 2013-03-11
     * @param array("uname"=>"用户名","size"=>"图像大小")
     * @return json对象
     */
    public function get_user_face(){
        $username = trim($_REQUEST['uname']);//用户名
        $size = trim($_REQUEST['size']);//图像大小 s=small,m=middle,b=big
        $size = empty($size)?'m':$size;
        if(empty($username)){
            $this->_reJson(array("isflag"=>0,"msg"=>"请求参数错误"));
        }
         $userData = M('user')->field("uid")->where("uname='{$username}'")->find();
         if($userData){
             $uid = $userData['uid'];//用户id
             $uface = getUserFace($uid,$size);//图片
             $wb_url = SITE_URL."/index.php?app=home&mod=Space&act=index&uid=".$uid;//微博地址
             $data = array("uid"=>$uid,"face"=>$uface,"wb_url"=>$wb_url);
             $this->_reJson(array("isflag"=>1,"data"=>$data));
         }else{
             $this->_reJson(array("isflag"=>2,"msg"=>"此用户不存在"));
         }
    }
    /**
     * *@desc:返回json数据
     * *param $data  = array('title'=>'ok','flag'=>1);
     * */
    private function _reJson($data) {
        //header("Content-type: text/html; charset=utf-8");
        $str_json = json_encode($data);
        exit("$str_json");
    }
}
?>

插件调用方法:

Addons::createAddonShow("HttpReq", "get_user_info", array());
Addons::addonsHook("HttpReq", "get_user_info", array());
Addons::createAddonUrl("HttpReq", "get_user_info", array());

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn