分析Discuz论坛回复可见的处理流程和原理

添加时间:15-05-25 所属分类:PHP工具与代码
  http://www.php1.cn/article/54833.html

回帖内容也是可以添加隐藏标签的,
只要用户用使用hide标签权限,当用户回复了该主题的时候也会将内容显示出来
回帖可见对游客也是有效的,

当一个用户在发帖的时候使用了hide标签,发布主题的时候会调用discuzcode函数对discuz代码进行解析,其中解析hide标签部分:
[code]if($parsetype != 1 && strpos($msglower, '[/hide]') !== FALSE && $pid) {
if(strpos($msglower, '[hide]') !== FALSE) {
if($authorreplyexist === null) {
$posttable = getposttablebytid($_G['tid']);
$authorreplyexist = !$_G['forum']['ismoderator'] ? DB::result_first("SELECT pid FROM ".DB::table($posttable)." WHERE tid='$_G[tid]' AND ".($_G['uid'] ? "authorid='$_G[uid]'" : "authorid=0 AND useip='$_G[clientip]'")." LIMIT 1") : TRUE;
}
if($authorreplyexist) {
$message = preg_replace("/[hide]s*(.*?)s*[/hide]/is", tpl_hide_reply(), $message);
} else {
$message = preg_replace("/[hide](.*?)[/hide]/is", tpl_hide_reply_hidden(), $message);
$message .= '<script type="text/javascript">replyreload += ',' + '.$pid.';</script>';
}
}
if(strpos($msglower, '[hide=') !== FALSE) {
$message = preg_replace("/[hide=(d+)]s*(.*?)s*[/hide]/ies", "creditshide(\1,'\2', $pid)", $message);
}
}
}[/code]

由于post表中,主题也是会被存在其中
[code]$authorreplyexist = !$_G['forum']['ismoderator'] ? DB::result_first("SELECT pid FROM ".DB::table($posttable)." WHERE tid='$_G[tid]' AND ".($_G['uid'] ? "authorid='$_G[uid]'" : "authorid=0 AND useip='$_G[clientip]'")." LIMIT 1") : TRUE; [/code]
这段代码能够查询出是被回复了(包括游客回复)

或者是版主,则用
[code]$message = preg_replace("/[hide]s*(.*?)s*[/hide]/is", tpl_hide_reply(), $message)[/code]
将hide标签部分的代码替换掉,
如果没有回复则用 tpl_hide_reply_hidden()处理掉hide标签部分的内容,

这里的函数来自于:discuzcode.htm,其中的函数原理在这里不做介绍

前篇:php的setcookie函数 后篇:960gs tips-辅助设计师进行快速创建网页原型...
发表我的评论


推荐文章   小区里的免费理发师:张传升   黄河大米的重振之路   一份工资收支表 见证四十年改革新成就—...   第一罐液化气是从北京背来的 济南燃气五...   在深山当38年老师,用草棒当笔交学生,...
随机文章   浅谈comet技术   javascript/php实现comet(ajax长轮询)...   用 Json 来实现 PHP 与 JavaScript 间数...   PHP验证码登陆校验   install.php简单制作
广告

其他推荐

因为本站所有内容均转载自其它媒体,本意为公众提供免费服务,但并不代表本网赞同其观点,也不能对其真实性验证负责,如稿件版权单位或个人不想在本网发布,请与我联系,本人会立即将其撤除,谢谢.联系方式:atseashawk@163.com QQ:99289555