今日有用户反应设置了QQ在帖子里显示,但是帖子仍不显示的问题。
排查后特给出具体的分析。
后台设置QQ项的隐私,如图:
在source\admincp\admincp_setting.php文件中的处理有如下代码:
- foreach($settingnew['customauthorinfo'] as $field => $v) {
- if(substr($field, 0, 6) == 'field_' && ($v['menu'] || $v['left'])) {
- //如果$field前6个字符等于field_(即个人资料里的设置),同时此设置在头像菜单里显示($v['menu'])或者在贴内左侧($v['left'])显示
- $showinthreadfields[] = substr($field, 6);
- //substr($field, 6)为field_后面的值,如QQ的key值为field_qq,则substr($field, 6)为qq
- //将满足条件的值添加到数组$showinthreadfields中
- }
- }
- //中间代码省略
- if($showinthreadfields) {
- DB::update('common_member_profile_setting', array('showinthread' => 1), "fieldid IN (".dimplode($showinthreadfields).")");
- //将在$showinthreadfields中的相应项在common_member_profile_setting表中的showinthread字段置为1
- }
复制代码
从这段代码可以看出,QQ选项在common_member_profile_setting表中的showinthread字段被置为了1.
下面分析在家园设置QQ选项时的处理:
找到template\default\home\spacecp_profile.htm文件
- <!--{if $value[showinthread] || $vid}-->
- <input name="privacy[$key]" value="3" type="hidden">
- <!--{else}-->
- <select name="privacy[$key]">
- <option selected="selected" value="0" if}="" {="" ?0?}="" $privacy[$key]="=" {if="">{lang open_privacy}</option>
- <option selected="selected" value="1" if}="" {="" $privacy[$key]="=" {if="" ?1?}="">{lang friend_privacy}</option>
- <option selected="selected" value="3" if}="" {="" $privacy[$key]="=" {if="" ?3?}="">{lang secrecy}</option>
- </select>
- <!--{/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文件中的代码:
- if(!empty($post['privacy']['profile'][$field])) {
- continue;
- }
复制代码
|