今天早上,本来心情美滋滋的看博客的访问情况和回复后台的评论,然后返回页面上一看,所有的头像都不显示了,Gravatar的官方无法访问,不知道是网络丢包还是墙了,总之很不爽。百度了一下,发现很多博客都遇到了相似的问题,因为Gravatar其实是经常被墙的,每次出现这个问题,整个网站的所有头像图片都会无法加载,形成一堆报错和死链。而且特别是我博客这个模板又是在各个地方调用头像的,所以我觉得有必要解决一下这个问题。
网上的教程都是告诉你修改typecho的内部控制文件,我觉得这样很不妥,基本上升级了就回到解放前,而且没准官方未来会有新的定义,所以我决定在模板层面实现,这样无论typecho怎样升级,都不会改变我的头像调用。实际上,这个很简单,我只在模板控制器定义了一个方法,就成功了开始了每个页面愉快的调用。
教程开始
1.国内其实是有Gravatar源的
http://cdn.v2ex.com/gravatar/
如果细心点,就会发现,头像的路径其实就是一个地址,带上被md5加密的邮箱,和一个s参数控制宽度高度。
2.修改模板function.php文件,添加md5的加密方法。
function tmd5($text){
if($text){
$tmd5 = md5($text);
echo $tmd5;
}else{
echo 'none';
}
}
这段代码就是可以将邮箱地址转换为md5,配合头像的请求url,就可以愉快的调用用户头像了,并且直接替换掉官方的头像调用标签即可。
3.关于我博客不同区域的头像调用方式(以实际状况为准)
调用当前登录用户头像,后面的s参数代表宽高为30。
<img src="//cdn.v2ex.com/gravatar/<?php tmd5($this->user->mail); ?>?s=30" />
调用文章列表和文章详情的作者头像,后面的s参数代表宽高为25。
<img src="//cdn.v2ex.com/gravatar/<?php tmd5($this->author->mail); ?>?s=25" />
调用评论列表留言者头像,后面的s参数代表宽高为40。
<img src="//cdn.v2ex.com/gravatar/<?php tmd5($comments->mail); ?>?s=40" />
说白了,就是将调用出来的邮箱用md5加密,然后与国内的Gravatar源url组合,就成了头像的地址。感觉还是挺简单的,我还计划直接在模板里写一个可以切换头像源的功能,直接控制调用国外还是国内。
【规则之树版权所有,转载注明来源】
测试
测试头像
并不需要未来,现在官方就支持自定义Gravatar源。
具体方式为在config.inc.php中加入
define('__TYPECHO_GRAVATAR_PREFIX__', 'https://cdn.v2ex.com/gravatar/');
@Scvoet
问题在于我不是官方的最新版本,只是1.1的正式版,config.inc.php并没有此定义。