这里介绍两种方式来实施获取评论头像。
第一种方法:使用 AJAX 实现
在 Typecho 中使用 AJAX 通常涉及到前端 JavaScript 代码和后端 PHP 代码之间的交互。本文的实现也是分为了 2 部分的代码:
1.在主题 js 文件中添加下面代码
//通过焦点离开监听方法(blur)传送邮箱字符串到服务器,在服务器中处理(第二步)后,将其添加到图片的 src 属性
$("input#mail").blur(function () {
//$("input#mail") 用的jquery语法,表示的是 id 为 mail 的 input 元素;
var _email = $(this).val();
$.ajax({
type: "GET",
data: {
action: "ajax_avatar_get",
form: location.href,
email: _email,
},
success: function (data) {
$("#avatar").attr("src", data); // #avatar 为需要添加图片的元素的 id 属性值
},
}); // end ajax
return false;
});
注意:代码需放在window.onload = function() {//代码部分}
或者$(function(){ //代码部分});
内部,并且,如果放在$(function(){ //代码部分});
内部的话,jquery.js
的加载必须放在主题 js 文件之前。
2.在主题 functions.php 文件中添加下面代码
function themeInit($archive)
{
//处理邮箱字符串,转化为 avatar 图像地址
if (isset($_GET['action']) == 'ajax_avatar_get' && 'GET' == $_SERVER['REQUEST_METHOD']) {
$host = 'https://cravatar.cn/avatar/';
$email = strtolower($_GET['email']);
$hash = md5($email);
$sjtx = 'mm';
$avatar = $host . $hash . '?d=' . $sjtx;
echo $avatar;
die();
} else {
return;
}
}
注意:代码是放在themeInit($archive){ //代码部分}
内部的,如果你的模板已经添加过了themeInit
,那么只要向themeInit
内部添加if
部分即可。
第二种方法:直接用 javascript 函数实现
其实,两种方法的区别是:ajax 获取邮箱字符串 md5 值是在服务器,而 javascript 获取邮箱字符串 md5 值是在客户端。
javascript 获取邮箱字符串 md5 值,需要链接一个js库。
1.在 header.php 头部链接 js 库
<!-- md5获取js -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script>
3.在主题 js 文件中添加下面代码
// comments 邮箱输入框焦点离开事件,获取邮箱的avatar图像
document.addEventListener("DOMContentLoaded", function () {
const inputField = document.getElementById("mail");
inputField.addEventListener("blur", function () {
var md5Value = CryptoJS.MD5(this.value).toString();
var gravatar = document.getElementById("avatar");
gravatar.setAttribute("src", "https://cravatar.cn/avatar/" + md5Value + '?d=mm');
});
});
mail 是邮箱输入框 input 元素的 id 值, avatar 是头像 img 元素的 id 值
效果见文章下面的评论框。