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>

对于使用旧版模板系统的,因为模板的不同,并不能保证所有留言框都有名为commentFormID,你需要修改自定义模板里的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





15 Replied

  • 真的耶!刚才测试过了,就是默认记住信息的。终于成功了啦!
    太谢谢你了!你真是太好了!
    yingna98 wrote this at 2008-01-06 17:04:01 [回复]
  • 我加好了,你说的是对的,这一次没有出现统计信息清零的现象,刚才可能是我的机子的问题。
    现在评论框旁边还是没有出现那个“记住我”。
    谢谢你这么耐心的帮我。
    punkid 回复 yingna98 说:
    我看了你的blog,脚本是应该能正常工作了,而且是默认就记住评论信息的。至于那个"记住我",我没说清楚,它其实是新模板系统才有的功能,所以用旧模板系统里的模板的话目前只能是继续靠我这个脚本来帮助执行了,但不会有"记住我"这个选项 :(
    (2008-01-06 16:30:17)
    yingna98 wrote this at 2008-01-06 16:27:14 [回复]
  • 好,你等一下,我马上再加进去。
    yingna98 wrote this at 2008-01-06 16:19:23 [回复]
  • 还有,加在header 下面后统计信息清零了。
    punkid 回复 yingna98 说:
    这个script是不会影响统计信息的,之间并不存在任何关联,所以我无法说明你的统计信息为什么会清零,或者这只是bus的问题...who knows :(

    麻烦你再把脚本加进去一次给我看下,我好知道究竟是你加的过程中哪出问题了。
    (2008-01-06 16:03:56)
    yingna98 wrote this at 2008-01-06 15:05:17 [回复]
  • 真没想到您能这么快就回复了。谢谢您啊。这是我的地址
    http://yingna98.blogbus.com/
    yingna98 wrote this at 2008-01-06 14:30:37 [回复]
  • 旧模板 “蓝蝴蝶” 在header下面加上那段代码后 ,代码都显示到页面上了,不知道到底应该加在哪里了。(我直接复制了这段代码放在header 最下面的,那个id 我也加到commentform里了。)
    punkid 回复 yingna98 说:
    我看了下"蓝蝴蝶"的模板,加再header最下面是没错的,可能是你贴过去的代码出了点问题,你可以留下你的blog地址我过去看下吗?
    (2008-01-06 10:56:52)
    yingna98 wrote this at 2008-01-06 10:45:45 [回复]
  • 非常感谢!!
    烟薰 wrote this at 2008-01-04 15:11:27 [回复]
  • 新系统模板中终于实现“记住我[]”正好验证了我07/12/24在评论中提到的
    punkid 回复 jiee 说:
    确实如此,不用再hack了,我这hack终于可以光荣退伍了,接下来还得fix我那几个模板了...
    (2008-01-04 16:27:19)
    jiee wrote this at 2008-01-04 14:01:56 [回复]
  • 呵呵,主要是我没有理解正确,加之你说的稍微有些笼统,我看你说旧模板稍做补充,以为那一大段代码只能用新模板才能加,而旧模板只用改一下那行代码和把那行代码加到header里就行了,所以误解了。

    至于后边,就全部理解错位了。

    但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里之后,测试了一下,正常了,非常感谢你的耐心回复:)
    test wrote this at 2007-12-29 17:52:23 [回复]
  • 我就是这样加的,结果发表评论时就会失败,地址栏上显示的地址会变成:

    http://liusbeta.blogbus.com/logs/%7B#addcomment_url}

    页面提示:

    无法找到该网页
    HTTP 404
    最可能的原因是:
    在地址中可能存在键入错误。
    当您点击某个链接时,它可能已过期。
    punkid 回复 test 说:
    因为你完全弄错了,我看了你的测试blog,在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));
    ...省去部分代码
    }
    </script>


    而你还需要在Comment.Form这个模板区域里给
    <form method="post" action="<!-- ~ addcomment_url ~ -->">

    加入id="commentForm"
    (2007-12-29 16:51:52)
    test wrote this at 2007-12-29 16:42:30 [回复]
  • 那句已经加了,但这句没有看懂,实在不好意思,请您稍稍解释详细一下:


    然后把script放到header最下面就可以了。
    punkid 回复 test 说:
    你把我文章里提到的代码全部放到header中最下面就是了
    (2007-12-29 16:07:30)
    test wrote this at 2007-12-29 13:04:14 [回复]
  • 是这样的。
    我使用的是旧模板中的 Summer Blue
    这个模板的commentForm中,有这么一句:

    <form method=\"post\" action=\"<!-- ~ addcomment_url ~ -->\">

    但并不是:

    <form method=\"post\" action=\"<!-- ~ addcomment_url ~ -->\" />

    也就是说有微小区别。我不太清楚应该按照您给的代码来,还是应该在原有的那句代码上加上 id=\"commentForm\" 就可以了。


    另外是,这个模板的Header代码块中,并没有</header> 所以没得加。而index中虽然有</header>但是我加了之后,发表评论时就会出现错误。出现的错误见我上一个评论。

    所以我很想请您看一下Summer Blue这个模板(旧模板第6页),觉得应该怎样加才能实现呢?谢谢。

    假若没有时间帮我也没有关系:)
    punkid 回复 test 说:
    你把id="commentForm"加到它那句
    <form method="post" action="<!-- ~ addcoment_url ~ -->">

    中,然后把script放到header最下面就可以了。
    (2007-12-29 10:45:14)
    test wrote this at 2007-12-29 08:04:31 [回复]
  • 我自己加了一下,加完之后失败了。一发评论的时候,地址栏中显示这个地址:

    http://xxxx.blogbus.com/logs/%7B#addcomment_url}

    页面上显示:

    无法找到该网页
    HTTP 404
    最可能的原因是:
    在地址中可能存在键入错误。
    当您点击某个链接时,它可能已过期。
    punkid 回复 test 说:
    你需要做的是确保script加到</head>之前就可以了,因为旧模板系统里的模板各不相同,我无法保证到底是该放到header里还是index里,如果说你的header里有出现<head>的话,那放在header里应该是没问题的。

    至于这句:

    <form method="post" action="<!-- ~ addcomment_url ~ -->" />


    其实更改的地方只有一处而已,往里面加入id="commentForm"就行了。

    而且不要往代码里加入\号这个转义符。
    (2007-12-28 17:47:19)
    test wrote this at 2007-12-28 12:28:36 [回复]
  • 有一个问题。

    某个模板的commentForm中有

    <form method=\"post\" action=\"<!-- ~ addcomment_url ~ -->\" />

    这一句,但是在header中,并没有</head>

    相反,index里有</head>,那是否应该是加到index里?
    test wrote this at 2007-12-28 12:24:45 [回复]
  • 新模板系统中,评论框下面调用了一段js代码:http://public.blogbus.com/blogbus/skin/common/helper1.js?v1

    里面有一句代码是:
    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会把这一功能加上的
    punkid 回复 jiee 说:
    我在写完这个脚本后确实发现了这个,但是又不知道blogbus拿这段script究竟用在哪了。

    Bus最近的这些动作有点糙了

    其实最好的评论upgrade是开启会员评论,对于已经登陆了的blogbus用户直接填写评论就行了,再把avatar整合进来。

    评论部分是blogbus比较弱的一个部分。
    (2007-12-24 17:41:16)
    jiee wrote this at 2007-12-24 13:27:48 [回复]

Leave a Reply

{#face:1} {#face:2} {#face:3} {#face:4} {#face:5} {#face:6} {#face:7} {#face:8} {#face:9} {#face:10} {#face:11} {#face:12} {#face:13} {#face:14} {#face:15}

About

这是一个致力于挖掘,完善blogbus功能,分享blogbus小技巧和非官方资源的博客。所谓"hack",就是在官方未能达到实现某种功能之前,自己通过各种"邪门歪道"来实现它。

欢迎有兴趣的朋友加入到这个博客中来,一同完善这个站,提供更多有用的资源/技巧给blogbus用户们。

这是我的e-mail联系地址(Dont Spam It for God's Sake):

punkid.online@gmail.com

Miscellaneous