Discuz!官方免费开源建站系统

 找回密码
 立即注册
搜索

[求助] discuz hook插件的解释

[复制链接]
高手之烟花易冷 发表于 2012-12-1 11:17:53 | 显示全部楼层 |阅读模式
本帖最后由 高手之烟花易冷 于 2013-7-9 10:54 编辑

最近在为discuz hook的解释在搞了很久,搜了些资料又没怎么解释清楚,都只说是discuz放插件的钩子,但是,作为想二次开发的同学来讲,这个解释可定是不满意滴。所以,本人又自己查了代码,不幸被我发现了,希望对同学们有帮助....

<!--{hook/viewthread_postbottom $postcount}-->

$postcount 每页的楼层数,楼主为0 ,刚好$postcount=0时是可见的,等于别的值是不可见的,所以,就只有在每版的第一楼可见,其他楼层不可以见...

class_template.php 执行的语句为这句 function hooktags(){}

上面结合就等于执行了下面这句代码,多的不解释,自己去研究代码!
hooktags('viewthread_postbottom', $postcount);

教程出自于上线网络科技 更多解决方案,请访问,http://www.sxwlkj.net

评分

1

查看全部评分

回复

使用道具 举报

 楼主| 高手之烟花易冷 发表于 2012-12-5 10:37:45 | 显示全部楼层
1.$this->replacecode['search'][$i] = $search = "<!--HOOK_TAG_$i-->";

2.$this->replacecode['replace'][$i]

总结,函数一为查找的东西,模版里面的东西,函数二是程序正式运行的代码,等价于,把函数一的

内容替换成php能够执行的函数二。
回复

使用道具 举报

 楼主| 高手之烟花易冷 发表于 2012-12-5 10:44:23 | 显示全部楼层
由上面2个帖子可以得出

1.<!--{hook/viewthread_postbottom $postcount}--> // 模版里面的插件钩子

2.$_G['setting']['pluginhooks']['$hookid']$key;                                // 真正模版里面执行的php代码


二者对比发现
viewthread_postbottom 为 $hookid

$postcount 为 $key

值得注意的是,这个数组,只存在这个值 $_G['setting']['pluginhooks']['$hookid'][0]

故,在模版里面hook的写法可以写为  

<!--{hook/viewthread_postbottom $postcount}--> 只在每页第一楼执行

<!--{hook/viewthread_postbottom 0}-->  帖子的所有楼层显示php代码

另:如有不同见解,请跟贴,本人道行不高,只能解析到这里


回复

使用道具 举报

fantasy02 发表于 2012-12-5 21:00:47 | 显示全部楼层
请教你个问题,插件中的对应的函数返回值能否是一个数组,像这个,

他是如何区分不同楼层使用不同的?

难道是<!--{hook/viewthread_postbottom 1}-->表示2楼?我试了,结果是出错,

回复

使用道具 举报

 楼主| 高手之烟花易冷 发表于 2012-12-6 10:29:04 | 显示全部楼层
本帖最后由 高手之烟花易冷 于 2012-12-6 11:56 编辑
fantasy02 发表于 2012-12-5 21:00
请教你个问题,插件中的对应的函数返回值能否是一个数组,像这个,

他是如何区分不同楼层使用不同的?

没明白我的意思吗? <!--{hook/viewthread_postbottom 1}--> 这个表示返回值的数组第二个值,但是返回来的值只存在 <!--{hook/viewthread_postbottom 0}-->即数组第一个值, 不存在1(即数组第二个值)。

<!--{hook/viewthread_postbottom $postcount}-->这样写的目的是,只让每页的一楼存在这个钩子,就比如:数组 $arr=array(0=>'内容'); 你只能等到$arr[0];而不能得到$arr[1]... 一样的道理,如果还想了解,你按我的方法去研究代码


另:放回的是不是数组,要看插件作者返回的是不是数组,一般讲来返回的是数组,比如“百度分享”插件返回的是

return array('<div style="float:left;padding-top:5px;margin-bottom:25px;width:100%">' . $this->script . '</div>'); // 很明显是数组,并且你怎么可能得到1的值能,这里就只有一个0的值

又如果,插件作者这样写return '<div style="float:left;padding-top:5px;margin-bottom:25px;width:100%">' . $this->script . '</div>'; // 很明显是字符串,那我们的hook如果是自定义的话,那么就应该这么写 <!--{hook/viewthread_postbottom}--> 这样也是正确的,如果我们这样写<!--{hook/viewthread_postbottom 100}-->,那程序会截取第99个字符,现在总明白了吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2025-11-25 17:44 , Processed in 0.108166 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表