首页 » 遗忘 » 正文内容
2年前 寻梦xunm 525 遗忘

typecho 调用 QQ 头像,但是不修改任何核心文件。最近写主题,就顺便研究了一下,这个功能其实很早就想过,比如在会员中心新增 QQ 的字段而已,但是我发现这样会不可避免的修改 typecho 的内核,那就和网上给出的修改内核实现的 QQ 头像方案相同了,这是绝对不行的。所以我想到了另一种方案,那就是对用户的邮箱进行识别,提取出 QQ 号,但是对非 QQ 头像的,则显示 Gravatar 头像库头像。

开干

  1. 首先,我准备好了两个接口,一个是 QQ 头像的,一个是 Gravatar 国内源,它们的调用方式如下。

[greenbar]QQ 头像 http://q1.qlogo.cn/g?b=qq&nk=QQ 号 &s=100

Gravatar 头像 http://cdn.v2ex.com/gravatar/md5 加密后的邮箱?s=100[/greenbar]

以上就是两个头像接口的信息,值得注意的是 Gravatar 后面的 s 分辨率参数可以随意定义,而 QQ 不行,QQ 只有几个有限的分辨率,比如 100,200,640,其它的数字会报 400 错误,所以 QQ 的 s 参数更像是一种清晰度,宽高还是通过 css 定义比较好。

  1. 实现的主要方法,我在模板 function.php 里面定义,这等于完全舍弃系统的邮箱输出方法。
/** 对邮箱类型判定,并调用 QQ 头像的实现 */
function isqq($email){if($email){if(strpos($email,"@qq.com") !==false){$email=str_replace('@qq.com','',$email);
            echo "//q1.qlogo.cn/g?b=qq&nk=".$email."&";
        }else{$email= md5($email);
            echo "//cdn.v2ex.com/gravatar/".$email."?";
        }
    }else{echo "//cdn.v2ex.com/gravatar/null?";}
}

上述代码就是通过 isqq 方法获取邮箱,并且判断是否为 qq 邮箱,是则截取 qq 的部分去和 qq 的接口组合,不是则 md5 加密该邮箱和 gravatar 头像库组合,而 s 的参数则是用户可以自己在模板里面控制的,所以这里省略。

2020 年 3 月 9 日更新

上面的调用方法忽略了一个问题,就是当别人使用英文 QQ 邮箱时,例如:wert0814@qq.com,就获取不到 QQ 号,而是一个字符串,这时候呢,就需要调用 Gravatar 头像了,如果还是没有 Gravatar 头像,那就使用默认头像。

更新后代码如下:

function isqq($email)
{if ($email) {if (strpos($email, "@qq.com") !== false) {$email = str_replace('@qq.com', '', $email);
            if(is_numeric($email)){echo "//q1.qlogo.cn/g?b=qq&nk=" . $email . "&";}else{
                $mmail = $email.'@qq.com';
                $email = md5($mmail);
                echo "//cdn.v2ex.com/gravatar/" . $email . "?";
            }
            
        } else {$email = md5($email);
            echo "//cdn.v2ex.com/gravatar/" . $email . "?";
        }
    } else {echo "//cdn.v2ex.com/gravatar/null?";}
}

  1. 调用方式,也就是头像链接在不同模板中的调用方式。

文章列表及内容页作者头像

<?php isqq($this->author->mail); ?>s=100

评论列表用户头像

<?php isqq($comments->mail); ?>s=100

当前登录用户头像

<?php isqq($this->user->mail); ?>s=100

文章来源于:https://blog.zwying.com/archives/8.html

0 赞 or 打赏
喜欢就打赏一点
微信 支付宝
已有0 条评论,0 个点赞
隐私

Q Q:1340326824

vipshiyi@qq.com

QQ群:422720328

生活所迫,再见了苦逼的BUG们,以后有缘在会吧。