2011年9月15日

Blogger 回覆、引言系統的修正__最新回應模組修改

A+
一、前言

安裝完「回覆、引言系統」後,如果有安裝 Abin大 的「最新回應」模組,會造成模組錯亂。原因在於回覆、引言系統在留言內容的開頭使用 <a> 標籤,而 <a> 標籤的內容會引起錯誤,因此需要 hack 最新回應模組中處理留言內容的部分。


二、原程式碼

需要改的部分不多,因此請參照「原網頁」,要修改的為以下紅色的部分:

    var authorname = Comment.author[0].name.$t;
    var title = Comment.title.$t.substr(0,30);
    var j = 0;
    while (j < Comment.link.length && Comment.link[j].rel != "alternate")
      j++;
    var link = Comment.link[j].href;
    var timestamp = Comment.published.$t.substr(0,10);
    sHTML += '<li><span class="item-title">'+authorname+': <a href="'+link+'">'+ title +'</a> - '+timestamp+'</span></li>';
  }
  sHTML += '</ul>';
  sHTML += generateCommentLink(parseInt(json.feed.entry.length), nIndex, nTotalComment);
  document.getElementById('newComments').innerHTML = sHTML;

1. 第一行紅字意思為,將留言內容取出前 30 個字元。

2. 第二行紅字意思為,秀出留言者暱稱及留言內容,而留言內容有超連結跳到該網頁。


三、修改內容


B~D:取代原程式碼的第一行紅字。主要用意是將 <a> 標籤的內容刪除,如此最新回應模組才能正確顯示。

但實際上這並不容易,因為只要用 javacript 處理含有 <a> 標籤內容的留言時,script 就會當掉。

C:經過無窮的測試後發現,如果原留言內容有 <a> 標籤,Blogger 在標籤的內容會偷加「 ref="nofollow"」這樣的字元,導致 javascript 執行到此就終止,這就是 "no follow" 的意思。而 WFU 猜測這也是「回覆、引言系統」中標題「引言功能:」→「H~K:」所提到的問題之因。

而在 Blogger 範本中使用 javasript 對含有 <a> 標籤的原留言內容進行處理會當掉,例如使用 escape 函數,這表示 Blogger 的範本,對於這一點根本不讓你 hack;不過可以慶幸的是,在側邊欄的 html/javascript 小工具沒有限制這一點,所以得以使用 C 行的 escape 函數來處理原留言的內容。

也因為如此,進行編碼解碼測試之後才會發現 Blogger 偷加的字元「 ref="nofollow"」。所以解決的辦法就出來了,在 C 行用 replace 函數把這些字元全部刪除。

D:接著用 unescape 函數把內容還原回去,就可以進行主要任務──刪除 <a> 標籤的內容了。

再來使用 replace 函數,將所有 "<" 開頭 ">" 結尾的字串全部刪除,這代表原留言有各種標籤的話都會被刪除。

最後使用 substr 函數,取出留言的前 65 個字元,這個數字可隨個人喜好修改。至此主要任務算是達成了。

J:此行取代原程式碼的第二行紅字。

這裡主要是將超連結的字串改為原留言者的暱稱,改變側邊欄顯示的形式,這部分也是可以隨個人喜好修改。


好了,修改後按下儲存就大功告成。如果不是裝「最新回應」模組,而是裝其他模組而產生問題的話,或許這一篇的內容可以提供一些修改的方向。


******** 2011.11.4 私密留言功能需要的最新回應模組修改 ********

如果有安裝「Blogger留言系統 __(七)私密留言」,那麼請先按照本文的內容修改,接著在「三、修改內容」的 D 行後面,插入以下程式碼:

var cmc=decode_summary.search("sEcrEt77")
if (cmc>=0){decode_summary="(這是悄悄話)"}

如此一長串的加密字元就會被 "(這是悄悄話)" 這幾個字取代了。


******** 2011.12.5 留言回覆系統需要的最新回應模組修改 ********

如果有安裝「Blogger留言回覆系統(回覆+引言+作者回覆+留言編號)」,那麼請先按照本文的內容修改,接著在「三、修改內容」的 C 與 D 行之間,插入以下程式碼:


if(encode_summary.search(escape("&lt;"))>=0){
encode_summary=encode_summary.replace(/%uFF0C/g,"%2C")
var ds=unescape(encode_summary)
var CIDstart=ds.search("&lt;")
var CIDend=ds.search("&gt;")
if ( CIDstart >=0 && CIDstart < 20 && CIDend < 40 ){
var ReCID=ds.substring(CIDstart+4,CIDend)
var CIDstring="&lt;"+ReCID+"&gt;"
var ReplyText="(以上內容請勿刪除)"
var QuoteText="(以上內容請勿刪除,以下引言請自行刪減)"
ds=ds.replace(/\[quote\][\s\S]*?\[\/quote\]/g,"").replace(CIDstring,"").replace(QuoteText,"").replace(ReplyText,"")
encode_summary=escape(ds)
}
}

如此可自動刪掉意見 ID、系統預設字串、引言字串。需要注意的是,如果預設字串使用了 "," 這個中文全形符號,Blogger 系統有 bug 會判讀錯誤,因此一開始就用 replace 把 "," 的跳脫碼「%uFF0C」改成小寫 "," 的跳脫碼「%2C」,接著要刪除的的預設字串把 "," 改成 ",",才能修正這個 bug。


參考資料: 
「最新回應」模組

沒有留言:

↑TOP

張貼留言注意事項:

◎ 勾選「通知我」可收到後續回覆的mail!
提問請附網址、詳細描述狀況,如提供的資訊不足,則無法回覆。
◎ 請在相關文章留言,與文章無關的主題請至「Blogger 中文論壇」。
◎ 若詢問 CSS 、非官方範本問題、或貴站為商業網站 ,請參考「本站諮詢頁面」→「1. 諮詢服務」
◎ 若留言要輸入語法,"<"、">"這兩個符號請用其他符號代替,否則語法會消失!
◎ 若發現留言不見了,通常是因為 "複製貼上" 的內容常被系統判定為垃圾留言,請不用擔心,我會定期將留言恢復。
◎ 本站「已關閉自刪留言功能」。