Emlog评论BUG修复方法

  • 内容
  • 相关

  今天,我在自己博客测试的时候发现用户的评论自己是没法看到的,更别说管理了。于是,就问独狼,他让我反馈给EM的开发组,但是,基于6快出了,我想开发组应该不会去管了,于是我让独狼帮解决这个BUG,他经过好几次的测试发现是EM内核的原因,出现点是在include/model/comment_model.php第40行,你会发现一个b.author=UID的信息,这什么意思呢,b就是前面的emlog_blog表了,author就是用户作者ID,EM后台本身是存有一个用户增加的功能的,那增加一个用户后,你只要登录了后台前台文章中就不需要填写用户个人信息了,但这却给了评论提交的一个错误了,他提交并不是获取的单一用户名称,EM是先检测的用户昵称是否为空,为空则获取用户管理帐号,有昵称则获取昵称,那这样提交到数据库中comment表里面的poster就出现了2个用户名称了,而且用户登录过后台过去评论管理页面是无法查看到用户所评论的内容与评论在哪篇文章的。

如果没有改动,用户在后台是看不到评论管理的


解决方法:

  1、打开include/model/comment_model.php在大概40行

$andQuery .= ROLE != ROLE_ADMIN ? ' and b.author='.UID : '';
修改为
$CACHE = Cache::getInstance();
$user_cache = $CACHE->readCache('user');
$names = addslashes($user_cache[UID]['name']);
$andQuery .= ROLE != ROLE_ADMIN ? " and a.poster='$names'" : '';


  2、打开include/controller/comment_controller.php在大概21行

$name = addslashes($user_cache[UID]['name_orig']);
修改为
$name = addslashes($user_cache[UID]['name']);

  3、打开include/lib/cache.php找到用户信息缓存将以下代码覆盖保存

	private function mc_user() {
		$user_cache = array();
		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "user");
		while ($row = $this->db->fetch_array($query)) {
			$photo = array();
			$avatar = '';
			if(!empty($row['photo'])){
				$photosrc = str_replace("../", '', $row['photo']);
				$imgsize = chImageSize($row['photo'], Option::ICON_MAX_W, Option::ICON_MAX_H);
				$photo['src'] = htmlspecialchars($photosrc);
				$photo['width'] = $imgsize['w'];
				$photo['height'] = $imgsize['h'];
 
				$avatar = strstr($photosrc, 'thum') ? str_replace('thum', 'thum52', $photosrc) : preg_replace("/^(.*)\/(.*)$/", "\$1/thum52-\$2", $photosrc);
				$avatar = file_exists('../' . $avatar) ? $avatar : $photosrc;
			}
			//$row['nickname'] = empty($row['nickname']) ? $row['username'] : $row['nickname'];
			$user_cache[$row['uid']] = array(
				'photo' => $photo,
				'avatar' => $avatar,
				'name_orig' => htmlspecialchars($row['nickname']),
				'name' => htmlspecialchars($row['username']),
				'mail' => htmlspecialchars($row['email']),
				'des' => htmlClean($row['description']),
                'ischeck' => htmlspecialchars($row['ischeck']),
                'role' => $row['role'],
				);
		}
		$cacheData = serialize($user_cache);
		$this->cacheWrite($cacheData, 'user');
	}

修改好cache.php后前往后台数据更新缓存记录,以上几步就是修改后台用户无法查看评论列表的方法了。

在此,感谢独狼

本文标签:

版权声明:若无特殊注明,本文皆为《Finally》原创,转载请保留文章出处。

本文链接:Emlog评论BUG修复方法 - https://pjax.cn/em_bug.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

允许邮件通知

评论

3条评论
    1. avatar

      不锈钢网 Lv.1 Internet Explorer 6.0 Windows XP 回复

      不错的文章,内容出神入化.禁止此消息:nolinkok回复了163.com
      不锈钢网 http://www.hbbuxiugangwang.com/

      河北省衡水市阜城县 电信

      1. avatar

        mrxn Lv.6 IBrowse r Android 4.4.4 回复

        貌似我没有这问题。。

        黑龙江省鸡西市 联通

        00:00 / 00:00
        顺序播放