钩子
ClassCMS中通过C函数调用各个应用的方法,钩子功能依靠C函数实现,通过钩子可以很容易实现各种网站功能.
钩子可以修改调用应用方法时的参数,也可以修改应用方法返回的结果.
hook方法
应用主文件内 hook方法,返回当前应用的钩子列表.
hookname为当前应用的方法,hookedfunction为被挂载钩子的应用方法,enabled为是否启用钩子,requires为钩子执行条件.
hookname hookedfunction区分大小写,必须与应用方法名大小写一致.
当应用在后台(启用,更新,后台应用设置保存)时,钩子列表会存入数据库中.
function hook(){
$hooks=array();
$hooks[]=array('hookname'=>'articleadd','hookedfunction'=>'cms:article:add','enabled'=>1);
$hooks[]=array('hookname'=>'articleedit','hookedfunction'=>'cms:article:edit','enabled'=>1);
Return $hooks;
}
如果articleadd或articleedit方法在应用的其它模块中,则hookname改成 模块名:方法,如模块名为article
function hook(){
$hooks=array();
$hooks[]=array('hookname'=>'article:articleadd','hookedfunction'=>'cms:article:add','enabled'=>1);
$hooks[]=array('hookname'=>'article:articleedit','hookedfunction'=>'cms:article:edit','enabled'=>1);
Return $hooks;
}
钩子执行条件
requires为2.2版本新增,可以为钩子前置执行条件,避免加载不必要的文件.
目前支持get post p args config globals参数,多个参数之间使用";"分隔
如:
get.do=admin:class:index 代表$_GET['do']=admin:class:index 时才会执行钩子
p 代表当前用户权限,如 p.index 当前用户需要有本应用index权限才会执行钩子,详见 应用权限
args 代表钩子方法的参数,如args.1=1;args.2=2 代表C('xxx:xxx',$a,$b)中$a=1,$b=2时才会执行钩子,(监听钩子可以使用args.3判断方法返回值)
config 代表当前应用变量,如config.var1=666 详见:应用主文件 config 应用变量.
globals 代表全局变量,判断是否在后台:globals.C.admin.load
function hook() {
$hooks=array();
$hooks[]=array('hookname'=>'show','hookedfunction'=>'admin:body','enabled'=>1,'requires'=>'get.do=admin:class:index');
$hooks[]=array('hookname'=>'show2','hookedfunction'=>'admin:body','enabled'=>1,'requires'=>'config.var1=666;p.index');
Return $hooks;
}
4.1版本新增钩子大于等于、小于等于、不等于判断,如:get.id>=666;config.xxx<=6;args.2.1!=1