今日有用户反应设置了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;
}