安裝完「回覆、引言系統」後,如果有安裝 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("<"))>=0){
encode_summary=encode_summary.replace(/%uFF0C/g,"%2C")
var ds=unescape(encode_summary)
var CIDstart=ds.search("<")
var CIDend=ds.search(">")
if ( CIDstart >=0 && CIDstart < 20 && CIDend < 40 ){
var ReCID=ds.substring(CIDstart+4,CIDend)
var CIDstring="<"+ReCID+">"
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。
參考資料:
「最新回應」模組
沒有留言:
張貼留言注意事項:
◎ 勾選「通知我」可收到後續回覆的mail!
◎ 請在相關文章留言,與文章無關的主題可至「Blogger 社團」提問。
◎ 請避免使用 Safari 瀏覽器,否則無法登入 Google 帳號留言(只能匿名留言)!
◎ 提問若無法提供足夠的資訊供判斷,可能會被無視。建議先參考這篇「Blogger 提問技巧及注意事項」。
◎ CSS 相關問題非免費諮詢,建議使用「Chrome 開發人員工具」尋找答案。
◎ 手機版相關問題請參考「Blogger 行動版範本的特質」→「三、行動版範本不一定能執行網頁版工具」;或參考「Blogger 行動版範本修改技巧 」,或本站 Blogger 行動版標籤相關文章。
◎ 非官方範本問題、或貴站為商業網站,請參考「Blogger 免費諮詢 + 付費諮詢」
◎ 若是使用官方 RWD 範本,請參考「Blogger 推出全新自適應 RWD 官方範本及佈景主題」→ 不建議對範本進行修改!
◎ 若留言要輸入語法,"<"、">"這兩個符號請用其他符號代替,否則語法會消失!
◎ 為了過濾垃圾留言,所有留言不會即時發佈,請稍待片刻。
◎ 本站「已關閉自刪留言功能」。