使用hook钩子解决Discuz手机版回复特殊主题时的默认内容问题

2017-02-13 15:03 栏目:技术开发 查看(12856)

在Discuz二次开发的插件API中就有一个特殊主题,基于这个API我们可以基于Discuz的论坛帖子开发很多有价值的插件功能,比如非常经典的就有官方的那款积分商城插件,那个插件就用到了特殊插件。近期帮助湖南红网基于论坛帖子开发在线图文直播功能的时候也用到了特殊主题。但在开发过程中我们发现了一个问题:在手机版的时候,我们回复特殊主题,发现在回复页面的输入框中已经有了默认的内容,而且是主题帖的内容加上插件的标识。如图所示:

2342

经过分析dz的源代码,发现是在模板中有一个$postinfo[message],而这个变量就是默认输入框的数据,再切换在逻辑层,发现这个$postinfo定义的条件就是当主题帖是特殊主题的时候(当然还有其他的条件)。其实我也没搞清楚dz默认的代码为什么要做这样一个处理,至少针对目前的需求我认为这个处理是帮倒忙,那么怎么屏蔽掉这个处理。可能首先想到的就是直接修改就行了,而实际上红网的该部分文件是不可能被我们来操作的(因为这个文件是dz的核心文件,原则上是不让动的)。

那么我们只能考虑插件来解决了,我们发现在帖子回复页面存在post_bottom_mobile这个hook,那么我们在直播插件中定义一个手机版的页面嵌入点即可。其中主要代码可以是如下:

class mobileplugin_muquan_zhibo {
}
class mobileplugin_muquan_zhibo_forum extends mobileplugin_muquan_zhibo {
  function post_bottom_mobile_output(){
     global $postinfo;
     $postinfo='';
  }
}

上述是什么意思呢,意思就是在该页面程序执行后模板输出前执行post_bottom_mobile_output方法,这个方法的作用就是把$postinfo重置为空,当然销毁也是可以的,具体的方法阅读dz的开发文档即可。好了之后的效果就是跟回复普通主题一样了。

535

而dz默认情况下针对特殊主题回复的这个处理是否有别的用处,暂时不得而知,如果该处理有非常重要的用途,那么就要换其他方式来解决了。

与我们的项目经理联系
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流

转载请注明出处:使用hook钩子解决Discuz手机版回复特殊主题时的默认内容问题 - 微构网络
分享: