emlog使用qq头像作为评论头像并缓存到本地
[ 2017/01/06, Emlog , 5796阅, 7评 ]

思路:先判断该条评论是否填写了邮箱,未填写则使用默认;若填写了,再判断其中是否含有“@qq.com”;然后去除“@qq.com”并判断余下的部分是否为qq号,是则获取相应的头像并缓存下来,否则使用Gravatar头像。

QQ截图20170109165839.jpg

本代码依托于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头像的哦!

有朋自远方来...评论一下呗O(∩_∩)O

  • 评论(7)

    天津网站建设 [ 回复 ]
    2018-09-07 14:06

    不错的文章,感谢分享,学习到了

    满满的 [ 回复 ]
    2018-02-21 04:21

    有空试试。不错的文章

    许仙 [ 回复 ]
    2017-09-22 23:56

    子评论函数“function blog_comments_children($comments, $children)”中也做上述改动
    这个不懂怎么改,求解。

    大强子 博主大人 [ 回复 ]
    2017-09-23 10:35

    @许仙:将子评论函数“function blog_comments_children($comments, $children)”中原来的<?php echo getGravatar($comment['mail']); ?>改为<?php echo eflyGravatar($comment['mail']); ?>

    风神博客 [ 回复 ]
    2017-04-10 12:53

    来看看

    甜菜欣欣 [ 回复 ]
    2017-03-20 11:10

    这个我要研究一下!

    污妖王搞笑吧 [ 回复 ]
    2017-02-15 01:59

    666zhic支持