飞流 发表于 2025-9-28 17:21:02

解决社区名人堂/荣誉榜插件的用户资料页钩子挂载显示问题

我在六月份时候开始使用这个功能插件,早先就发现了这个问题,也没有深入研究,现在终于解决了,下面记录一下解决方法。
首先我们定位问题文件/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 元素不存在,需将目标元素替换为自己的哦

飞流管家 发表于 2025-9-29 01:45:04

宝藏主题,千万别火,我不想被别人看到!

凯旋呐 发表于 2025-9-29 20:12:42

难怪刚刚在天上没看见你呢,原来是下凡了!
页: [1]
查看完整版本: 解决社区名人堂/荣誉榜插件的用户资料页钩子挂载显示问题