基于thinksns2.5插件开发
一: 什么是插件 ? 插件位于/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这样的标准格式.
??? 代码如下:?
?
???? 2:定义hooks集合类
?在/addons/plugins/HttpReq/hook/下创建HttpReqAddons.class.php类getHooksInfo中HttpReqHooks类.
???? 代码如下: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());