Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

【完美解决】帖子内个人资料(如性别、QQ)项不显示的问题分析,性别不显示的问题。

[复制链接]
m.king 发表于 2011-10-18 12:26:00 | 显示全部楼层 |阅读模式
今日有用户反应设置了QQ在帖子里显示,但是帖子仍不显示的问题。
排查后特给出具体的分析。
后台设置QQ项的隐私,如图:

在source\admincp\admincp_setting.php文件中的处理有如下代码:
  1. foreach($settingnew['customauthorinfo'] as $field => $v) {
  2. if(substr($field, 0, 6) == 'field_' && ($v['menu'] || $v['left'])) {
  3. //如果$field前6个字符等于field_(即个人资料里的设置),同时此设置在头像菜单里显示($v['menu'])或者在贴内左侧($v['left'])显示
  4. $showinthreadfields[] = substr($field, 6);
  5. //substr($field, 6)为field_后面的值,如QQ的key值为field_qq,则substr($field, 6)为qq
  6. //将满足条件的值添加到数组$showinthreadfields中
  7. }
  8. }
  9. //中间代码省略
  10. if($showinthreadfields) {
  11. DB::update('common_member_profile_setting', array('showinthread' => 1), "fieldid IN (".dimplode($showinthreadfields).")");
  12. //将在$showinthreadfields中的相应项在common_member_profile_setting表中的showinthread字段置为1
  13. }
复制代码

从这段代码可以看出,QQ选项在common_member_profile_setting表中的showinthread字段被置为了1.
下面分析在家园设置QQ选项时的处理:
找到template\default\home\spacecp_profile.htm文件
  1. <!--{if $value[showinthread] || $vid}-->
  2. <input name="privacy[$key]" value="3" type="hidden">
  3. <!--{else}-->
  4. <select name="privacy[$key]">
  5. <option selected="selected" value="0" if}="" {="" ?0?}="" $privacy[$key]="=" {if="">{lang open_privacy}</option>
  6. <option selected="selected" value="1" if}="" {="" $privacy[$key]="=" {if="" ?1?}="">{lang friend_privacy}</option>
  7. <option selected="selected" value="3" if}="" {="" $privacy[$key]="=" {if="" ?3?}="">{lang secrecy}</option>
  8. </select>

  9. <!--{/if}-->
复制代码

从这里可以看出,如果$value[showinthread]存在,则此项的隐私类型privacy[$key]直接被置为了3(value=”3″)。
privacy[$key]值的代表意义:
0:公开
1:好友可见
3:保密
这里会导致存入到common_member_home_field表中的关于此项设置(QQ)的隐私设置为3,即保密。
不明白此处为何有一处这样的判断,不知道当初是如何设计的。
因此处导致该会员关于QQ的隐私设置为保密,进而会导致前台帖子内无法显示。
因为隐私项是不显示的,具体见source\module\forum\forum_viewthread.php文件中的代码:


  1. if(!empty($post['privacy']['profile'][$field])) {
  2. continue;
  3. }
复制代码




为爱狂奔 发表于 2011-10-18 12:38:53 | 显示全部楼层
本帖最后由 为爱狂奔 于 2011-10-18 12:39 编辑

是要删除那段代码呢还是替换为:
  1. if(!empty($post['privacy']['profile'][$field])) {
  2. continue;
  3. }
复制代码

回复

使用道具 举报

 楼主| m.king 发表于 2011-10-18 12:49:37 | 显示全部楼层
为爱狂奔 发表于 2011-10-18 12:38
是要删除那段代码呢还是替换为:

这是不明白的地方 你不动它。
不明白此处为何有一处这样的判断,不知道当初是如何设计的。
回复

使用道具 举报

 楼主| m.king 发表于 2011-10-18 13:01:22 | 显示全部楼层
去掉
spacecp_profile.htm
  1. <!--{if $value[showinthread] || $vid}-->

  2. <input type="hidden" name="privacy[$key]" value="3" />

  3. <!--{else}-->
复制代码
将这部分去掉$value[showinthread] ||
回复

使用道具 举报

netfeiniao 发表于 2011-10-18 13:39:55 | 显示全部楼层
m.king 发表于 2011-10-18 13:01
去掉
spacecp_profile.htm
中将这部分去掉$value[showinthread] ||

我也发现了
打了1010补丁以后,性别就有时显示有时候不显示

去掉这个  这样就可以解决吗?
回复

使用道具 举报

 楼主| m.king 发表于 2011-10-18 13:49:32 | 显示全部楼层
netfeiniao 发表于 2011-10-18 13:39
我也发现了
打了1010补丁以后,性别就有时显示有时候不显示

你试试看。
回复

使用道具 举报

wdcasc 发表于 2011-10-18 13:52:02 | 显示全部楼层

找到template\default\home\spacecp_profile.htm文件
搜索代码

  1.     <!--{if $value[showinthread] || $vid}-->

  2.     <input type="hidden" name="privacy[$key]" value="3" />

  3.     <!--{else}-->
复制代码

并删除当中的

  1.     $value[showinthread] ||
复制代码




回复

使用道具 举报

 楼主| m.king 发表于 2011-10-18 14:03:28 | 显示全部楼层
wdcasc 发表于 2011-10-18 13:52
找到template\default\home\spacecp_profile.htm文件
搜索代码

你的解决了?
回复

使用道具 举报

tmzxcy0123 发表于 2011-10-18 14:12:35 | 显示全部楼层
标题蛮吸引人的,进来看看!
回复

使用道具 举报

neol123 发表于 2011-10-18 15:51:18 | 显示全部楼层
看了分析应该是一个BUG ?

如果是BUG  希望官方可以出一个比较好的解决方案

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-27 13:48 , Processed in 0.028534 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表