齐博x1齐博首创钩子的使用方法
齐博X1有两套钩子体系,第一套是基于TP思路设计的。跟外面的大同小异。现在重点讲一下第二套我们首创的使用方法。
首先说一下如何埋钩子,这个跟TP思路的钩子类似,就是在页面的任何地方加入如下代码即可
如下图$this->get_hook('index_begin',$data=[],$this->user);
它其实有5个参数,
第一个参数就是钩子标志,必须要唯一的,
第二个是参数$data
是可以改变其值的,一般用在POST表单的变量,比如发表的时候,你可以中途篡改其中的某项值
第三个$info
一般指从数据库取出的资料,
第四个$array
是综合项,比如里边有id fid之类的值,
第五项只能设置 true
或 false
默认是true 即同时调用 公共的文件 否则只能调用本频道插件的文件。
建议大家在开发频道或应用的时候,尽可能的多预留接口,埋好钩子,方便别人扩展二开。这个不会影响网站整体速度,因为这个不是预加载的,是访问到此页面的时候,才加载的。
下面再讲解一下如何使用?
如上图的文件\application\common\controller\IndexBase.php
里边加了一个index_begin
标志的钩子,那么就可以
创建目录\application\common\ext\index_begin\
在里边随便创建一个PHP文件,就可以实现钩子的调用了。
php的文件名必须是字母或数字或下画线或横杠线即负号
如下图
这种是把文件放在common目录是全站都能公用的。如果你的钩子文件只为具体某个频道考虑的话,就可以不要占用公共目录的资源,而只放在自己所在频道或插件目录即可。比如你只针对商城的钩子,就可以只在商城里边创建目录,如下所示:\application\shop\ext\index_begin\
如下图
也就是说钩子文件即可以放在频道插件目录,也可以放在公共区域的common目录下。
放进去就立即生效,不用做任何设置。要停用,就只能手工把文件删除。
频道目录与公共目录,如果存在同名的钩子文件, 那么公共目录的那个钩子就不生效。频道目录的优先级最高。
并且频道目录的所有钩子执行完毕以后,再执行公共目录的钩子文件。
对于当前目录的钩子文件执行顺序如下:
数值越小,越先执行,也即数字最先,其次是字母。如果有带符号的情况下。横杠线即负号开头的最先。然后就数字,然后才是下画线开头,最后才是字母。字母的话,a比z的优先级高。大家的钩子如果有逻辑顺序的话,要注意文件的命名规则。
钩子里边的代码如果出现
return true;
return false;
return [];
return '';
return '这是内容';
就会直接把后面的所有钩子终止掉,也就是后面的钩子不会再执行。
一般情况,不要return 任何东西。实在要return 的话,你可使用
return ;
return null;
这两种就不会终止后面的其它钩子执行。
包括第一种基于TP思路设计的钩子也是跟这个一样的情况。
在控制器里边用钩子,你可以直接使用当前类里边的属性及所有方法。因为本质上就相当于包含进来的代码。
而基于TP思路的钩子是不能 使用当前类的属性与方法的,因为它是执行引用外面的类。
如果不在控制器里边用钩子,比如在模型里边或者在模板里边用钩子的话,就用函数,而不能使用$this->get_hook
如下图
get_hook('cms_model_agree_begin',$data=[],$info,['id'=>$id],true);
这里用的是函数
参数跟上面的一样的。
在模板中的话就这样使用
{:get_hook('layout_body_head',$info,$userdb)}
如下图
在模型或模板中就不能使用当前的类的属性了,就跟TP思路的钩子差不多了。
本文来自博客园,作者:半抹灯芯,转载请注明原文链接:https://www.cnblogs.com/wanxiangsucai/p/15601072.html