I’m qiqiboy !

  • Yes,I’m qiqiboy ! And my vision is world peace.
Home
|
Program Email输入框处实时显示gravatar头像+email验证+动态信息提醒

Email输入框处实时显示gravatar头像+email验证+动态信息提醒

| Categories: Program

不知道有没有人发现,我的评论输入框处最近几天和一周前有了些许改变。之前只有老访客(发表过评论,浏览器中保存有cookie)来时资料输入框会显示头像,并会折叠起来。但是现在即使新访客第一次来,也会看到一个显示gravatar头像的小区域,当然,默认它显示的是“神秘人头像”。这是干什么的?

答案:这是一个实时预览自己Gravatar头像的,当你输入自己email后就会在这里实时显示你的头像!当然,这个想法冒出时我网上搜索了一下,还真有人搞过,你可以百度搜索“实时显示gravatar”,别人介绍有很简单的实现方法。本文最下面也有我写的jQuery代码,一行搞定!!但我下面的js代码结合了其它功能,不光显示email头像,还结合了实时显示输入名字,提示文字,email验证检测等小功能。

我这里代码比较啰嗦,因为我要照顾两种情况,一种是老访客,即访问时折叠显示资料框,还有隐藏/显示按钮,另一种新访客正常显示资料输入框。这两种的提示文字也不一样,比如老访客显示welcome back,新访客你就不能这样问候他们了。另外资料输入框中还有提示文字“your email””your name”等文字,是受到搜索框中添加提示文字启发,给资料输入框也加入了提示文字。因为我不想动以前的代码,所以为了不破坏这种效果,也要考虑到这一点。

close

我的comments.php中资料输入处代码:

   1: <div id="real-avatar" class="comment-avatar">//定义头像显示位置

   2: <?php echo get_avatar($useremail,'32'); ?>//用WP内置函数取得头像,,如果你用常规的avatar头像获取url样式,并定义其一个ID,下面的js代码会简单很多,不过我更喜欢WP默认函数调用。

   3: </div>

   4: <div id="welcome"> //这个是显示问候语的

   5: /*老访客显示welcome back 用户名*/

   6: <?php if(isset($_COOKIE['comment_author_email_'.COOKIEHASH]) && isset($_COOKIE['comment_author_'.COOKIEHASH])) { ?>

   7: <?php printf(__('<span id="commentwelcome">Welcome back </span><strong><span id="author-name">%s</span></strong>. '), $comment_author) ?>

   8: <?php } else { ?>

   9: /*新访客则显示一段我自定义的文字*/

  10: <?php printf(__('<span id="commentwelcome1">Hi, I know you have something to tell me. Please leave me a reply</span><strong><span id="author-name">%s</span></strong>. '), $comment_author) ?></div><?php endif; ?>

  11: <?php } ?></div>

  12: /*请注意这两种不同定义中的commentwelcome和commentwelcome1,我的js代码中靠判断这两值的有无来区别老访客和新访客的*/

当然,我这里贴的是大概结构,有一些我省去了,这里只是为了让你更能理解下面我的js代码为何要写那么麻烦。

下面是我写的JavaScript代码(为什么不用jQuery呢,嗯,我也写了jQuery代码,但是发现只是取得对象时简单了,但是下面这段代码麻烦在情况判断上,并不能减少多少工作量,而且我好久没写过原生JavaScript,怕再不用就忘光了),比较繁琐,如果你只是想要实现 实时显示头像,则不必看了,只需网上搜一下别人写的即可,但是他们的都是转载一个叫冰古的人的,他的代码调用gravatar头像那里有些问题;如果也想要兼容你的原来的折叠资料输入框,我的代码你可以参考一下。写的很繁琐,因为照顾到两种不同样式,以及不破坏之前的输入框提示文字,还要动态改变头像右边的文字,真的很麻烦。

这段代码包括了email验证,url自动加上http://,动态判断不同情况显示不同问候语等。注意其中的MD5()函数是调用我网上找的一个给字符串MD5加密函数,你需要网上找一下,因为这个网上也很多,我就不贴了。

