关于 wordpress ajax 评论的补充和完善

这篇文章早就想写了,一直没时间,拖了好久了,今天不熄灯,把剩下的写完就发了!!后面可能写的有点不太详细,有问题尽可以留言!!

这篇文章是对以前的一篇文章: 使用 jQuery 实现 wordpress 的 Ajax 留言 的一些补充和完善。主要针对 ajax 化后产生的一些问题,结合我后来进行的一些修改,给出基本的解决思路和方法,使这种方法能有更普遍的适用性,也会更加的灵活(效果就是我博客现在的样子)。希望对使用此方法的朋友能有所帮助,没有使用的你也可以看到一些 jQuery 的函数和技巧……

ajax 后产生的一些问题

ajax 有它的好处,但也有它的不足。如果使用了上面提到的方法,据我的经验,应该会出现以下的一些问题:

  1. 部分模版中每篇文章的第一条评论刷新才可以显示
  2. 新发的评论楼层数总是 #1,刷新后正常
  3. 文章留言数统计没有即时更新
  4. 留言用 alt 控制隔层显示不同样式时,ajax 时无效果,同样刷新后正常

基本上就这些问题吧,后两个其实都是小问题,一般大家也注意不到。但如果你追求完美的话,你可以试试去解决,而且往往就是一行代码的事。

解决思路及方法

我解决的方法都是从 JS 和 DOM 的层面去解决的,没有涉及到 PHP 和服务器的层面,当然也可以用 PHP 的方法在提交时重新从数据库中取值并更新,但因为貌似比较麻烦,就没有这么搞,目前也不会,呵呵!

下面一个个来解决:

首先第一个:每篇文章的第一条评论刷新才可以显示,这个问题的原因很容易理解,因为在 JS 中有这样一句:

$('#thecomments').append(data);

就是向 id 为 thecomments 的元素中添加数据,而在有些模版中在文章没有评论时这个 id 为 thecomments 的元素是不存在的,即一般的 ol 元素,自然就不会添加元素,第一条评论就这样消失了,刷新后才正常。

解决方法:我想到的解决方法有两种:

第一种就是在没有评论时也让这个#thecomments 存在,具体的做法就要自己改下模版了。就像我现在的模版样,没有评论时显示一个No comments yet,然后在第一条评论提交时将这块隐藏就 OK 了!!

第二种方法就是用 JS 动态地添加这个 #thecomments ,(刚回去看代码,突然发现原来的代码里已经有了!!)

if (!$('#thecomments').length) {
$('#pinglist').before('<ol id="thecomments"></ol>');}

如果 #thecomments 不存在,则在 #pinglist 前插入

<ol id="thecomments"></ol>

,这里只需要注意那个 #pinglist 就行了!!

然后看第二个问题和第三个问题,这两个问题正好可以联系到一起解决。我的解决思路是看图:

博客加强

图是丑了点啊!不过应该表达清楚意思了吧!就是当新评论提交之后,让页面上的总评论数先加一,然后再将值赋给新添加的评论的楼层数那里。这样显示出来就是正确的了。当然这样做还需要一些准备工作,就是将数字用专门的 span 来选择出来,以方便获取纯数字。见图片代码。第二个地方需要修改 comments-ajax.php 的相应部分。

于是,最终代码如下:

$('#commentnum').text(parseInt(jQuery('#commentnum').html()) + 1);
$('.ajaxcomments').text($('#commentnum').text()).removeAttr("class");

把上面的代码添加到 success 后面就 OK 了。最后的一个 removeArrt 是为了防止重复发表评论时两个 .ajaxcomments 都加一的情况出现。

最后一个问题我是用了 jQuery 的选择器 odd 实现的。

$('#thecomments li:odd').removeClass("alt");

匹配所有奇数行,如果有 alt 属性刚删除。当然还可以写的更严密些!!我是偷懒了!!呵呵!

加强

1、最后如果你的博客中引入了平滑移动的代码,你还可以加一句:

$('#thecomments li:last').ScrollTo(1000);

自动滑动到最后一个 LI ,也就是最新发表的一个评论!!

2、你也可以去试试 jQuery blockUI plugin 这个插件,实现提交时的 loading 效果!!

到此,这个 wordpress 的 ajax 评论算是比较完善了。只可能还不支持 wordpress 2.7 的嵌套评论。这个估计很难……

Share with Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网

相关文章本月热门点击排行

  • N/A
Post a comment 2009/04/04 – 01:239,984 Views
Post a comment | Trackback URL | RSS Comments 108 Comments
  1. 2009/10/20 at 05:25 | #101
    SinbugNotify

    学习了

  2. 2009/11/02 at 10:27 | #102
    kankanNotify

    see see

  3. 2009/11/08 at 22:22 | #103

    试一下

  4. 2009/11/28 at 02:35 | #104
    sgoboxNotify

    试一下

  5. 2009/12/03 at 14:45 | #105

    AJAX显示楼层的问题作者你解说的那张图片显示不了,能不能更新下,刚好碰到这问题~~~但解说图片显示不了,不知道怎么解决~~~

  6. 2009/12/24 at 08:45 | #106
    mattNotify

    感觉一下效果

  7. 2010/02/24 at 00:02 | #107

    小站不错啊

  8. 2010/02/26 at 12:45 | #108

    学习了,谢谢

Comment pages 1 2 3
3 Trackbacks
  1. [...] 很多人喜欢在WordPress中的评论系统中调用Ajax,因为这样会很方便。简单一个例子就是当你在页面内想边听音乐边留言时候(♫TINAting?),没有Ajax的评论就不好办了。如果你也是使用Ajax评论,你是否也会忽略了一些细节?这里推荐大家看Xiaorsz’s Blog最近的这篇文章:【关于 wordpress ajax 评论的补充和完善】。 [...]

  2. [...] 原文转自:http://www.xiaorsz.com/improve-the-wordpress-ajax-comments/ 2009年4月19日14:17 标签: ajax, comments, Wordpress 订阅评论 发表评论 | Trackback « 100多个Twitter按钮和图标下载. 目前还没有任何评论. [...]

  3. [...] Xiaorsz's Blog童鞋的教程写的很完善=》关于 wordpress ajax 评论的补充和完善这次在做的时候就参考这个。可以去看一下 [...]

Post a Comment

(必填)

(必填,有回复时方便邮件通知)

(可不填,填了方便回访)

Sharing technology, recording life