博客主页 🎤
对于JOE主题,使用自定义头像,解决部分评论没有头像的问题

Author:

火喵酱

©

Wordage:

共计 3834 字

needs:

约 2 分钟

Popular:

623 ℃

Created:

:本文最后更新于2022年09月23日,已经过了184天没有更新,若内容或图片失效,请留言反馈
目 录
方案一

博客使用经常会遇到有的评论没有头像,直接返回显示Gavatar默认的头像,不仅难看的要死,还没办法更改,严重影响美观(比如我这半个强迫症+半个完美主义者),而且joe主题默认判断使用的是qq头像,使用了qq邮箱的Gavatar头像就不会显示了,因此为了解决这个问题,我折腾了好久才解决(主要是不会qaq

步骤1

对于joe7.x主题

  1. 定位到主题目录下文件\Joe\core\function.php,查找/* 通过邮箱生成头像地址 */
  2. 将内容替换成以下:

    /* 通过邮箱生成头像地址(火喵改) */
    function _getAvatarByMail($mail)
    {
     $gravatarsUrl = Helper::options()->JCustomAvatarSource ? Helper::options()->JCustomAvatarSource : 'https://gravatar.cooluc.com/avatar/';
     $mailLower = strtolower($mail);
     $md5MailLower = md5($mailLower);
     $qqMail = str_replace('@qq.com', '', $mailLower);
     
     $uri = 'https://cdn.helingqi.com/wavatar/' . $md5MailLower . '?d=404';
     $headers = @get_headers($uri);
     
     if (preg_match("|200|", $headers[0])) {
         echo $gravatarsUrl . $md5MailLower . '?d=mm';
     } 
     elseif (strstr($mailLower, "qq.com") && is_numeric($qqMail) && strlen($qqMail) < 11 && strlen($qqMail) > 4) {
         echo 'https://thirdqq.qlogo.cn/g?b=qq&nk=' . $qqMail . '&s=100';
     }
     else {
         echo '自定义头像地址';
     }
    }

    建议将之前的内容注释掉,不要删除。

步骤2
  1. 定位到主题目录下文件\Joe\core\core.php,查找/* 通过邮箱生成头像地址 */
  2. 将内容替换成以下:
/* 通过邮箱生成头像地址(火喵改) */
function _getAvatarUrlByMail($mail)
{
    $gravatarsUrl = Helper::options()->JCustomAvatarSource ? Helper::options()->JCustomAvatarSource : 'https://gravatar.cooluc.com/avatar/';
    $mailLower = strtolower($mail);
    $md5MailLower = md5($mailLower);
    $qqMail = str_replace('@qq.com', '', $mailLower);
    
    $uri = $gravatarsUrl . $md5MailLower . '?d=404';
    $headers = @get_headers($uri);
    
    if (preg_match("|200|", $headers[0])) {
        return $gravatarsUrl . $md5MailLower . '?d=mm';
    } 
    elseif (strstr($mailLower, "qq.com") && is_numeric($qqMail) && strlen($qqMail) < 11 && strlen($qqMail) > 4) {
        return 'https://thirdqq.qlogo.cn/g?b=qq&nk=' . $qqMail . '&s=100';
    } else {
        return '自定义头像地址https://cat.dorcandy.cn/000pages/api/api-mc.php';
    }
}

保存好刷新查看效果。

其他

有的主题版本在core.php中无法找到关键词,找不到就直接跳过,无需修改文件即可。

简单的原理就是,依据邮箱去查找是否存在头像,如果不存在会返回状态码404,依据状态码的不同来判断。但是我这样设置完,网站加载变得异常迟钝,不知道原因所在,希望有大佬赐教,感谢。

  1. 图片地址可以使用api地址,譬如火喵博客的MC酱API。
  2. 可以尝试使用随机函数,比如
'images/'.rand(1,5).'.jpg'
方案二

方案一虽然完美,但是使用此方法会被发送大量的请求,如果页面的头像数据多,会导致网站相应及其缓慢,我都受不了了,于是想到了一个新的方案——使用onerror事件

对于joe7.x主题

  1. 定位到主题目录下文件\Joe\core\function.php,查找/* 通过邮箱生成头像地址 */
  2. 将内容echo $gravatarsUrl . $md5MailLower . '?d=mm';替换成echo $gravatarsUrl . $md5MailLower . '?d=404';(没错就是把mm改成404)
  3. 主题设置——全局设置——自定义JS中,填入:
/* 头像替换 */
function imgerrorfun(){ 
    var img=event.srcElement; 
    img.src="替换的头像地址"; 
    img.onerror=null;
}

然后在主题文件——Joe/public/comment.php中,查找

<img width="48" height="48"----------

将其改为

<img onerror="imgerrorfun();" width="48" height="48"----------

没错就是中间加了个onerror="imgerrorfun();"
同理在主题文件——Joe/public/aside.php中,查找

<img width="40" height="40" class="avatar lazyload" src="<?php _getAvatarLazyload(); ?>" data-src="<?php _getAvatarByMail($item->mail) ?>" alt="<?php $item->author(false) ?>" />

同样将其改为

<img onerror="imgerrorfun();" width="40" height="40"----------

如遇到没显示的地方,如法炮制即可。

方案三

通过查看Gavatar文档,我们发现官方有一个可用的方案:
2021-11-5-13-56-22.png

因此,我们可以将最后的代码部分修改成诸如此类的便可:

else {
        echo $gravatarsUrl . $md5MailLower . '?d=https%3A%2F%2Fcat.dorcandy.cn%2logo';
    }
方案四(仅参考)

推荐使用方案二,方案三仅仅是一个思路,就是将img标签改为div,并使用background-image来叠加两张图片来显示效果。因为404的图片在background-image下会不显示,直接显示下一张图。但是遇到了有的邮箱是透明png,这样的话显示就重叠了,无法达到效果,因此舍弃。

方案五(11月5日追加)

现在推荐使用 Cravatar - 互联网公共头像服务 ,一步到位。

感谢!

如果觉得文章很不错,欢迎点一点下面的广告,来表达对喵喵的支持qaq

- - - The END - - -
作者:
火喵酱
文章:
绯色之喵・火喵博客
地址:
https://cat.dorcandy.cn/a20da7d7.html
更新:
2022 年 09 月 23 日 22 时
声明:
本文由博主原创,依据 CC BY-NC-SA 4.0 许可协议授权,转载请注明出处
文章二维码
对于JOE主题,使用自定义头像,解决部分评论没有头像的问题
 博主关闭了所有页面的评论
博客主页 绯色之喵・火喵博客 记录喵喵美好生活 51统计 百度统计 🌸
萌ICP备20210005号 辽ICP备2021005644号-1 辽公网安备 21021102000984号 十年之约 3 年 17 天 5 小时 43 分 🌸 本站由 Typecho 建站,并搭配自制 MyDiary 主题 Copyright © 2009 ~ 2023. 火喵酱 All rights reserved.
打赏图
打赏博主
欢迎
欢迎
欢迎访问绯色之喵・火喵博客
欢迎来看望喵喵!
搜 索
足 迹
分 类
  • 日常
  • 晒物
  • 🦙 代码
  • 🏗️ 建站
  • 📷 生活
  • 测试