2009/09/18

修正《為 blogger 留言區(comment) 加個對話框吧!》的錯誤

如果你像我一樣,使用《[Blogger] 為blogger 每則留言繡上數字(Numbering comments)》這個Plugin時,作者的留言不會有數字,那就需要看這篇文章了。


在開始之前


我得先說明我曾經對留言區所作過的修正。

一開始的時候,我只找到 Abin's Tech Note-《作者和一般回應的標示區別 (Author comment highlighting)》,不過因為這個Plugin的效果實在不明顯。所以當我又找到 0 與 1 謎詭世界-《加強blogger作者留言和一般留言的區分》時,因為這個Plugin會有個框框,比起上面的還要明顯,所以我就改採這個Plugin。

但我又發現 放形浪High-《[Blogger] 為blogger 每則留言繡上數字(Numbering comments)》和《為 blogger 留言區(comment) 加個對話框吧!》時,就心血來潮的作了修正,就發現「作者的留言不會有數字」的問題。

為了解決這個問題,我就在 放形浪High 上詢問作者,但作者沒回我。不過這也正常,因為作者本來就沒有義務一定要為其他人作解答。

後來我自己比對最原始的程式碼和最後版本的程式碼,發現程式中多出了許多用不到的殘碼,就猜想應該是這些才導致了問題。所以,我突然想如果我能把留言區(comment) 回復原狀,應該就恢復正常了吧?

如果,你也像我一樣曾經多次修改留言區(comment) 、也遇到這個問題的話,我也建議你這麼作。

回復留言區(comment)


步驟非常簡單,就是將以下的程式碼: <dl id='comments-block'>
<b:loop values='data:post.comments' var='comment'>
<dt expr:class='"comment-author " + data:comment.authorClass' expr:id='data:comment.anchorName'>
<a expr:name='data:comment.anchorName'/>
<b:if cond='data:comment.authorUrl'>
<a expr:href='data:comment.authorUrl' rel='nofollow'><data:comment.author/></a>
<b:else/>
<data:comment.author/>
</b:if>
<data:commentPostedByMsg/>
</dt>
<dd class='comment-body'>
<b:if cond='data:comment.isDeleted'>
<span class='deleted-comment'><data:comment.body/></span>
<b:else/>
<p><data:comment.body/></p>
</b:if>
</dd>
<dd class='comment-footer'>
<span class='comment-timestamp'>
<a expr:href='data:comment.url' title='comment permalink'>
<data:comment.timestamp/>
</a>
<b:include data='comment' name='commentDeleteIcon'/>
</span>
</dd>
</b:loop>
</dl>

覆蓋掉程式碼中 <dl id='comments-block'>... 到最近的一個 </dl>中間的程式碼。當然,你得注意:
  1. 請先備份原來的程式碼,這樣,你至少還能夠還原到還沒有修正的狀態。
  2. 此外,<dl id='comments-block'>的名稱可能會隨著不同的樣式而有所差異。

接下來


再依照 放形浪High 的說明修正程式,這時你反而會發現另一個問題:

沒錯,從這張圖看起來,會發現每個留言都會列出兩次,而且其中一個留言有編號、另一個沒有編號。

所以,如果直接按照 放形浪High 的說明:「在<dt class='comment-author' .....> XXXXXX </dt>之後, 加入以下程式碼.」,結果並不正確

我回去看程式碼,發現錯誤的原因出在有兩個 <dd class='comment-body'>,所以每個留言都會被列出兩次!。

正確的作法應該是:將以下的程式碼,覆蓋掉原程式碼中 <dd class='comment-body'> ...到最近的一個</dl>中間的程式碼。
<b:if cond='data:comment.author == data:post.author'>
<dd class='comment-body-author'>
<p><data:comment.body/></p>
</dd> <b:else/>
<dd class='comment-body'>
<b:if cond='data:comment.isDeleted'>
<span class='deleted-comment'> <data:comment.body/> </span>
<b:else/>
<p><data:comment.body/></p>
</b:if>
</dd>
</b:if>

這樣最後出來的結果才會是正確的。

沒有留言:

張貼留言