Discuz开发 Discuz! X2冷门的嵌入点和细节记录

[复制链接]
ARCHY明星会员实名认证 发表于 2012-3-28 17:21:58 [Discuz开发] 显示全部楼层 |阅读模式 上一主题 下一主题

马上注册,一起探讨正确快速的建站方法

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
总结了一些可能在开发中会遇到的问题,分享给喜好插件开发的童鞋们。

关于嵌入点:

除了常见的模板的嵌入点以外,discuz! X2还有一些比较冷门的嵌入点,给大家总结下:

showmessage函数中的嵌入点
function_message.php的25行左右
  1. hookscript(CURMODULE, $_G['basescript'], 'messagefuncs', array('param' => $_G['messageparam']));
复制代码
对应的调用函数命名为 XXX_message(),可以接受一个传递参数。
参数的值为showmessage函数的所有参数的集合的一个数组。

该嵌入点可以用于输出成功提示之前执行操作。

discuzcode函数中的嵌入点
function_discuzcode.php的87行左右
  1. hookscript('discuzcode', 'global', 'funcs', array('param' => $param, 'caller' => 'discuzcode'), 'discuzcode');
复制代码
function_post.php的529行左右
  1. hookscript('discuzcode', 'global', 'funcs', array('param' => $param, 'caller' => 'messagecutstr'), 'discuzcode');
复制代码
对应的调用函数命名应为 discuzcode(),与showmessage的嵌入点类似,接受一个参数,参数为discuzcode函数所有参数的集合的一个数组。
'caller' 指明了入口函数是'discuzcode'还是'messagecutstr'。

该嵌入点通常用于处理discuzcode输出,可以定义插件专有的code替换代码。

deletethread和deletepost函数中的嵌入点
function_delete.php中
  1. hookscript('deletepost', 'global', 'funcs', array('param' => $hookparam, 'step' => 'check'), 'deletepost');
  2.     hookscript('deletepost', 'global', 'funcs', array('param' => $hookparam, 'step' => 'delete'), 'deletepost');
  3.     hookscript('deletethread', 'global', 'funcs', array('param' => $hookparam, 'step' => 'check'), 'deletethread');
  4.     hookscript('deletethread', 'global', 'funcs', array('param' => $hookparam, 'step' => 'delete'), 'deletethread');
复制代码
该嵌入点分别在删除主题(帖子)操作的前后执行,区别在于'step'参数的值。
对应的调用函数命名应为 deletethread()和deletepost(),接受一个参数以取得deletethread和deletepost函数所有参数。

该嵌入点用于执行删除主题(帖子)时,嵌入插件操作

关于返回值:

通过设置配置文件中的$_config['plugindeveloper'] = 2;可以在页面上看到模板中的嵌入点。
[array XXXX]这样的嵌入点需要返回array类型的数据,而不能是其他类型的数据。
如果返回空值会导致同一个嵌入点无法被其他插件再度使用,需要特别注意一下。
正确的做法是对于array类型的hook点,如果没有返回值,请return array();

关于安全方面:

任何插件脚本文件,在开始判断IN_DISCUZ是必须的,如果是后台执行的脚本,需要判断IN_ADMINCP。
对于任何形式的提交数据,请使用$_G['gp_XXX']的形式取得值,并且最好是做一些is_array、is_numeric的判断,减少一些意外的错误。
尽量不使用插件目录作为读写文件的目录,如果有读写文件的操作,放到data目录下比较合适
参与人数 1元宝 +3 帮币 +2 收起 理由
小六子 + 3 + 2 赞一个!

查看全部评分总评分 : 元宝 +3 帮币 +2





上一篇:discuz论坛设置过滤词无效的解决方法
下一篇:Discuz! X1.5/x2应用中心客户端下载

大神点评2

clswang 发表于 2012-3-28 17:32:08 [Discuz开发] 显示全部楼层
谢谢楼主分享
学习了
www.huaguow.com www.hanfanba.com www.shuyangweb.com www.qiwenguan.cn cygs.org
wmjhx431 发表于 2013-3-26 07:37:06 [Discuz开发] 显示全部楼层
路过
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

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