AJAX 评论提交插件 Quick Comments

Dec 9th, 2008 Add Comment

Quick Comments 是一个十分强大的 WordPress 评论插件, 它用到了 jQuery, 使用 AJAX 提交和更新评论, 还可以向评论者的邮箱或 Twitter 发送新评论通知. 选项灵活并且用户体验极佳.

该插件目前支持 classic, default, easyall, k2, sandbox 等多个著名的主题. 如果想要另它支持你的主题, 可能需要修改一下, 如 iNove 可以修改如下:
1. 打开 quick-comments.php, 并找到 149 行. (0.6.2 版)
2. 追加以下代码:

elseif ( preg_match('/^inove/i', $template) ) {
	$this->options_default['form'] = 'form#commentform';
	$this->options_default['list'] = 'ol#thecomments';
	$this->options_default['editReturn'] = '#comment-%ID%';
}

目前用 AJAX 提交评论的插件很多, 但这个插件的操作原理有些不一样. 评论提交后, 并不是在客户端直接生成新的评论, 也不是从服务器端返回格式化的最新评论. 而是在服务器端调用 comments_template() 方法生成整个评论内容, 然后进行提取并返回整个评论列表.

这样处理好坏参半, 却成了一个难以协调的矛盾, 且听我慢慢道来.
好处: 不用对新评论定义格式, 代码齐整, 外观好看, 使用方便.
坏处: 返回的文本信息很多, 当文本足够长的时候, 处理可能被中断掉, 客户端什么响应都没有, 用户体验坏极了. (当你的某篇文章有 500 条评论时, 这样的事情就可能发生了)

返回文本过长的问题其实可以解决, 怎么解决? 使用 WordPress 2.7 的评论分页功能. 也就是说, 每页的评论数是受限的, 所以可以防止返回文本过长问题. 如果你需要这样的效果, 也需要对插件稍微修改一下:
找到 comments_template(); 并修改为以下代码:

if (function_exists('wp_list_comments')) {
	global $wp_query;
	$wp_query = &query_posts($query);
	comments_template('', true);
} else {
	comments_template();
}

但这样修改还是有缺陷的, 也就是前面说的难以协调的矛盾. 如某文章有 5 页评论, 如果你在第 5 页进行评论, 那一切安然, 但如果你到 1~4 页进行评论, 将得不到响应, 你得跑到第 5 页才能见到你的评论. 如果想知道是不是, 不妨在我的博客上找篇文章试试.

该插件选项细化程度很高, 很灵活, 但我觉得作者在选项处理方面做得有点过了, 刚开始使用有点乱, 不过这并不影响它成为一个强大而好用插件. 我刚刚为这个插件做个简体中文语言文件, 明天 review 一下再发给作者吧.

最后, 感谢研发该插件的日本友人をかもとさん, 下载地址如下:
http://wppluginsj.sourceforge.jp/quick-comments/

2008/12/12 补充内容:

1. 这个插件只会处理日志文章的评论提交, 如果你想在页面或者其他支持评论的页面也使用, 那要简单修改一下. 在 quick-comments.php 文件中查找 is_single() && !$this->isKtai(), 一共有三处, 全部改为 (is_single() || is_page() || $withcomments) && !$this->isKtai()

2. 如文中所说, 该插件有个缺陷, 不能跨页显示提交的评论. 如果你的文章为零, 而你在评论列表内为此创建一个提示, 那么第一篇评论也不会被显示出来. 为什么呢? 因为插件在 JavaScript 中要对服务器的应答进行检测, 如果更新条目不改变, 那么就只插入提交的评论了 (但这里它抓不到最新提交的评论). 也就是说, 只要我们不要 check 就可以了.
在 quick-comments-0.6.1.js 中你可以找到 if (jQuery('input#update', form).size() > 0 ) 这样的判断条件, 当更新条目大于零时就更新, 否则进行插入处理. 你只要改一下这个逻辑, 让他在任何时刻都更新就 OK 了. 最后你还得对应着修改 quick-comments-0.6.1.min.js 这个压缩包文件 (其实只要修改这个就可以了). 如果你不懂程序, 或者比较懒, 那么你直接下载我的替换上去也可以. 下载地址 (请下载最新版本的插件)

2008/12/15 补充内容:

中文语言包: quick-comments-zh_CN.zip (新版本中已经集成该语言包)

声明: 本文采用 BY-NC-SA 协议进行授权. 转载请注明转自: AJAX 评论提交插件 Quick Comments

  1. http://0.gravatar.com/avatar/2a79d0301c25049ac6fbf624c9782e83?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    你好 ,请问博客中选中一段文字自动出现 新浪腾讯微博分享的效果是怎么实现的呢 ,谢谢博主啊

  2. http://1.gravatar.com/avatar/7b87b686ba41565eb4017545873e08f6?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    安装了 但好像有问题

  3. http://1.gravatar.com/avatar/d99c9b6299b491ff59c640e37b33a1c2?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G
  4. http://1.gravatar.com/avatar/d6e52a07c0bd12c49319dd809b7d7f2e?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    很久没有用wordpress了,今天翻出来用,发现这个插件有点卡,给自己留言要卡半天才能发现评论

  5. http://1.gravatar.com/avatar/b7381a5efe2dede673207c373eefd364?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    @福尔摩X 你这里的回复是调用了代码啊 我的是重新刷新一下呢 看来你没有这样的问题了
    有空的话看下我的问题如何解决哈

  6. http://1.gravatar.com/avatar/b7381a5efe2dede673207c373eefd364?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    我想试试你这里刚刚发布的留言 不刷新再回复有没有错误的

  7. http://1.gravatar.com/avatar/de4fc17630ca64bf199a63ac13b3761d?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    装了这个插件之后,貌似页面加载时间会延长不少,用个askimet防垃圾评论就差不多了,评论这块到影响不大。PS:链接地址是日语的,汗。。。

  8. http://0.gravatar.com/avatar/878aac7dd946978cf5d556051f7c2dce?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G
    苦涩中的灿烂 | Jun 15th, 2011 at 15:45

    现在用的这个comment有插件没。。

Comment pages
  1. Loading...