关于onethink的插件类的学习

浏览:879 发布日期:2015/07/04 分类:技术分享 关键字: onethink 钩子
看了很多网上关于很多插件和钩子的文章一直觉得不够清晰明了。这次自己花了一个上午的时间看了ONETHINK的源码,配合官方的插件,行为扩展。写了这篇文章,希望对大家有所帮助。首先我觉得ONETHINK的插件和官方的不是一回事情。官方的插件用的VAR_ADDONS来定义的。我不知道是不是作用是一样的。暂时不去管了。
我在Common下的function里面看到了这个定义。
const K_ADDON_PATH = './Addons/';
然后是在config的配置文件里面
'AUTOLOAD_NAMESPACE' => array('Addons' => K_ADDON_PATH),
注册了新的命名空间 ,对应加载了其实就是插件的类
public function run(&$params){
$data = S('hooks'); 读取缓存
if(!$data){ 读取缓存为空
$hooks = M('Hooks')->getField('name,addons'); 查找所有的钩子
foreach($hooks as $key=>$value){
if($value){ 如果钩子存在
$map['status'] = 1;
$names = explode(',',$value);
$map['name'] = array('IN', $names);
$data = M('Addons')->where($map)->getField('id,name'); 查找钩子对应的插件
if($data){
$addons = array_intersect($data, $names); 查询到的插件 钩子的插件列表
Hook::add($key,array_map('get_addon_class',$addons)); 加载钩子下面的插件
}
}
}
}
}
这里有2个Common的function.php下面有2个这个函数
/*
* 获取插件的类名称
*/
function get_addon_class($name){
$class = "Addons\\{$name}\\{$name}Addon";
return $class;
}

/*
* 处理插件钩子
*/
function hook($hook,$params=array()){
\Think\Hook::listen($hook,$params);
}
感觉好像也没有什么可以说的,另外就是2个表。直接去ONETHINK的那里拷贝出来
最佳答案
评论( 相关
后面还有条评论,点击查看>>