森七

Emlog使用qq头像作为评论头像
思路:先判断该条评论是否填写了邮箱,未填写则使用默认;若填写了,再判断其中是否含有“@qq.com”;然后去除“@...
扫描右侧二维码阅读全文
08
2017/03

Emlog使用qq头像作为评论头像

思路:先判断该条评论是否填写了邮箱,未填写则使用默认;若填写了,再判断其中是否含有“@qq.com”;然后去除“@qq.com”并判断余下的部分是否为qq号,是则获取相应的头像并缓存下来,否则使用Gravatar头像。
本代码依托于emer大神些的get_template_name()和myGravatar()函数。
以默认模板为例,打开module.php,找到function blog_comments($comments),在其之前添加函数:

<?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("http://secure.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("http://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头像的哦!

阿里云广告
Last modification:February 10th, 2019 at 12:12 am
If you think my article is useful to you, please feel free to appreciate

Leave a Comment

21 comments

  1. Hannah

    好厉害。

  2. That year 1997

    博主大大 这样改完 不能获取qq昵称啊 有没有 像你博客这样填写qq获取qq昵称和头像教程 啊|´・ω・)ノ

    1. 森七
      @That year 1997

      @That year 1997:emmmm这个应该可以用才对,要么是哪里没改对。@(不高兴)现在模板都自带QQ评论了,就没有再去发这类的文章了

  3. ZHANGJUNLIN

    太复杂了子评论没找不到comm

  4. 表哥    

    我添加了那代码,网站打不开了,是加错了吗

  5. 大表哥

    请问大神你的赞和打赏代码能分享一下吗OωO

    1. 森七
      @大表哥

      @大表哥:主题自带的,直接扒就好了

      1. 表哥    
        @森七

        @森七:可是我是新手还没有学过,能扒下来发我邮箱吗OωO

  6. Tout-An尘。

    看看

  7. eric

    试试

  8. Angel昔沐

    还是没找到module.php文件,求教在哪文件夹里

    1. 森七
      @Angel昔沐

      @Angel昔沐:就在模板文件里[程序猿]

  9. 便宜VPS

    收藏了

  10. 久伴

    学习了哈

  11. 逾期不候。

    不错很好很棒

    1. 感谢经历!
      @逾期不候。

      @逾期不候。:哈哈哈

  12. 纯洁博客

    一直都在找这个呀

    1. 森七
      @纯洁博客

      @纯洁博客:有用就好[调戏]

  13. 千殇

    好东西[微笑]

  14. 星龙科技

    学习了,谢谢

  15. 半永久培训

    挺不错的了,值得一试。。。