基于ajax的comments终于完成

时间:2007-01-27 10:08:05      类别:PHP, Web技术|WEB Tech, Wordpress      本文链接:生活点滴Enjoy Life

由于本站采用了缓存,所以访客的留言都无法及时更新,感觉这样很不太友好,那么解决的办法有两个: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, Web技术|WEB Tech, Wordpress [RSS 2.0] 您可以评论. Pinging 不可用.
如果您喜欢本blog,欢迎你的feed订阅,谢谢你的支持

前24排已经被占据了 快抢好位置哦

  • 1楼 江 东 在 2007.01.27 10:23发表评论如下:

    不知是wp的bug还是我ajax程序的bug,留言删除后,居然 显示的“x条评论 ”不对?

  • 2楼 江 东 在 2007.01.27 10:37发表评论如下:

    还是cache惹的祸,已经修正了,爽,逛街去了

  • 3楼 icemanpro 在 2007.01.27 15:52发表评论如下:

    还是cache惹的祸,已经修正了

  • 4楼 icemanpro 在 2007.01.27 15:53发表评论如下:

    [quote]
    还是cache惹的祸,已经修正了
    [/quote]

  • 5楼 skycper 在 2007.01.30 10:52发表评论如下:

    试试看,呵呵

  • 6楼 三年一班 在 2007.01.31 23:38发表评论如下:

    帮你测试

  • 7楼 江 东 在 2007.02.01 08:22发表评论如下:

    别测了,已经没有问题了哈,呵呵
    [quote]帮你测试[/quote]

  • 8楼 烟花 在 2007.02.02 12:03发表评论如下:

    测试一下,看看效果。

  • 9楼 罪孽深重 在 2007.02.05 08:49发表评论如下:

    还是cache惹的祸,已经修正了,爽,逛街去了

  • 10楼 江 东 在 2007.02.05 08:50发表评论如下:

    [quote]
    还是cache惹的祸,已经修正了,爽,逛街去了
    [/quote]???

  • 11楼 icemanpro 在 2007.02.05 11:07发表评论如下:

    3,4楼,并不是我留言

  • 12楼 江 东 在 2007.02.05 11:21发表评论如下:

    我已经知道了哈,那个是cache的原因,因为你留言后就产生cache了,所以别人访问的时候还是记录下了你的信息,显示就是你的留言,我现在已经改进了,留言的姓名输入框通过js动态调用,就没有上面描述的问题了,呵呵[quote]
    3,4楼,并不是我留言
    [/quote]

  • 13楼 shadow 在 2007.02.11 13:54发表评论如下:

    不错,和K2会不会有冲突?

  • 14楼 江 东 在 2007.02.11 14:13发表评论如下:

    没有研究过K2,不过要做进去应该也不是很困难的事情!

  • 15楼 newx 在 2007.02.20 13:03发表评论如下:

    不错的东东

  • 16楼 children 在 2007.04.13 23:13发表评论如下:

    好东西

  • 17楼 临府咖啡 在 2007.04.27 17:31发表评论如下:

    什么效果呢…

  • 18楼 myrte 在 2007.05.15 22:06发表评论如下:

    好像Cookie有点问题

  • 19楼 cosβ 在 2007.05.15 22:10发表评论如下:

    我这里正常

  • 20楼 stan 在 2007.08.18 22:12发表评论如下:

    试试看

  • 21楼 test 在 2008.02.13 20:22发表评论如下:

    set

  • 22楼 2699 在 2008.05.19 23:42发表评论如下:

    不知道效果怎么样,试试!

  • 23楼 阿凡提贸易网 在 2008.07.09 16:06发表评论如下:

    谢谢楼主,谢谢你的无私分享

  • 24楼 yofox 在 2008.09.12 22:25发表评论如下:

    不错的东西

  • 转到第
(Required)
(Required, not published)
如果留言未显示请不要重复留言,我将为你恢复!


生活点滴Enjoy Life is proudly powered by WordPress | admin| About Us | cosbeta| Bluehost| site map 0.360s & 27