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头像的哦!

本文标签:

版权声明:若无特殊注明,本文皆为《森七》原创,转载请保留文章出处。

本文链接:Emlog使用qq头像作为评论头像 - http://www.mosq.cn/post-133.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注。采用输入QQ快速评论,有人回复邮件通知。

评论

20条评论
  1. avatar

    That year 1997 Lv.1 uBrowser 6.2.3964.2 uBrowser 6.2.3964.2 Windows Windows 回复

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

    1. 森七 Chrome 50.0.2661.102 Chrome 50.0.2661.102 Windows 7 x64 Edition Windows 7 x64 Edition 回复

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

  2. avatar

    ZHANGJUNLIN Lv.1 Chrome 55.0.2883.87 Chrome 55.0.2883.87 Windows 7 Windows 7 回复

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

    1. avatar

      表哥     Lv.1 QQbrowser QQbrowser Android 4.0.4 Android 4.0.4 回复

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

      1. avatar

        大表哥 Lv.1 QQbrowser QQbrowser Android 4.0.4 Android 4.0.4 回复

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

        1. 森七 Chrome 49.0.2576.0 Chrome 49.0.2576.0 Windows 7 x64 Edition Windows 7 x64 Edition 回复

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

        2. 表哥     Lv.1 QQbrowser QQbrowser Android 4.0.4 Android 4.0.4 回复

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

      2. avatar

        Tout-An尘。 Lv.1 Chrome 57.0.2987.133 Chrome 57.0.2987.133 Windows Windows 回复

        看看

        1. avatar

          eric Lv.1 Chrome 58.0.3029.110 Chrome 58.0.3029.110 Windows 8.1 x64 Edition Windows 8.1 x64 Edition 回复

          试试

          1. avatar

            Angel昔沐 Lv.1 回复

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

            1. 森七 回复

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

            1. avatar

              久伴 Lv.4 回复

              学习了哈

              1. avatar

                逾期不候。 Lv.2 回复

                不错很好很棒

                1. 感谢经历! Lv.1 回复

                  回复了逾期不候。:哈哈哈