2006年12月8日星期五

blogger:不必通过外部JS文件使RSS供稿超过20的方法

首先说明有最简单的方法,如80通过GOOGLE READER订阅10个以下的RSS供稿方法。

还有斑斓通过JSON的一键hack制作RSS供稿的方法

我这里介绍的是直接修改你的模块的方法,好处是不必调用外部的JS文件,在博客上显示的也比较整齐。方法由hoctro 提供,原文在此

简单就是先切换到模版项,然后在页面元素项目上添加一个新的页面元素,选择添加
HTML/JavaScript项目,然后给个命名“最新评论”。然后切换到修改html项目,在修改模版下面的扩展窗口小部件项目前的方框打勾,然后在代码方框里面搜索你刚刚添加的有“最新评论”的那个项目。然后完整替换类似这样的一块代码:

<b:widget id='HTML20' locked='false' title='最新评论' type='HTML'>



</b:includable>
</b:widget>

全部替换成以下代码:


<b:widget id='HTML20' locked='false' title='最新评论' type='HTML'>
<b:includable id='main'>

<!-- only display title if it's non-empty -->
<b:if cond='data:title != ""'>
<h2 class='title'><data:title/></h2>
</b:if>
<div class='widget-content'>
<!-- <data:content/> -->
</div>

<div id='data'/>
<b:include name='quickedit'/>

<script type='text/javascript'>

/** Code taken from Sample at Code.Google.com **/

/**
* Lists blog entries from the specified JSON feed
* by creating a new 'ul' element in the DOM. Each
* bullet is the title of one blog entry, and contains
* a hyperlink to that entry's URL.
*/
function listEntries(json) {
var ul = document.createElement('ul');

for (var i = 0; i &lt; json.feed.entry.length; i++) {
var entry = json.feed.entry[i];
var alturl;

for (var k = 0; k &lt; entry.link.length; k++) {
if (entry.link[k].rel == 'alternate') {
alturl = entry.link[k].href;
break;
}
}

var li = document.createElement('li');
var a = document.createElement('a');
a.href = alturl;

var txt = document.createTextNode(entry.title.$t);
a.appendChild(txt);
li.appendChild(a);
ul.appendChild(li);
}

document.getElementById('data').appendChild(ul);
}


function search(query, type) {
removeOldQueryResults();

var script = document.createElement('script');
script.setAttribute('src', 'http://' + query + '/feeds/' + type +
'/default?alt=json-in-script&amp;callback=listEntries');
script.setAttribute('type', 'text/javascript');
document.documentElement.firstChild.appendChild(script);
}

/**
* Removes results from the previous search, including
* the bullet list of blog entries and the script object
* used to obtain the feed.
*/
function removeOldQueryResults() {
// Remove the script element used to perform the query.
var script_nodes = document.getElementsByTagName('script');
for (var i = 0; i &lt; script_nodes.length; i++) {
var cur_node = script_nodes[i];

if (cur_node.src &amp;&amp; cur_node.src.indexOf('json') != -1) {
cur_node.parentNode.removeChild(cur_node);
}
}

// Remove the bullet list of blog entries.
var div = document.getElementById('data');
if (div.firstChild) {
div.removeChild(div.firstChild);
}
}

homeUrl = "<data:blog.homepageUrl/>";
var arr = new Array(4);
arr = homeUrl.split("/",4);

// To change from your blog to someone else (like mine,) do this:
// search("hoctro.blogspot.com", "comments");
// To change from recent comments to recent posts, do this:
// search(arr[2], "posts");

search(arr[2], "comments");

</script>
</b:includable>
</b:widget>


上面的替换方法是针对评论的,用上面的代码替换的结果是该模块能显示超过20个以上的最新评论。另外注意这一行

<b:widget id='HTML20' locked='false' title='最新评论' type='HTML'>

的HTML20,那个20数字是你的模块代号,不可以和已有的模块代号重复!所以最好替换的时候把这个20替换成被你替换模块的数字代号。

然后上面说的是评论的修改方法,要帖子的RSS怎么办呢?

只需修改代码后面的那个

search(arr[2], "comments");

变成:

search(arr[2], "posts");

就可以了。如果你希望看其他人博客的评论,例如我的博客的评论,你可以把这一行改成:

search("gfancn.blogspot.com", "comments");

如果你想限制显示的评论数,你可以修改以上代码

for (var i = 0; i &lt; json.feed.entry.length; i++) {
var entry = json.feed.entry[i];
var alturl;


var i = 0 ,修改0为你想显示的文章数,我自己的测试好像这里的限制有点问题,例如我设置成14,则显示12篇评论,15则11篇评论,类推12则12篇评论。具体大家自己尝试。

如果你要如上文所述显示自己的标签的RSS供稿呢?修改代码:

var script = document.createElement('script');
script.setAttribute('src', 'http://' + query + '/feeds/' + type +
'/default?alt=json-in-script&amp;callback=listEntries');
script.setAttribute('type', 'text/javascript');
document.documentElement.firstChild.appendChild(script);
}

的这一部分,把
'http://' + query + '/feeds/' + type +
'/default
后面修改成

'http://' + query + '/feeds/' + type +
'/default/-/[如上文所说方法得到的标签名称]



这里有个英文效果图:



IE6下的效果:


8 评论:

IwfWcf 说...

我想问问如果要使用外部rss供稿,例如del.icio.us的应该怎样改?

GG 说...

似乎那就不能运用此方法,而且你用其他的供稿方式在这里就算使用也是没有任何意义的,不会有任何区别……

IwfWcf 说...

那除了Google Reader的方法以外有没有别的方法可以实现多于5个的外部供稿呢?

GG 说...

我文章开头不就说了现有的几种方法吗?
链接都给出来了~~

IwfWcf 说...

我问的是除了Google Reader外的方法啊,你文章开头给的除了Google Reader都不支持外部供稿啊

GG 说...

;) 汗,似乎就google reader一种……

Byron 说...

在这种方法上,我的评论都20多条了还在显示。
啥时候是个头啊。
我的意思是,我想显示10条最新评论的话该怎么办?注意,是“最新”
你说的如果你想限制显示的评论数,你可以修改以下代码
for (var i = 0; i < json.feed.entry.length; i++) {
var entry = json.feed.entry[i];
var alturl;

的var i = 0 ,修改0为你想显示的文章数。
这个好象是赋初值吧,就是说从第几条评论开始显示。
如果我设置成var i =12的话,那就是说前11条评论不显示,从第12条开始显示。
个人观点,不知对否。
所以上面的东东不能够符合我的要求,还烦帮忙看下。
byronjia#gmail.com
byronjia.blogger.com

Byron 说...

http://byronjia.blogspot.com
上面的地址好像错了,汗。
还有,你的留言为啥直接能显示啊。
我的还要强制刷新。
还望告知。

发表评论: ☆欢迎灌水☆言论自由☆交流快乐☆