• [织梦吧]唯一域名:www.dedecms8.com,织梦DedeCMS学习平台.

当前位置: > CMS教程 > discuz教程 >

干扰码不可见的问题检查步骤与discuzcode分析。

来源: www.dedecms8.com 编辑:织梦吧 时间:2012-02-07点击:
 

最近在bug区有好几位会员反映设置了干扰码但是却没有出现干扰码,这个怀疑是BUG。那么我们就来看看如何检查这个是否是bug。
在这里假定我们对discuzx结构不熟悉,该如何检查呢?
首先设置了干扰码,这个最终会存进数据库,那我们看看是存到了那里?
通过discuzx数据字典 http://dev.discuz.org/wiki/index ... E%E5%AD%97%E5%85%B8
搜索 干扰码我们看到
 

  1. jammer tinyint(1) NOT NULL default '0' COMMENT '是否启用干扰码'  

在pre_forum_forum表中

然后我们再寻找看帖中那块用到了这个设置。看帖的代码是在 forum_viewthread.php 中。如果你不知道是在这里。那么用文件搜索 关键字 jammer 结果中也能猜测到大概是在这个模块
QQ截图20110831092155.png 

关键的处理是在这个代码处
 

  1. $post['message'] = discuzcode($post['message'], $post['smileyoff'], $post['bbcodeoff'],
     $post['htmlon'] & 1, $_G['forum']['allowsmilies'], $_G['forum']['allowbbcode'], ($_G['forum']
    ['allowimgcode'] && $_G['setting']['showimages'] ? 1 : 0), $_G['forum']['allowhtml'], ($_G['forum']
    ['jammer'] && $post['authorid'] != $_G['uid'] ? 1 : 0), 0, $post['authorid'], $_G['cache']['usergroups']
    [$post['groupid']]['allowmediacode'] && $_G['forum']['allowmediacode'], $post['pid'], $_G['setting']['lazyload']);  

这个是一整行哦。看起来多,其实就是一个调用函数返回值给$post['message']的简单语句
$post['message'] = discuzcode(参数很多,很乱)整理一下
 

  1. 1、$post['message']  
  2.  
  3. 2、$post['smileyoff']  
  4.  
  5. 3、$post['bbcodeoff']  
  6.  
  7. 4、$post['htmlon'] & 1  
  8.  
  9. 5、$_G['forum']['allowsmilies']  
  10.  
  11. 6、$_G['forum']['allowbbcode']  
  12.  
  13. 7、($_G['forum']['allowimgcode'] && $_G['setting']['showimages'] ? 1 : 0)  
  14.  
  15. 8、$_G['forum']['allowhtml']  
  16.  
  17. 9、($_G['forum']['jammer'] && $post['authorid'] != $_G['uid'] ? 1 : 0)  
  18.  
  19. 10、0  
  20.  
  21. 11、$post['authorid']  
  22.  
  23. 12、$_G['cache']['usergroups'][$post['groupid']]['allowmediacode'] && $_G['forum']['allowmediacode']  
  24.  
  25. 13、$post['pid']  
  26.  
  27. 14、$_G['setting']['lazyload']  

一共14个参数。那我们再看discuzcode函数,如果不知道函数定义的位置,依旧可以文件搜索。function discuzcode
在 function_discuzcode.php 中看到了函数的定义。
找到处理干扰码的语句
 

  1. if($jammer) {  
  2.  
  3.                 $message = preg_replace("/\r\n|\n|\r/e", "jammer()", $message);  
  4.  
  5.         }  

看到 如果 $jammer 为真。那么就进行处理。那么 $jammer 是什么呢 就是我们传入的第九个参数
 

  1. ($_G['forum']['jammer'] && $post['authorid'] != $_G['uid'] ? 1 : 0)  

其实在刚才整理参数的这一步,我们就能判断出为什么看不到干扰码了。传入给 $jammer 的参数是 。如果$_G['forum']['jammer']  为真,并且 $post['authorid'] != $_G['uid'] 为真,传入1。也就是给$jammer 赋真值。就处理干扰码。
 

  1. 用白话描述就是 如果这个版块开启了干扰码,并且 发帖人不等于看贴人,就输出干扰码。  

About D8

  • ©2014 织梦吧(d8) DedeCMS学习交流平台
  • 唯一网址 www.DedeCMS8.com 网站地图
  • 联系我们 1170734538@qq.com ,  QQ