解决社区名人堂/荣誉榜插件的用户资料页钩子挂载显示问题
我在六月份时候开始使用这个功能插件,早先就发现了这个问题,也没有深入研究,现在终于解决了,下面记录一下解决方法。首先我们定位问题文件/source/plugin/viewui_famous/hook.class.php(此为插件PC钩子文件)
搜索关键词space_profile_baseinfo_top_output
我们替换为优化后的代码
public function space_profile_baseinfo_middle_output(){
global $_G;
$output = '';
// 获取当前访问的目标用户ID
$targetUid = intval($_GET['uid']);
if(empty($targetUid)){
return $output; // 用户ID为空,返回空
}
// 关键:查询目标用户的用户组ID
$targetGroupId = DB::result_first(
"SELECT groupid FROM %t WHERE uid = %d",
array('common_member', $targetUid)
);
if(empty($targetGroupId)){
return $output; // 无用户组信息,返回空
}
// 查询该用户的名人堂荣誉
$honors = C::t('#viewui_famous#viewui_famous_people')->FetchPeopleHonors($targetUid);
// 验证条件:用户组权限+是名人堂用户+有荣誉信息
if($this->CheckUse($targetGroupId) && $this->CheckFamous($targetUid) && !empty($honors)){
$output .= '<h2 class="mbn" style="color: red;">'.lang('plugin/viewui_famous', 'gethonortitle').'</h2><ul>';
foreach($honors as $honor){
// 拼接荣誉信息HTML(包含链接和描述)
$output .= '<li>';
$output .= '<a href="plugin.php?id=viewui_famous&type='.$honor['typeid'].'#viewui-famous-famouslist-'.$honor['honorid'].'">';
$output .= $honor['name'].lang('plugin/viewui_famous', 'doc').$honor['honorname'];
if(!empty($honor['summary'])){
$output .= '<span style="color: #ff4800;">'.$honor['summary'].'</span>';
}
$output .= '</a></li>';
}
$output .= '</ul>';
}
return $output;
}我们继续搜索关键词space_profile_baseinfo_top_output
替换为优化后的代码
public function space_profile_baseinfo_top_output(){
global $_G;
$output = '';
// 获取当前访问的目标用户ID(从URL参数中获取)
$targetUid = intval($_GET['uid']);
if(empty($targetUid)){
return $output; // 若用户ID为空,直接返回空
}
// 关键:通过用户ID查询其对应的用户组ID(groupid)
$targetGroupId = DB::result_first(
"SELECT groupid FROM %t WHERE uid = %d",
array('common_member', $targetUid) // 查询Discuz用户表(common_member)
);
// 若查询不到用户组(如用户不存在),直接返回
if(empty($targetGroupId)){
return $output;
}
// 验证条件:使用用户组ID调用CheckUse,同时验证是否为名人堂用户及功能是否启用
if($this->CheckUse($targetGroupId) && $this->CheckFamous($targetUid) && ($this->openUserNameColor || $this->openUserNameBlod || $this->openIcon)){
$script = '';
// 目标元素选择器:用户名称容器(.kmtit .kmname)
$targetSelector = 'document.querySelector(\'.kmtit .kmname\')';
// 1. 设置字体加粗(如果启用)
if($this->openUserNameBlod){
$script .= 'var targetEl = '.$targetSelector.';';
$script .= 'if(targetEl) targetEl.style.fontWeight = \'800\';';
}
// 2. 设置文字颜色/渐变(如果启用)
if($this->openUserNameColor){
$script .= 'var targetEl = '.$targetSelector.';';
$script .= 'if(targetEl){';
// 处理渐变色(若颜色值含linear-gradient)
if(strpos($this->userNameColor, 'linear-gradient') !== false){
$script .= 'targetEl.style.background = \''.$this->userNameColor.'\';';
$script .= 'targetEl.style.webkitBackgroundClip = \'text\';';
$script .= 'targetEl.style.backgroundClip = \'text\';';
$script .= 'targetEl.style.color = \'transparent\';';
}else{
// 普通颜色直接设置color
$script .= 'targetEl.style.color = \''.$this->userNameColor.'\';';
}
$script .= '}';
}
// 3. 添加名人堂图标(如果启用)
if($this->openIcon){
$script .= 'var targetEl = '.$targetSelector.';';
$script .= 'if(targetEl){';
$script .= 'targetEl.innerHTML += \'<a href="plugin.php?id=viewui_famous&mod=my"></a>\';';
$script .= '}';
}
$output .= '<script>'.$script.'</script>';
}
return $output;
}
解释一下不加载钩子的原因及修复关键
[*]已修正 CheckUse 参数传递错误,确保传入用户组 ID 而非用户 ID
[*]由于我使用的是第三方模板,原代码依赖的 .vwmy和.hud 元素不存在,需将目标元素替换为自己的哦
宝藏主题,千万别火,我不想被别人看到! 难怪刚刚在天上没看见你呢,原来是下凡了!
页:
[1]