Blogbus Hack : 保存评论框信息 (更新GreaseMonkey脚本)
Update @ 08/01/04: 因为目前Bus已经正式加入了保存留言信息功能,此hack已成历史...
Blogbus的评论系统有两点让我极为不爽: 一是评论过滤机制,导致我的留言经常莫名其妙的被拒绝发表(我连双脚都举起来保证我绝对没有发表任何有违和谐的信息);二是评论框不会在提交留言之后记录我的用户信息(Name, E-Mail, URL),每次留言我都得手动填写。这前一点不爽的谁也没办法,谁叫我们要和谐呢,后面这点的话我们可以通过在模板里加入一段javascript来保存评论者的cookie信息。我得先申明,对Javascript我也基本属于入门阶段,以下代码中很大程度参考自PPK的这篇文章Javascript - Cookies。
Blogbus最近改版一次后,新的模板系统不再允许修改评论框了,所有模板的评论框都是统一规范的,所以这个脚本适用于任何新版模板系统的任何模板,旧版的话我稍后补充。对于新版模板的话,你需要做的只是在header(前提是你先的启用自定义模板来修改)里加入以下代码:
<script type="text/javascript">
function setCookie(name,value,days) {
if(days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = ";expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}
function getCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function rememberFormInputs(form_id, prefix, days) {
if(!document.getElementById(form_id)) return false;
var form = document.getElementById(form_id);
var inputs = form.getElementsByTagName('input');
for (var i=0; i<inputs.length; i++) {
var input = inputs.item(i);
if (input.type == 'text') {
input.onblur = function() {
var name = this.name;
var value = this.value;
setCookie(prefix + name, value, days);
};
var old_value = getCookie(prefix + input.name);
if (old_value && old_value !='') {
input.value = old_value;
}
}
}
}
window.onload = function() {
rememberFormInputs('commentForm','input_',120); //保存用户信息120天,你可以设置为更久
}
</script>
对于使用旧版模板系统的,因为模板的不同,并不能保证所有留言框都有名为commentForm的ID,你需要修改自定义模板里的Comment.Form模块,其中有这么一句:
<form method="post" action="<!-- ~ addcomment_url ~ -->" />
修改为:
<form method="post" action="<!-- ~ addcomment_url ~ -->" id="commentForm" />
然后在header里的</head>之上照旧添加上面那段代码就是了。
至于那段代码什么意思,我也懒的解释了,懂一点javascript的都能看懂,不懂的知道怎么用就行了 :D Keep in mind, this is NOT a tutorial, but a little hack
更新: 刚写了个GreaseMonkey小脚本,如果你装了Firefox和这个插件的话,再装上我这个脚本程序,以后无论你所访问的blogbus博客有没有添加我上面的那段script,使用的是新模板系统还是旧的,都能通过这个脚本程序保存你的信息。
脚本下载地址 : rememberTheName.user.js
Categorized under Blogbus 增强 with blogbus cookie hack javascript 保存评论框信息 tagged.
15 Replied
太谢谢你了!你真是太好了!
现在评论框旁边还是没有出现那个“记住我”。
谢谢你这么耐心的帮我。
我看了你的blog,脚本是应该能正常工作了,而且是默认就记住评论信息的。至于那个"记住我",我没说清楚,它其实是新模板系统才有的功能,所以用旧模板系统里的模板的话目前只能是继续靠我这个脚本来帮助执行了,但不会有"记住我"这个选项 :(
(2008-01-06 16:30:17)
这个script是不会影响统计信息的,之间并不存在任何关联,所以我无法说明你的统计信息为什么会清零,或者这只是bus的问题...who knows :(
麻烦你再把脚本加进去一次给我看下,我好知道究竟是你加的过程中哪出问题了。
(2008-01-06 16:03:56)
http://yingna98.blogbus.com/
我看了下"蓝蝴蝶"的模板,加再header最下面是没错的,可能是你贴过去的代码出了点问题,你可以留下你的blog地址我过去看下吗?
(2008-01-06 10:56:52)
确实如此,不用再hack了,我这hack终于可以光荣退伍了,接下来还得fix我那几个模板了...
(2008-01-04 16:27:19)
至于后边,就全部理解错位了。
但Comment.Form代码块中我没有加错,都已经加入了id=\"commentForm\"
刚才把
<script type=\"text/javascript\">
function setCookie(name,value,days) {
if(days) {
var date = new Date();
date.setTime(date.getTime() (days*24*60*60*1000));
...省去部分代码
}
</script>
加到header里之后,测试了一下,正常了,非常感谢你的耐心回复:)
http://liusbeta.blogbus.com/logs/%7B#addcomment_url}
页面提示:
无法找到该网页
HTTP 404
最可能的原因是:
在地址中可能存在键入错误。
当您点击某个链接时,它可能已过期。
因为你完全弄错了,我看了你的测试blog,在header里加的是这段代码
而你还需要在Comment.Form这个模板区域里给
加入
id="commentForm"(2007-12-29 16:51:52)
然后把script放到header最下面就可以了。
你把我文章里提到的代码全部放到header中最下面就是了
(2007-12-29 16:07:30)
我使用的是旧模板中的 Summer Blue
这个模板的commentForm中,有这么一句:
<form method=\"post\" action=\"<!-- ~ addcomment_url ~ -->\">
但并不是:
<form method=\"post\" action=\"<!-- ~ addcomment_url ~ -->\" />
也就是说有微小区别。我不太清楚应该按照您给的代码来,还是应该在原有的那句代码上加上 id=\"commentForm\" 就可以了。
另外是,这个模板的Header代码块中,并没有</header> 所以没得加。而index中虽然有</header>但是我加了之后,发表评论时就会出现错误。出现的错误见我上一个评论。
所以我很想请您看一下Summer Blue这个模板(旧模板第6页),觉得应该怎样加才能实现呢?谢谢。
假若没有时间帮我也没有关系:)
你把
id="commentForm"加到它那句中,然后把script放到header最下面就可以了。
(2007-12-29 10:45:14)
http://xxxx.blogbus.com/logs/%7B#addcomment_url}
页面上显示:
无法找到该网页
HTTP 404
最可能的原因是:
在地址中可能存在键入错误。
当您点击某个链接时,它可能已过期。
你需要做的是确保script加到
</head>之前就可以了,因为旧模板系统里的模板各不相同,我无法保证到底是该放到header里还是index里,如果说你的header里有出现<head>的话,那放在header里应该是没问题的。至于这句:
其实更改的地方只有一处而已,往里面加入
id="commentForm"就行了。而且不要往代码里加入
\号这个转义符。(2007-12-28 17:47:19)
某个模板的commentForm中有
<form method=\"post\" action=\"<!-- ~ addcomment_url ~ -->\" />
这一句,但是在header中,并没有</head>
相反,index里有</head>,那是否应该是加到index里?
里面有一句代码是:
if (obj.remember && obj.remember.checked) {
save_cmt_cookie(obj.name.value, obj.email.value, obj.homepage.value);
} else {
clear_cmt_cookie();
}
虽然有这么一句代码,但在评论框中好像还没看到name=remember的checkbox,我估计以后bus会把这一功能加上的
我在写完这个脚本后确实发现了这个,但是又不知道blogbus拿这段script究竟用在哪了。
Bus最近的这些动作有点糙了
其实最好的评论upgrade是开启会员评论,对于已经登陆了的blogbus用户直接填写评论就行了,再把avatar整合进来。
评论部分是blogbus比较弱的一个部分。
(2007-12-24 17:41:16)