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

6 Reponses So Far ↓

  1. Hermy:

    你这。。。没有针对成分吧。。。
    谁叫你丫非要取个连按几次shift的名字,我就从来不觉得烦~

    那段东西直接加到header任何地方吗?还有最后那句话,保存用户信息120天,你可以设置为更久,是要删掉的吧?

  2. punkid:

    我这帮朋友们不都blogbus么,你这留一个,他这留一个的,重复劳动多痛苦…

    加header里任何位置都行,那句中文解释没必要删掉,//表示注释,不会被读取的。

  3. Hermy:

    你这代码一加我整个blog就只能显示上面灰色的一条。。。还好后台没关,一删掉就正常了,可把我吓死了,您老还是自己输把~在我那写个p就行了

  4. punkid:

    代码应该加到</head>之上,应该是没问题的。

    我现在用我自己写的那个GreaseMonkey的脚本,进谁的blog都不要再填信息了 :D

  5. Hermy:

    我说你就不能顺带提下更新的脚本往哪去?明知道对这东西一窍不通。。。对greasemonkey也是。。。

  6. druggo:

    我第一个blog好像就开在blogbus

Leave a Reply ↓