经过长时间的折腾,我想要的功能这个博客已经基本实现,只有一个功能是我一直想实现,而又找不到满意的实现方法的,那就是随机文章。很早就知道B Stir之类的方法,但是速度慢,可定制性差让我宁愿不使用。我要的是一种可以与我已有的“相关文章”相似的方法。綸太郎最近贴出了通过抓取RSS显示相关文章的方法,虽然只能在边栏实现但已经很不错,于是昨晚就把首页的“猥瑣時間”代换成“隨機文章”。今天又再折腾了一下,居然实现了在每篇文章下方添加随机文章的方法。
进入后台 > 版面配置 > 修改HTML,点选“展開小裝置範本”,找到</head>,在它的前面添加下面的代码:
<script type='text/javascript'>
//<![CDATA[
var randarray = new Array();var l=0;var flag;
var numofpost=5;function randomposts(json){
var total = parseInt(json.feed.openSearch$totalResults.$t,10);
for(i=0;i < numofpost;){flag=0;randarray.length=numofpost;l=Math.floor(Math.random()*total);for(j in randarray){if(l==randarray[j]){ flag=1;}}
if(flag==0&&l!=0){randarray[i++]=l;}}document.write('隨機文章:<ul>');
for(n in randarray){ var p=randarray[n];var entry=json.feed.entry[p-1];
for(k=0; k < entry.link.length; k++){if(entry.link[k].rel=='alternate'){var item = "<li>" + "<a href=" + entry.link[k].href + ">" + entry.title.$t + "</a> </li>";
document.write(item);}}
}document.write('</ul>');}
//]]>
</script>
红色字体部分 numofpost=5 控制显示的相关文章数量,可以看到我的设置是5篇,你可以按照自己的喜好设置一个数。抱怨一下,虽然我不懂javascript,但我可以看出作者的代码很乱,使得可读性极差。
找到下面这段代码:
<b:if cond='data:post.labels'>
<data:postLabelsLabel/>
<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:if>
插入红色字体部分,如下面代码:
<b:if cond='data:post.labels'>
<data:postLabelsLabel/>
<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:if cond='data:blog.pageType == "item"'>
<script src="/feeds/posts/default?alt=json-in-script&start-index=1&max-results=1000&callback=randomposts" type="text/javascript"></script>
</b:if>
</b:if>
“<b:if cond='data:blog.pageType == "item"'>”与“</b:if>”的作用是使被它们包围的代码只在文章页面实现。点击保存就OK啦。效果如下图:
(这样的“随机文章”与“相关文章”真是“般配”)
参考文章:
裝上隨機文章(Random Posts),加強部落格的黏著度
(完)
謝謝你的熱心實作,我安裝後也成功了,再次感謝。
回复删除To 綸太郎:
回复删除不用客气,我从你那里学到的要比这多太多了。
thanks!!!! ^_^
回复删除好讚~你和綸太郎都是造福部落客的神丫~已套用,再次感謝~
回复删除,
嗨,我找不到這一段代碼...