·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

X3系列通用:连续回帖自动合并到同一楼层,小hack~!

284 2
发表于 2022-9-17 10:19:15 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
效果如下图:
X3系列通用:连续回帖自动合并到同一楼层,小hack~! 系列,通用,连续,回帖,自动
第一步: 修改方法:
打开文件: \source\include\post\post_newreply.php 查找:
  1. $return = $modpost->newreply($params); $pid = $modpost->pid;
复制代码
然后替换为:
  1.     ########### 叠加快速的回复#######################     $_insertword = "\n\n[size=2][color=gray][u]{$_G['username']} 于 ".date("Y-m-d H:i:s", time())." 补充以下内容[/u]:[/color][/size]\n";//追加内容前缀          $_maxlength = 80;//字符数大于此值则一律不合并,注意1中文=2字符(GBK)或3字符(UTF)     $_reducesmile = 1;//设为1=去除表情之后计算字数,0=否     $_reducequote = 1;//设为1=去除引用之后计算字数,0=否     $_reducespace = 1;//设为1=去除空白换行之后计算字数,0=否     $_reducefirst = 1;//设为仅限回复, 0关闭.     $_reducetime  = 2000;//回复过多少秒后不再叠加     $_blackfids = array(53,54,55,61);//版块FID黑名单,此名单内不进行合并     $_whitefids = array();//版块FID白名单,此名单内进行合并,黑白名单同时存在时白名单无效     $discuz_uid = $_G['uid'];     $fid = $_GET['fid'];     $tid = $_GET['tid'];          //设置部分结束     if($_blackfids && $_whitefids) unset($_whitefids);          $temp = $message;     if(is_array($smilies))if($_reducesmile) foreach($smilies as $sm) {             $temp = str_replace($sm['code'], '', $temp);             }     if($_reducequote) $temp = preg_replace("/\s*\[quote\][\n\r]*(.+?)[\n\r]*\[\/quote\]\s*/is", '', $temp);     if($_reducespace) $temp = preg_replace("/\s/is", '', $temp);     $temp = trim($temp);     $length = strlen($temp);     unset($temp);          if($length <= $_maxlength && (!$_blackfids || !in_array($fid, $_blackfids)) && (!$_whitefids || in_array($fid, $_whitefids))) {             $tablename = DB::table('forum_post');                          $q =  DB::fetch_all("SELECT `authorid`, `pid`,`first`,`dateline` FROM $tablename WHERE tid='$tid' AND invisible='0' ORDER BY pid DESC LIMIT 1");             $q = $q[0];             if($_reducefirst && $q['first']==1)                 $discuz_uid = 0;             if(($q['dateline']+$_reducetime) <= time())                 $discuz_uid = 0;                          if($q['authorid'] == $discuz_uid && !$attachment && !$isanonymous) {                 $message = $_insertword . $message;                 DB::query("UPDATE $tablename SET `smileyoff` = '0', `bbcodeoff` = '0',`tags`='superposition', `message` = CONCAT(message, '$message') WHERE pid='{$q['pid']}'");                 $pid  = ($q['pid']+0);                 $modpost->pid  = $pid;                 $return = 'post_reply_succeed';                 $modpost->param('showmsgparam', array('fid'=>$_GET['fid'], 'tid'=>$_GET['tid'],'pid'=>$pid, 'from'=>'','sechash'=>''));                 $page = getstatus($modpost->thread['status'], 4) ? 1 : @ceil(($modpost->thread['special'] ? $modpost->thread['replies'] + 1 : $modpost->thread['replies'] + 2) / getglobal('ppp'));                 $modpost->param('page', $page);             }     }          if(!$pid){                $return = $modpost->newreply($params);             $pid = $modpost->pid;     }     ################################### 叠加回复处理完成 ################################
复制代码
第二步修改方法:
打开文件:\source\module\forum\forum_viewthread.php 查找:
  1. include template('common/footer_ajax');
复制代码
在这一行的上面增加如下代码(解决叠加时楼层显示多个的问题):
  1.     if($post['tags'] === 'superposition')     echo '<span id="tyjs"><script type="text/javascript">var rages = '.time().'; $("pid'.$_GET['viewpid'].'").parentNode.outerHTML=""; $("tyjs").outerHTML="";</script></span>';
复制代码
我要说一句 收起回复
一花一世界,一叶一追寻。一曲一场叹,一生为一人。

评论2

teliy 发表于 2023-1-30 15:16:24 | 查看全部 | MiuiBrowser | XiaoMi
回帖合并
我要说一句 收起回复
回复

使用道具 举报

Discuz智能体Lv.8 发表于 2025-3-19 01:58:46 | 查看全部
你提供的代码是一个用于实现Discuz! X3系列论坛中连续回帖自动合并到同一楼层的Hack。这个Hack的主要功能是当用户在短时间内连续回复同一个帖子时,系统会自动将这些回复合并到同一个楼层中,而不是创建多个楼层。这样可以减少帖子的冗余,提升用户体验。

### 代码解析

1. **修改 `post_newreply.php` 文件**:
   - 这个文件负责处理用户提交的新回复。
   - 代码中定义了一些变量来控制合并回复的行为,比如:
     - `$_insertword`:定义在合并回复时添加的前缀内容。
     - `$_maxlength`:设置合并回复的最大字符数限制。
     - `$_reducesmile`、`$_reducequote`、`$_reducespace`:这些变量用于控制是否去除表情、引用和空白字符后再计算字数。
     - `$_reducefirst`:控制是否仅限回复时合并。
     - `$_reducetime`:设置回复的时间间隔,超过这个时间间隔的回复将不再合并。
     - `$_blackfids` 和 `$_whitefids`:用于设置版块的黑名单和白名单,控制哪些版块的帖子不进行合并。

   - 代码通过计算回复内容的长度,并根据设置的条件判断是否进行合并。如果满足条件,则将新回复的内容追加到之前的回复中,而不是创建一个新的楼层。

2. **修改 `forum_viewthread.php` 文件**:
   - 这个文件负责显示帖子内容。
   - 增加的代码用于解决在合并回复时楼层显示多个的问题。通过JavaScript代码动态删除多余的楼层显示,确保合并后的回复只显示一个楼层。

### 使用注意事项

1. **备份文件**:
   - 在修改任何文件之前,务必备份原始文件,以防止修改错误导致系统无法正常运行。

2. **字符编码**:
   - 代码中提到的字符数计算是基于GBK或UTF-8编码的。如果你的论坛使用的是其他编码,可能需要调整字符数的计算方式。

3. **版块设置**:
   - 如果你不希望某些版块的帖子进行合并,可以通过 `$_blackfids` 和 `$_whitefids` 变量进行设置。注意,如果同时设置了黑名单和白名单,白名单将无效。

4. **时间间隔**:
   - `$_reducetime` 变量控制回复的时间间隔。你可以根据实际需求调整这个值,以控制合并回复的时间范围。

5. **测试**:
   - 在正式使用之前,建议在测试环境中进行充分的测试,确保合并功能正常工作,并且不会影响论坛的其他功能。

### 总结

这个Hack可以有效地减少论坛中连续回复导致的楼层冗余问题,提升用户体验。通过合理的设置,你可以控制哪些版块的帖子进行合并,以及合并的时间间隔等。如果你在实施过程中遇到任何问题,可以参考Discuz!的开发手册或寻求社区的帮助。

如果你有更多关于Discuz!开发的问题,欢迎继续提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:3.144.229.96,GMT+8, 2025-4-6 20:46 , Processed in 0.315149 second(s), 81 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表