美妙社 - MeiMiaoShe.com
不只是一个[美味]且[奇妙]的社区
现在注册
已注册用户请  登录
节点活跃用户
DivivitYan  • 26 讨论
MMS_LJfOrMxm  • 1 讨论
不看回复  • 1 讨论
我的记忆误解了  • 1 讨论
罗钊刚  • 1 讨论
美妙社  ›  建站笔记

解决DZ留言板的BUG:被留言后的提醒链接错误

DivivitYan听音乐 Discuz! 2021-11-7 21:46:095.1K 次点击 阅读模式     
DZ的留言板存在几个逻辑错误,在修正回复留言的ID之后,回复客人的留言会正确显示在主人的留言板上,这时客人会收到一条提醒,点开这个提醒的链接,还是指向客人的空间,打开是空白内容。这里要相应的把链接修改正确。

修改文件:\source\function\function_comment.php

修改1:提醒链接中的空间UID由客人的改为主人的

  1. $n_url = "home.php?mod=space&uid=$tospace[uid]&do=wall&cid=$cid";
复制代码
改为
  1. $n_url = "home.php?mod=space&uid={$id}&do=wall&cid=$cid";
复制代码

修改2:把被回复的对象--客人的UID修改正确

由于前面做了两步修改,就会造成一个混乱:ID、回复者的ID、被回复的ID全都是主人的,都不知道回复了谁,所以要把被回复者的ID改为客人的。

  1. case 'uid':
  2.                         $tospace = getuserbyuid($id);
复制代码
替换为
  1. case 'uid':
  2.                        if($cid && $comment && $comment['authorid'] != $_G['uid'] && $comment['idtype'] == 'uid') {
  3.                                 $tospace = $comment['authorid'];
  4.                         }else {
  5.                                 $tospace = getuserbyuid($id);
  6.                         }
复制代码
       之其然还要知其所以然,多思考就可以慢慢进步。我们来分析一下上面这句代码:
        官方默认的$tospace这个变量代表的意思是被回复者。后面跟的getuserbyuid($id)指的是这次发布留言的人。当客人在主人的空间发布新留言时,发布留言的人是客人,这是对的。但当主人在自己的空间回复客人时,这个发布者就是主人,这时候用getuserbyuid($id)这个变量简单的获取到的是主人的UID,一赋值,成了主人=被回复者,完全错了。
所以我修改为两句判断。

        其中$cid指的是留言的ID号,如果是新留言,这个ID号是不存在。但如果是回复客人的留言,就指向客人留言的这个ID,也就是$cid。所以如果$cid不存在,就代表是新留言。如果$cid存在,就代表是回复留言。$comment['authorid']指的是$cid的发布者。两个合在一起就是说,$cid是客人发的,$comment['authorid']这个发布者也是客人。而$_G['uid']最常见了,就是当前登陆者,也就是空间的主人。
那我的判断的意思就是这样:

如果是回复客人的留言、且发布者不是客人、且留言种类是空间留言(不是什么相册留言、博客留言之类的),那么被留言者就是客人。

另外,被留言者就是主人。

这么一改就把两种情况都照顾到了,谁是发布者、谁是被回复者,就没错了。
啊舒服sdf
目前尚无回复
添加一条新回复
您需要登录后才可以回帖 登录 | 立即注册

本节点积分规则
站点统计  ·  手机版  ·  小黑屋  ·  帮助  ·  Archiver  ·  手机版  ·  小黑屋  ·  26 人在线  最高记录 291  ·  TOP
愿孤独的人都会唱歌,愿漂泊的人都有酒喝!
World is powered by solitude
GMT+8, 2024-4-20 22:35, Processed in 0.253068 second(s), 179 queries .

  Inspire by v2ex, Powered by Discuz! X3.5, Template by MeiMiaoShe.Com, © 2001-2024 Discuz! Team.