JavaScript代码:

   1: <script type="text/javascript">

   2: //声明所需变量

   3: var real_avatar = document.getElementById("real-avatar");

   4: /*因为用WP的默认函数get_avatar()获取的avatar头像,所以这里只能这样取得头像,先获取ID,再取得此容器下img数组的第一个,即取得了avatar头像*/

   5: var chang_avatar = real_avatar.getElementsByTagName("img")[0];

   6: var an = document.getElementById("author-name");

   7: var welcome = document.getElementById("commentwelcome");

   8: var welcome1 = document.getElementById("commentwelcome1");

   9: var email = document.getElementById("email");//取得Email输入框

  10: var author = document.getElementById("author");//作者输入框

  11: var httpurl = document.getElementById("url");//网址输入框

  12: //定义触发动作,当失去焦点时触发函数

  13: author.onblur = changAuthor;

  14: email.onblur = changeAvatar;

  15: httpurl.onblur = setHttp;

  16:

  17: function changeAvatar() {//定义改变头像函数

  18:     email_value = email.value.toLowerCase();//取得email值并转为小写(大小写md5值不一样,gravatar是用小写email MD5值验证头像的,如果输入大写,则不会正确匹配头像)

  19:     email_md5 = MD5(email_value);//这里是将email值转为MD5,这里还需要一个转MD5函数,这里就不贴了,网上有。

  20:     reMail = /^(?:[a-zA-Z0-9]+[_\-\+\.]?)*[a-zA-Z0-9]+@(?:([a-zA-Z0-9]+[_\-]?)*[a-zA-Z0-9]+\.)+([a-zA-Z]{2,})+$/; //email验证正则表达式

  21:     test_email_value = reMail.test(email_value);//验证email值,返回值为true或false

  22:     //定义获取gravatar头像的url,这里包括了大小和等级,还有默认图片

  23:     new_ga = "http://www.gravatar.com/avatar.php?gravatar_id=" + email_md5 + "&size=32&d=identicon&r=G&default=http://www.gravatar.com/avatar/ad516503a11cd5ca435acc9bb6523536?s=32";

  24:     if (email_value != "") {//如果email输入框不为空

  25:         email.className = email.className.replace(" searchtip", "");//这里是去除email输入框的seachtip属性

  26:         if (test_email_value) {//email验证通过,输入的是一个正确的email

  27:             chang_avatar.setAttribute('src', new_ga);//将头像地址重设为匹配此email的avatar头像地址

  28:             document.getElementById("submit").disabled=false;//将提交按钮禁用属性去除

  29:             //接下来是判断作者输入框值,显示提示文字

  30:             if (author.value == "Your Name"){//如果输入框为提示文字 Your Name

  31:                 if (welcome) {//如果是老用户,即浏览器中有cookie,有折叠隐藏资料输入框按钮的

  32:                     welcome.innerHTML = "Please input your name"//将提示文字设置为“Please input your name”

  33:                 } else {//第一次访问用户

  34:                     welcome1.innerHTML = "Please input your name"

  35:                 }

  36:             } else {//作者输入框值如果不为“Your Name”,即输入了用户名

  37:                 if (welcome) {//老访客显示 welcome

  38:                     welcome.innerHTML = "Welcome back ";

  39:                     an.innerHTML = author_name;//访客名字处显示作者输入框处值

  40:                 } else {

  41:                     welcome1.innerHTML = "Thank you, ";//新访客显示“thank you”

  42:                     an.innerHTML = author_name;

  43:                 }

  44:             }

  45:         } else {//如果email验证失败

  46:         document.getElementById("submit").disabled=true;//将提交按钮禁用

  47:             if (welcome) {//这里还是区分老访客和新访客

  48:                 if (author.value == "Your Name") {//再次判断作者输入框值

  49:                     welcome.innerHTML = "Please input your name and a right email";//提醒输入名字和一个正确的email

  50:                 } else {//作者输入框有内容且不为Your Name,则只提醒输入正确email

  51:                     welcome.innerHTML = "Please input a right email ";

  52:                 }

  53:             } else {//这里是新访客显示内容

  54:                 if (author.value == "Your Name") {

  55:                     welcome1.innerHTML = "Please input your name and a right email";

  56:                 } else {

  57:                     welcome1.innerHTML = "Please input a right email, ";

  58:                 }

  59:             }

  60:         }

  61:     } else {//如果email输入框为空

  62:         email.className += " searchtip";//添加searchtip属性,方便css定义提示文字颜色

  63:         email.value = "Your Email"//将email值设置为提示文字 Your Email

  64:     }

  65: }

  66:

  67: function changAuthor() {//更改作者名字函数

  68:     author_name = author.value;//定义作者输入框的值

  69:     if (author_name != "") {//如果输入框不为空

  70:         author.className = author.className.replace(" searchtip", "");//同上面那个改变avatar函数,这里去除输入框的searchtip属性

  71:         if (welcome && test_email_value) {//若果验证通过email

  72:             welcome.innerHTML = "Welcome back "

  73:         } else if (welcome1 && test_email_value) {

  74:             welcome1.innerHTML = "Thank you, "

  75:         } else {//如果没通过email验证,输入了错误email或者还没有输入(值为Your Email)

  76:             if (welcome) {

  77:                 if (email.value == "Your Email"){//如果还未输入

  78:                     welcome.innerHTML = "Welcome back ";

  79:                 } else {//输入了错误email

  80:                     welcome.innerHTML = "Please input a right email ";

  81:                 }

  82:             } else {//新访客

  83:                 if (email.value == "Your Email"){

  84:                     welcome1.innerHTML = "Thank you, ";

  85:                 } else {

  86:                     welcome1.innerHTML = "Please input a right email, ";

  87:                 }

  88:             }

  89:         }

  90:         an.innerHTML = author_name;

  91:     } else {//如果作者输入框为空

  92:         if (welcome) {

  93:             welcome.innerHTML = "Please input your name";//则提示输入名字

  94:             author.className += " searchtip";//加上search属性,并将值设为 Your Name

  95:             author.value = "Your Name"

  96:         } else {//新访客则将提示文字初始化为原始值,当然,你也可以换个提示文字

  97:             welcome1.innerHTML = "Hi, I know you have something to tell me. Please leave me a reply";

  98:             author.className += " searchtip";

  99:             author.value = "Your Name"

 100:         }

 101:         an.innerHTML = ""//清除作者名字显示区域

 102:     }

 103: }

 104:

 105: function setHttp() {//设置http://函数

 106:     var tips = httpurl.value.substr(0, 7).toLowerCase();//取得输入值的前七位,并转为小写

 107:     if (tips == "http://") {}//如果匹配“http://”,无动作

 108:     else if (httpurl.value != "") {//如果不匹配 “http://”,输入值也不为空

 109:         httpurl.value = "http://" + httpurl.value//则将输入值前加入"http://"一同返回

 110:     } else {//如果输入框为空

 111:         httpurl.className += " searchtip";//加上提示文字

 112:         httpurl.value = "http://"

 113:     }

 114: }

 115: </script>

