ClassCMS

钩子

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