Typecho博客Gravatar評論頭像不顯示的便捷解決方法

公元2015年04月10日沒人鳥我喲打醬油看熱鬧的有:1,855 views

Typecho博客Gravatar評論頭像不顯示的便捷解決方法

段時間剛把WP博客的頭像搞定,現在突然發現Typecho博客的Gravatar又不能正常顯示了,鮮紅的紅叉真心讓人不淡定,只想說,天朝太有才了,還能怎麼辦,具體問題具體解決唄,下面就分享下Typecho頭像不能正常顯示的便捷解決方法

首先說下傳統的解決方法吧!相信很多人都用緩存法解決這個問題的,就是在自己主機服務器上建立一個文件夾,然後改權限,然後添加默認頭像,然後在主題模板的functions.php中添加緩存規則!

這種方法好處不說了,咱們來分析下弊端,在使用Gravatar緩存到本地時當用戶在Gravatar中更新了自己的頭像時或者用郵箱註冊了Gravatar頭像時,留言後顯示的原頭像會遲遲得不到更新,因為得等7天(當然如果你設置的緩存週期是14天那就得等14天)內主機才會重新獲取新的Gravatar頭像!這個還是讓人比較鬱悶的!

既然這樣,下面就說下本篇文章的解決方法,之所以說是便捷,其實是偷步而已,就是利用國內的多說頭像緩存,在說方法之前也分析下這種方法的利弊,優點就是速度快,畢竟多說是在國內,並且是數一數二的第三方評論大佬,頭像調用和庫方面肯定要比自己的主機強!弊端也有,那就是因為如果用的人多的話,不排除多說會禁止此種方法,畢竟不帶來利益的交易誰也不願意做.當然即使以後禁止了也沒有什麼可怕的,大不了我們再換回來!

好了,啰嗦了這麼久,下面就說下方法,打開 \var\Widget\Abstract\Comments.php 大概在399行左右,找到以下代碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if (!empty($this->mail)) {
                    $mailHash = md5(strtolower($this->mail));
                }
 
                if ($this->request->isSecure()) {
                    $host = 'https://secure.gravatar.com';
                } else {
                    if (empty($this->mail)) {
                        $host = 'http://0.gravatar.com';
                    } else {
                        $host = sprintf( "http://%d.gravatar.com", (hexdec($mailHash{0}) % 2));
                    }
                }
 
                $url = $host . '/avatar/';

然後替換成以下代碼:

1
2
3
4
5
6
7
8
9
10
if (!empty($this->mail)) {
                    $mailHash = md5(strtolower($this->mail));
                }
 
                if (Typecho_Request::isSecure()) {
                $host = 'https://secure.gravatar.com'; //HTTPS頭像源
                } else {
                $host = 'http://gravatar.duoshuo.com'; //HTTP頭像源
                }
                $url = $host . '/avatar/';

哦了,就是這麼簡單,刷新下網頁看看,熟悉的頭像又都回來了,安逸啊!下面看下圖示,當然,我替換的代碼多了點,你可以根據截圖只替換必須部份即可!

Typecho博客Gravatar評論頭像不顯示的便捷解決方法.沫

改後圖示

Typecho博客Gravatar評論頭像不顯示的便捷解決方法.沫

特別提示:如果在399行找到的不是我所說的那些代碼而是下面這句代碼:

1
$url = Typecho_Common::gravatarUrl($this->mail, $size, $rating, $default, $this->request->isSecure());

那就直接將以上代碼替換為以下代碼即可,原理是一樣的

1
2
3
4
5
6
7
8
9
10
$mailHash = NULL;
if (!empty($this->mail)) {
$mailHash = md5(strtolower($this->mail));
}
$url = 'http://gravatar.duoshuo.com/avatar/';
if (!empty($this->mail)) {$url .= $mailHash;}
$url .= '?s=' . $size;
$url .= '&r=' . $rating;
$url .= '&d=' . $default;
//$url = Typecho_Common::gravatarUrl($this->mail, $size, $rating, $default, $this->request->isSecure());

以上是Typecho老版本的修改方法,如果你現在是用的是最新版本的Tyepcho的話那麼所要修改的位置也不會不同:

打開 \var\Typecho/Common.php 第939行左右,找到以下代碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if (!empty($this->mail)) {
                    $mailHash = md5(strtolower($this->mail));
                }
 
                if ($this->request->isSecure()) {
                    $host = 'https://secure.gravatar.com';
                } else {
                    if (empty($this->mail)) {
                        $host = 'http://0.gravatar.com';
                    } else {
                        $host = sprintf( "http://www.gravatar.com", (hexdec($mailHash{0}) % 2));
                    }
                }
 
                $url = $host . '/avatar/';

看到上面將Gravatar全球頭像的兩個地址替換成https://gravatar.com或者https://secure.gravatar.com或者http://gravatar.duoshuo.com都行,經過測試替換成這三個頭像都可以顯示!

至此整個解決辦法已經說完了,至於親愛的要用哪種方法,自己可以去考慮下!方法是提供了,選擇權還是在自己,集思廣益,多多益善嘛!

最後在介紹一種比較喜歡DIY的方法

在需要調用的地方直接帖地址含有調用函數和頭像地址即可,代碼如下:

1
<img src="http://gravatar.com/avatar/md5(<?php $this->remember('mail',true) ?>)?s=32" >;

老規矩http://gravatar.com/avatar/md5可以是http://secure.gravatar.com/avatar/md5或者是http://gravatar.duoshuo.com/avatar/md5

隨你喜歡吧!