1、如何保证主题被回复时业务代码被执行。
通过嵌入点,选择使用嵌入类。
2、获得主题,主题发布者,贴子等信息。
3、discuz发送email邮件。
discuz使用嵌入点(钩子)来处理代码的执行时机。
![discuz回贴通知插件实现-页面嵌入点(钩子) - 怀素真 - 因上努力 果上随缘 discuz回贴通知插件实现-页面嵌入点(钩子) - 怀素真 - 因上努力 果上随缘](http://img0.ph.126.net/2wSQ-1wYRlWN4bOQVnCYvA==/6630701628329267172.png)
当用户开启插件开发者模式时,页面上会输出提供好的预先定义的嵌入点。
例如:我们需要在用户发贴时,告知用户是否开启了回贴通知。
![discuz回贴通知插件实现-页面嵌入点(钩子) - 怀素真 - 因上努力 果上随缘 discuz回贴通知插件实现-页面嵌入点(钩子) - 怀素真 - 因上努力 果上随缘](http://img1.ph.126.net/NpTvDy4IFm4arQYcXuGdxg==/2768306395967421748.png)
1、我们在插件后台添加页面嵌入
![discuz回贴通知插件实现-页面嵌入点(钩子) - 怀素真 - 因上努力 果上随缘 discuz回贴通知插件实现-页面嵌入点(钩子) - 怀素真 - 因上努力 果上随缘](http://img1.ph.126.net/TP9EbsSWBJf7bhTOHi4raw==/6630397063607657851.png)
2、在插件目录下创建noticeme.class.php文件
该文件为类文件,定义该插件的嵌入类,该类中的方法就是嵌入点中的钩子方法。
嵌入类:1、全局嵌入类,2、模块嵌入类<?php //判断是否被常规请求 defined('IN_DISCUZ') or die('Access Denied'); //全局嵌入类 class plugin_插件标识符 { } //模块嵌入类 class plugin_插件标识符_forum extends plugin_插件标识符 { }
<?php //判断是否被常规请求 defined('IN_DISCUZ') or die('Access Denied'); //全局嵌入类 class plugin_post_notice { } //模块嵌入类 class plugin_post_notice_forum extends plugin_post_notice { //嵌入贴子发表的钩子函数 public function post_top() { //当前$_G成为全局$_G的一个引用 global $_G; $mForumPostNotice = C::t('#post_notice#forum_post_notice'); $isNotice = $mForumPostNotice->getNoticeState($_G['uid']); return $isNotice ? lang('plugin/post_notice', 'enable_notice') : lang('plugin/post_notice', 'disable_notice'); } }
![discuz回贴通知插件实现-页面嵌入点(钩子) - 怀素真 - 因上努力 果上随缘 discuz回贴通知插件实现-页面嵌入点(钩子) - 怀素真 - 因上努力 果上随缘](http://img0.ph.126.net/lutoai53ChdQKYbvoUUqlA==/6619135865515190010.png)
除了页面上可以看到的嵌入点,discuz在所有模块执行前,都会执行嵌入函数(钩子)。