其实上面的代码有些是为了兼容以前的js代码,因为要对同一个对象再次操作,所以难免会破坏之前的一些定义。只是要实现头像实时显示,则只需十来行代码即可实现。用jQuery则一行即可:

   1: $('#email').blur(function(){$('#real-avatar .avatar').attr('src','http://www.gravatar.com/avatar.php?gravatar_id=' + MD5($('#email').val())) + '&size=32&d=identicon&r=G&default=http://www.gravatar.com/avatar/ad516503a11cd5ca435acc9bb6523536?s=32';})

这一行jQuery代码就足够了。用jQuery是不是很简单,呵呵。

我写的代码中用到了email验证,但是并不是防止Spam用的,只是善意的提醒email有没书写正确,因为我有时就写错了email格式,结果提交后又给返回,内容还得重新输入。这里给用户一个小提示,可以告诉他email有没写对,配合gravatar实时显示,也可以验证email有没写错,是不是自己的email。第三个函数setHttp()是给输入的地址加上http://,虽然即使没有http://,WP也可正确识别。这里只是提高访客体验。

我上次说过上一篇日志是本年度最后一篇,但是由于过两天有些事情要忙,正好又有人邮件问我有关这方面代码(没想到才几天居然就有人能发现我博客这一点改变。。),我就在这里贴出来吧,希望能帮到一些需要这个功能的朋友。

当然,以上这些有些人可能会觉得很无聊,这个也确实是很无聊的功能,但是我坚信细节处的改变对于访客体验的提高是不容置疑的。

最后提示:很重要的一个给字符串md5加密函数我没有写出,请自行网上搜索,并添加到你的js代码前边。如果函数名不是MD5(),请更改相应处的函数名。


还有一点我也要提一下,最近两周来不知是因为了到年关了还是怎么了,几乎每天都会收到一两封向我索要主题的邮件,尤其是最近几天。有人喜欢这款主题我很高兴,因为这款的配色并不是大众能接受的,因为之前批评过我主题配色的人不在少数。之前我有过准备发布,但是后来我因为要加入后台管理,所以索性又重新写了模板代码,并且加入了好些其他东西,如广告管理,文章动态加载等,即使现在也一直在抽时间改进。所以模板代码很乱,因为时不时就要改动,后台设置也要相应跟上,一直没有整理。所以可以说,这款主题还未完成,有些功能要正常使用还需配合我的修改。但是我会努力使它尽早完成,现在主要就是后台管理功能还未完成。之前邮件索要主题的我都给予了回复,这里再说一下,因为每天收到的邮件很多,怕有漏掉未回复的。所以,请不要再给我发邮件索要主题,如果真的喜欢,请继续关注我的博客。我会尽量快点提供下载的。

——By QiQiBoY

声明: 本站遵循 署名-非商业性使用 3.0 共享协议. 转载请注明转自 I’m qiqiboy !
close

33 Responses to this post.

Comments (32) Trackbacks (1)
You can leave a response or Trackback this entry .
  1. 新主题Green living上线测试.

    [...] 实现方法:万戈:《Wordpress 记录评论者 gravatar 头像》qiqiboy:Email输入框处实时显示gravatar头像+email验证+动态信息提醒 [...]

Leave a Reply

avatar-default
Hi, I know you have something to tell me. Please leave me a reply.

You input 0 characters.