Typecho使用AJAX实时获取评论头像

PHP部分

此代码添加到主题functions.php文件

function themeInit($archive)
{
if(isset($_GET['action']) == 'ajax_avatar_get' && 'GET' == $_SERVER['REQUEST_METHOD'] ) {
$host = 'https://secure.gravatar.com/avatar/';
$email = strtolower( $_GET['email']);
            $hash = md5($email);
           $sjtx = 'mm';
 $avatar = $host . $hash . '?d='.$sjtx;
        echo $avatar; 
        die();
    }else { return; }
}

JS部分

此代码添加到主题的comments.php中,形式为javascript

<script type="text/javascript">
$("input#email").blur(function() { //修改元素名或以id方式
  var _email = $(this).val();
  if (_email != '') {
    $.ajax({
      type: 'GET',
      data: {
        action: 'ajax_avatar_get',  
        form: ajaxurl, // 修改Ajax路径
        email: _email
      },
      success: function(data) {
        $('.avatar').attr('src', data); // 修改标签类名
      }
    }); // end ajax
  }
  return false;
});
</script>

说明

代码中的input#email.avatar需要根据自己的模板进行适当修改,分别对应不同的元素类名......。
代码中的ajaxurl可以直接写自己博客地址,或者当前文章地址也行,可以用js获取地址,也可以直接写死。
获取当前文章地址的js 为 window.location.href

原理

借鉴了《WordPress使用AJAX实时获取评论头像》一文,可自行百度。
毕竟php环境一样,typecho可约等于wordpress纯净版。
理解的话:

themeInit()中添加了一个类API,即'action' == 'ajax_avatar_get'时,当ajax在当前页面请求这个action时,
返回值为$avatar = $host . $hash . '?d='.$sjtx;

以上内容将用于本博客主题的修改。

已有 2 条评论
  1. 小宇

    有显示,貌似成功了

    小宇 December 5th, 2018 at 11:55 am回复
  2. logofun

    测试过了,不能成功。
    主要是`themeInit()`段没有响应,很是奇怪。
    看来还需加强对typecho主题内部机制的理解

    logofun December 4th, 2018 at 10:15 am回复
发表新评论
Gravatar图片显示区