给Blogger添加相关文章功能

固定链接 .
  • 共享:收藏到我的Technorati
  • 收藏到我的Del.icio.us
  • 收藏到我的DiggIt!
  • 收藏到我的Yahoo!
  • 收藏到我的Google
  • 收藏到我的Meneame
  • 收藏到我的Furl
  • 收藏到我的Reddit
  • 收藏到我的Magnolia
  • 收藏到我的Blinklist
  • 收藏到我的Blogmarks
这个功能寻找了很久,终于从咖啡鱼的Blog中找到:Blogger相关文章模块升级版,很是感谢!
同时感谢原版作者(英文):PurpleMoggy

有了这个功能后,可以说,Blogger就基本上和Wordpress差不多了。如果不是由于某些原因,用不了Blogger的域名绑定服务,那么再申请一个域名,基本上已经可以做成一个和 Wordpress差不多的Blog,而且还比Wordpress省事,不用自己架设网站(技术要求还更高)和花钱租空间。
话 归正传,本Hack是根据标签来判断文章相关性的,注意标签中不能包含像?/之类的字符,对文章的标签数量也没有限制。在咖啡鱼的教材中,是将相关文章放在 "页面元素"中,需要添加一个HTML/Javascript模块。本例有点改动,将相关文章放在文章后面,自己比较喜欢这种形式。

1、把下面代码放在<head></head>中。其中的"i < 12"是控制文章数量的,建议数值不要太大,以免影响浏览速递。

<script type="text/javascript">
//<![CDATA[
var relatedTitles = new Array();
var relatedTitlesNum = 0;
var relatedUrls = new Array();
function related_results_labels(json) {
for (var i = 0; i < json.feed.entry.length; i++) {
var entry = json.feed.entry[i];
relatedTitles[relatedTitlesNum] = entry.title.$t;
for (var k = 0; k < entry.link.length; k++) {
if (entry.link[k].rel == 'alternate') {
relatedUrls[relatedTitlesNum] = entry.link [k].href;
relatedTitlesNum++;
break;
}
}
}
}
function removeRelatedDuplicates() {
var tmp = new Array(0);
var tmp2 = new Array(0);
for(var i = 0; i < relatedUrls.length; i++) {
if(!contains(tmp, relatedUrls[i])) {
tmp.length += 1;
tmp[tmp.length - 1] = relatedUrls[i];
tmp2.length += 1;
tmp2[tmp2.length - 1] = relatedTitles[i];
}
}
relatedTitles = tmp2;
relatedUrls = tmp;
}
function contains(a, e) {
for(var j = 0; j < a.length; j++) if (a[j]==e) return true;
return false;
}
function printRelatedLabels() {
var r = Math.floor((relatedTitles.length - 1) * Math.random());
var i = 0;
document.write('<ul>');
while (i < relatedTitles.length && i < 12) {
document.write('<li><a href="' + relatedUrls[r] + '">' + relatedTitles[r] + '</a></li>');
if (r < relatedTitles.length - 1) {
r++;
} else {
r = 0;
}
i++;
}
document.write('</ul>');
}
//]]>
</script>

2、找到下面黑色的代码,在</b:if>与</b:loop>之间,插入如下红色的代码。注意:"max-results=12"是控制相关文章的显示数值。
<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:if cond='data:blog.pageType == "item"'>
<script expr:src='"/feeds/posts/default/-/" + data:label.name + "?alt=json-in-script&amp;callback=related_results_labels&amp;max-results=12"' type='text/javascript'/>
</b:if>

</b:loop>
</b:if>


3、找到自己想要显示相关文章的位置,将下面红色代码放进去,保存就OK那了。本例就放在评论前,如下面黑色代码。
<b:if cond='data:blog.pageType == "item"'>
<script type="text/javascript">
removeRelatedDuplicates(); printRelatedLabels(); </script> </b:if>

<div id='comments'>
<a name='comments'/>
<h4>
<b:if cond='data: post.numComments == 1'>
1 条评论:
<b:else/>
<data:post.numComments/> 条评论:
</b:if>
</h4>
<dl id='comments-block'>
<b:loop values='data: post.comments' var='comment'>
<dt class='comment-author' expr:id='"comment-" + data:comment.id'>
<a expr:name='"comment-" + data: comment.id'/>
<b:if cond='data:comment.authorUrl'>
<a expr:href='data:comment.authorUrl' rel='nofollow'><data:comment.author />

4、完成,看看效果吧!


Power by 写写改改™



