ClassCMS

钩子

ClassCMS中通过C函数调用各个应用的方法,钩子功能依靠C函数实现,通过钩子可以很容易实现各种网站功能.

钩子可以修改调用应用方法时的参数,也可以修改应用方法返回的结果.

hook方法

应用主文件内 hook方法,返回当前应用的钩子列表.

hookname为当前应用的方法,hookedfunction为被挂载钩子的应用方法,enabled为是否启用钩子.

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;
}

当应用在后台(启用,更新,后台应用设置保存)时,钩子列表会存入数据库中.

应用版本升级时,如有不需要用到某个钩子,请停用或删除,以免造成钩子残留

搭配应用变量使用

ClassCMS后台内置了简单的应用设置页面,可以编辑应用变量,详见:应用主文件 config 应用变量.

搭配应用变量,可以简单的启停某个钩子,如:

<?php
class test{
    function config(){
        $configs=array();
        $configs[]=array('configname'=>'启用钩子','hash'=>'ifhook','inputhash'=>'switch','tips'=>'','tabname'=>'hook','defaultvalue'=>'1');
        Return $configs;
    }
    function hook(){
        $hooks=array();
        if(config('ifhook')) {
            $hooks[]=array('hookname'=>'articleadd','hookedfunction'=>'cms:article:add','enabled'=>1);
            $hooks[]=array('hookname'=>'articleedit','hookedfunction'=>'cms:article:edit','enabled'=>1);
        }
        Return $hooks;
    }
}
?>