DiscuzX2中相对DiscuzX1.5在插件嵌入点上的一些变化

1.家园模块的嵌入点重构

家园模块里面,还是不像其他模块使用。其他模块里面,可以使用

class plugin_identifier_CURSCRIPT {
function CURMODULE_USERDEFINE[_output]() {}
}

来定义脚本嵌入点
CURMODULE 指明了此函数在哪个模块执行,可通过常量 CURMODULE 得到当前页面的 CURMODULE 值。 USERDEFINE 可自定义,比如我习惯用插件identifier来填充,如果函数名以“_output”结尾则会在模板输出前调用,否则会在模块执行前调用。 CURSCRIPT是嵌入点位于的脚本名,如 forum.php 为 forum。
在X1.5里面,家园模块的嵌入点被重新格式化为

function space|spacecp_USERDEFINE[_output]() {}

在X2里面,家园模块的嵌入点被重新格式化为

function space|spacecp_$_GET['ac']_USERDEFINE[_output]() {}

因此带来的问题就是如果用户访问的时候没有带上ac参数,dz会显示默认页面。脚本也不执行。可以在common()之类的全局嵌入点里面修正这个偏差X1.5没有common嵌入点,自己找替代品
2.注册模块的嵌入点的变化。
在X1.5,显示注册成功的方式有两个。如果开启注册ajax,可以使用showmessage的嵌入点来捕获到这个行为,如果没开启注册ajax,显示注册成功的页面是注册模板里面的js显示的。因而插件使用showmessage就不能捕获到这个行为。
这是很坑爹的。DZX1.5 注册成功的提示 不是完全是showmessage来显示的 !!!!!。经过查阅代码和测试。X1.5上,在注册模块上,如果是inajax 可以使用 $message +$_G['uid']变量来判断是否注册成功,如果是不 inajax 可以使用$param+$_G['uid']变量来判断。 当然,如果你在之前的hook里面写了其他变量的话,也可以拿来这里判断 增加可靠性。
X2注意到了这个问题,完成了修复工作。在X2里面非inajaxd时候,你也可以使用

function register_cczu_sm_message($param) {}

这样的消息钩子来捕获showmessage显示的信息,从而来判断用户是否已经注册成功。
参数$param['param']是传递给showmessage的参数数组。$param['param'][0]就是没有被转转义的英文信息。比如查阅语言包得知 register_succeed和register_succeed_location都可能代表注册成功,那么我们可以这样判断用户注册成功的条件

stripos($param['param'][0], 'register_succeed') !== FALSE

然后执行相关动作。

Author Info :
  • From:DiscuzX2中相对DiscuzX1.5在插件嵌入点上的一些变化
  • URL:https://blog.ihipop.com/2012/03/3081.html
  • Please Reserve This Link,Thanks!
  • 发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注