2006/12/30

http://jinyaolin.blogspot.com/2006/12/blogger_1374.html

如何製作熱門文章[BLOGGER]



如果有注意到我sidebar的熱門文章,就會發現這東西其實是應用之前我所製作的Blogger聯播程式產生器(PartII)所製作出來的聯播,但是如果在自己的部落格放一個標籤[熱門文章],那在文章分類那邊不就會跑出一個熱門文章的分類嗎,那看了的確會很礙眼。

因此,我修改了Blogger Template,讓隱藏標籤能夠順利實做出來,如此一來,可以透過後台簡單的文章管理,隨時把自己想置頂的文章,快速的修改完畢。

作法第一步是先建立一個_TOP的標籤,並把想要置頂的文章套用這個標籤。

第二步是使用聯播程式產生器,把要置頂的標籤加入。

程式如下:
<div id="newpostsjinyaolin">
<h2>Loading...</h2>
</div>

<script>
function compareentry(a,b){
order= Date.parse(a.published.$t.replace(/^(\d{4})-(\d{2})-(\d{2})T([0-9:]*)([.0-9]*)(.)(.*)$/, '$1/$2/$3 $4 GMT')) - Date.parse(b.published.$t.replace(/^(\d{4})-(\d{2})-(\d{2})T([0-9:]*)([.0-9]*)(.)(.*)$/, '$1/$2/$3 $4 GMT'));
return 0-order;

}

function handlePostsjinyaolin(json) {

var temp = '<h2>熱門文章</h2><ul id="Feed001_feedItemListDisplay">';
var postshow=10;
var sortentry=json.feed.entry.sort(compareentry);
for (var i=0, post; post = sortentry[i]; i++) {
if(i>=postshow) break;
var title=post.title.$t;
var link=post.link[0].href;
var authorname=post.author[0].name.$t;
var timestamp=post.published.$t.substr(0,10);
temp += '<li><span class="item-title"><a href="'+link+'">'+ title +'</a>-'+timestamp+'-'+authorname+'</span></li>';
}
temp+="</ul>";
document.getElementById("newpostsjinyaolin").innerHTML = temp;
}
</script>

<script src="http://jinyaolin.blogspot.com/feeds/posts/summary/-/_TOP/?alt=json-in-script&callback=handlePostsjinyaolin" type="text/javascript"></script>


然後將這個程式新增到樣板的網頁元素(HTML/JavaScript)。
順利儲存之後,接下來就是動手修改,讓文章分類和內文的顯示標籤能夠正確隱藏_TOP這個標籤了。作法如下:

修改HTML,展開小裝置範本,先找到以下第一段:
<b:loop values='data:post.labels' var='label'>
<a expr:href='data:label.url' rel='tag'><data:label.name/></a><b:if cond='data:label.isLast != "true"'>,</b:if>
</b:loop>
然後修改如下:
<b:loop values='data:post.labels' var='label'>
<b:if cond='data:label.name != "_TOP"'>
<a expr:href='data:label.url' rel='tag'><data:label.name/></a><b:if cond='data:label.isLast != "true"'>,</b:if>
</b:if>
</b:loop>
如此一來在內文的標籤遇到_TOP就會自動跳過了。
第二則是修改文章分類的小裝置範本。

修改如紅色部份:
<b:widget id='Label1' locked='false' title='分類' type='Label'>
<b:includable id='main'>
<b:if cond='data:title'>
<h2><data:title/></h2>
</b:if>
<div class='widget-content'>
<ul>
<b:loop values='data:labels' var='label'>
<b:if cond='data:label.name != "_TOP"'>
<li>
<b:if cond='data:blog.url == data:label.url'>
<data:label.name/>
<b:else/>
<a expr:href='data:label.url'><data:label.name/></a>
</b:if>
(<data:label.count/>)
</li>
</b:if>
</b:loop>
</ul>

<b:include name='quickedit'/>
</div>
</b:includable>
</b:widget>
這樣在分類的部份,這個標籤就能夠順利隱藏了。

8 意見:

AlanT 提到...

請確定一下我的理解對不對...這篇所說的 "至頂" 功能, 是把有特定標籤的文章統一list到旁邊這個區塊裡, 而不是像無名的 "至頂" (在首頁只顯示有"至頂"的文章,而非至頂的文章則不顯示於首頁)

那像無名這種隱藏特定篇的文章是否也能做到?

Jinyao Lin 提到...

To:alant
是的。這邊的置頂是可以任意挑選出幾篇文章出來,方便讀者點閱。例如我的部落格的熱門文章,就是用自訂標籤的方式作成的。而這個特殊標籤不會出現在內文的標籤裡面。

隱藏特定篇的文章必須用類似這個hacks的方式改,但是作法完全不一樣。有時間我再寫一個新的hacks來看看。

Stingray Lien 提到...
作者已經移除這則留言。
Stingray Lien 提到...

請問一下:我想放置的是以點閱率做為排序標準的「熱門文章」,應該如何做呢?

Jinyao Lin 提到...

To:stingray
目前Blogger內建機制可能沒有辦法達到這種要求。不過建議您可以使用MyBlogLog,也就是我的部落格左下的地方的那個服務。安裝以後可以有最高點閱率連結的列表。

Hey 提到...

請問如果我想隱藏多個標籤,我該怎麼做http://radiohey.blogspot.com/

禾本族 提到...

您好,因為我有些舊的文章想使用隨機方式播放,您這個功能很棒,但可以用隨機的方式嗎?因為現在好像是用時間排序。

nobody 提到...

您好,我的部落格使用這個HACK之後,最近發現點到置頂文章及最新文章部分,都會出現加入Google Reader,比對程式碼與這邊無誤,不知該如何解決,Thanks.

 
Blogger Template Layout Design by [ METAMUSE ] : Code Name Gadget 1.1