思路:先判断该条评论是否填写了邮箱,未填写则使用默认;若填写了,再判断其中是否含有“@qq.com”;然后去除“@qq.com”并判断余下的部分是否为qq号,是则获取相应的头像并缓存下来,否则使用Gravatar头像。
本代码依托于emer大神些的get_template_name()和myGravatar()函数。
以默认模板为例,打开module.php,找到function blog_comments($comments),在其之前添加函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| <?php //Custom:获取模板目录名称 function get\_template\_name(){ $template\_name = str\_replace(BLOG\_URL,"",TEMPLATE\_URL); $template\_name = str\_replace("content/templates/","",$template\_name); $template\_name = str\_replace("/","",$template\_name); return $template\_name; } ?> <?php //blog-tool:头像缓存到本地 function myGravatar($email, $s = 40, $d = 'monsterid', $g = 'g'){ $f = md5($email); $a = TEMPLATE\_URL.'avatar/'.$f.'.jpg'; $e = EMLOG\_ROOT.'/content/templates/'.get\_template\_name().'/avatar/'.$f.'.jpg'; $t = 1296000;//15天,单位:秒 if (empty($d)){ $d = TEMPLATE\_URL.'images/avatar.jpg'; } if(!is\_file($e) (time() - filemtime($e)) > $t ){//当头像不存在或者超过15天才更新 $g = sprintf("https://cn.gravatar.com",(hexdec($f{0})%2)).'/avatar/'.$f.'?s='.$s.'&d='.$d.'&r='.$g; copy($g,$e); $a = $g; } if(filesize($e) < 500){ copy($d,$e); } return $a; } ?> <?php //blog-tool:获取qq头像并缓存到本地 function eflyGravatar($email,$s = 40) { if(empty($email)){ $eflyGravatar = TEMPLATE\_URL.'images/avatar.jpg'; } else if(strpos($email,'@qq.com')){ $qq = str\_replace("@qq.com","",$email); if(is\_numeric($qq) && strlen($qq) > 4 && strlen($qq) < 13){ $f = md5($qq); $a = TEMPLATE\_URL.'avatar/'.$f.'.jpg'; $e = EMLOG\_ROOT.'/content/templates/'.get\_template\_name().'/avatar/'.$f.'.jpg'; $t = 1296000; if (empty($d)){ $d = TEMPLATE\_URL.'images/avatar.jpg'; } if(!is\_file($e) (time() - filemtime($e)) > $t ){ $g = sprintf("https://q.qlogo.cn").'/headimg\_dl?dst\_uin='.$qq.'&spec='.$s; copy($g,$e); $a = $g; } if(filesize($e) < 500){ copy($d,$e); } $eflyGravatar = $a; } else{ $eflyGravatar = myGravatar($email); } } else{ $eflyGravatar = myGravatar($email); } return $eflyGravatar; } ?>
|
然后将原来的<?php echo getGravatar($comment\['mail'\]); ?>
改为<?php echo eflyGravatar($comment\['mail'\]); ?>
相应的,子评论函数function blog\_comments\_children($comments, $children)
中也做上述改动。 然后在你当前模板文件夹下新建一个”avatar”空文件夹用于放置缓存下来的头像,在当前模板文件夹下的images文件夹中放一个“avatar.jpg”文件用作未填写邮箱时的默认头像。 注:其中的“eflyGravatar”函数为本功能核心函数,且其依托于其上面的两个函数。当然,直接使用<?php echo myGravatar($comment\['mail'\]); ?>
这个函数也行,也能将头像缓存到本地,但是用不了qq头像的哦!