Loading...

基于ajax的comments终于完成

2007-01-27 10:08:05 发表于PHP, Wordpress, 网站技术 本文链接: 基于ajax的comments终于完成

由于本站采用了缓存,所以访客的留言都无法及时更新,感觉这样很不太友好,那么解决的办法有两个:1.去掉 缓存。2.采用 ajax异步刷新留言。为了保证缓存的优势,我采用了第二种 方案。

好了,决定了方案,便开始在网上搜索ajax评论插件,搜索到了几个,可能是由于我个人的原因吧 ,总是安装失败。不得以,只好自己动手了。

基于ajax评论实现的难点有3个:

  1. 如何在不改变wp的代码的情况下编写代码,这一点wp做得很好,评论的php文件(wp-comments-post.php)中有redirect url这个东西,我可以用它来回传评论处理的状态
  2. ajax post和get的实现。这个我通过外加js代码来完成。
  3. 如何在读取已知post的评论。这个问题是困扰了我最久的问题。我查询了wp的 API,wp的 tags,都没有完美的办法,后来我想到了一个巧妙的方法,那就是在single.php的模板中根据URI做判断。如果URI中有action=show_comments那么我就直接把comments.php文件 include进来,同时在comments.php文件中也做判断。代码如下:

    < ?php if( 'show_comments' == $_GET['action']) ://如果是仅仅显示评论?>
    < ?php if (have_posts()) :?>
    < ?php comments_template(); ?>
    < ?php endif;?>
    < ?php elseif( 'refresh_comments' == $_GET['action'])://如果是提交之后的显示?>
    < ?php // 这里不显示内容,如果显示则在javascript中判断有错误出现,即留言失败?>
    < ?php else://否则则正常显示?>

    < ?php include (TEMPLATEPATH . "/ThemeCache/cache_start.php");?>
    < ?php include (TEMPLATEPATH . "/config.php");?>
    < ?php get_header(); ?>
    //这里照常显示
    < ?php endif;?>


    那么对于 comments处理的方法最重要的就是这里

    < ?php if( strstr ( $_SERVER['REQUEST_URI'], '?') ){ /* if this is no ? in the URI */ $URL = $_SERVER['REQUEST_URI']."&action=show_comments"; $REDIRECT = $_SERVER['REQUEST_URI']."&action=refresh_comments"; }else{ $URL = $_SERVER['REQUEST_URI']."?action=show_comments"; $REDIRECT = $_SERVER['REQUEST_URI']."?action=refresh_comments"; //通过redirect url将留言处理成功后的页面返回到 action=refresh_comments, //这样我就可以在single页面将处理的结果返回到ajax }>

具体的效果,请参考本站的评论!如果你对此很感兴趣。可以下载。下载链接在这里cosbeta_ajax_comments.zip
补充:修改了一个bug,由于评论时填写用户 email的form也被cache了,所以第一个人打开页面评论后,cache就记录了他的信息,后面的人留言就可以用第一次的留言信息进行留言,如本页的第三楼第四楼,现在通过js调用此form,已经解决问题,如果有朋友需要,请留言!

该日志未加标签
发表于 2007-01-27 10:08:05 目录:PHP, Wordpress, 网站技术 [RSS 2.0] 您可以评论. Pinging 不可用.
  • 相关阅读
  • homezz 美国专业主机商
    已经有24位大师动手指导 拒绝低俗
    评论分页: 1
    (Required)
    (Required, not published)
    如果留言未显示无需重复留言,我将为你恢复!