26 条 留言(发表评论):

Belen 说...

相关文章用JavaScript脚本,将文章的标签生成json数据,然后查询出一定数量的文章。这次重新换模板,已经不用这个功能了,因为有五个标签的话,单生成json数据就要十多秒。测试用二十个标签,就要差不多三十秒才可以生成json数据,可以看到生成文章标签像慢镜一样,一个个出来,每个标签出来都要花一秒至两秒的时间。
不知是否是网络问题,还是...

枯言 说...

哈哈,我也用上你这个相关文章功能了,这个好像比我那个“随机文章”的速度快些....

Belen 说...

呵呵,那我都不用你的那个了
本来还在观望

Belen 说...

呵呵,还忘记了,我现在用的还不是这个,用了一个另外一个相关文章功能
和这个功能差不多,只是没有这个那么先进,每个标签都读,而是指定读几个标签的文章。我指定其只读一个标签的文章,所以速度会好点

匿名 说...

头大,照着做没有效果出来

Belen 说...

晕,难道说得不够清楚?
有没有报错啊?

mikeshaws 说...

[color=#0000FF][size=5][url=http://mikeshaws.blogspot.com]很多Blogger并没有这里所说的XXX之间的代码,我看过很多Blogger原始模板里都没有你所说的上面代码,更别说把其他的代码插入进去了。[/url][/size][/color]

枫情博客 说...
作者已删除了此帖。
枫情博客 说...
作者已删除了此帖。
枫情博客 说...

[url=http://mikeshaws.blogspot.com][color=#0000FF]很多Blogger并没有这里所说的XXX之间的代码,我看过很多Blogger原始模板里都没有你所说的上面代码,更别说把其他的代码插入进去了。[/color][/url]

Belen 说...

没有的话,可能是已经修改,或者取消了在文章里显示该文章的标签。
如果文章中没有显示标签的话,那首先要启用该功能,才可以接着用这个相关文章的功能。

开心果 说...

非常感谢!!我的也设置成功了,大家看看blog.bai0.com

Belen 说...

呵呵,看到了

XYStudio2009 说...

好帖真多啊。

XYStudio2009 说...

ID 为"Blog1"的窗口小部件不能包含元素"#comment"。窗口小部件只能包含 b:includable 元素。

这样的错误提示

Belen 说...

代码放错了吧?
要放在b:includable标签内

XYStudio2009 说...

恩,我也搞定了,谢谢belen分享。

Belen 说...

不客气,Google不知啥时推出热文和相关文章功能...

texas hold'em 说...

如何修改相关文章在整个版面的位置呢?
比如我添加了这个功能之后,显示的位置超出了版面,想把它移到右边一些,能实现么?

Belen 说...

将显示代码放在一个DIV内,控制DIV的宽度和位置

滴泪斩 说...

不好意思,我想问一下,你说的第3步插入代码,我没有找到,你能给我说明一下么?我看到好像很多人都没有找到似的。没有这段代码,还怎么添加其他代码啦。希望你能抽个功夫,教我怎么弄啦。我的邮箱是:softfly365@163.com,谢谢啦

Belen 说...

第三步的代码位置,是根据你的排版自己放的。
本例中的放置位置,是我的模板,不是标准模板,已经做了很大改进,所以是找不到的。

我介绍的方法比较复杂点,如果对Blogger代码不熟的话。
可以看看色彩斑斓的,有详细设置过程:http://sunr.blogspot.com/2006/12/blogger_11.html

Kenji Kee 说...

恩。

这个插入文章下面介于评论之间的位置比较合适。

用模块方式的容易和别的模块搞混。

【无敌铁金钢】 说...

谢谢帮助我完成我的心愿!

不扬 说...

blogger自定义域名还是可以的。自己换IP就可以。我的博客就是这样的。

Malaysialogo 说...

我用的是2009年的blogspot的模板,没有找到第二步和第三步中所说的代码阿!

可以针对最新的模板做一个教程吗?谢谢!

发表评论

1、可以使用<b>、<i>、<a>等Html标志,让评论更有特色...
2、支持OpenID登录,技术达到国际先进水平。但切记,评论内容不代表本站观点!
3、当遇到“连接被重置”、“连接超时”和“此网页无法访问”等而发表不了评论的话,请多刷新几次页面,或迟三分钟后再试;还是不行的话,请爬墙...
4、对你的浏览造成不便,站长在此代表全国G.FW工作人员向你鞠躬致歉!!!






赞助商链接: