修复TpCache一个无法触发缓存刷新的bug

in Tutorials with 9 comments

我现在在用的是TpCache的0.7版本

长期使用一直遇到一个问题,就是登录状态下,去发表评论或者回复评论,没有触发缓存刷新

我居然傻傻地手动刷新缓存已经一年了···

这 ··· 好像有问题 ···

现在回去看看代码简单修改就可以修复这个bug了

bug的描述

解决bug

去Github下载0.7版本的TpCache

解压然后用编辑器打开Plugin.php

public static function activate(){}里,在return前,添加下面的代码

Typecho_Plugin::factory('Widget_Feedback')->finishComment = array('TpCache_Plugin', 'login_comment_update');

添加后是这样的

public static function activate()
{

    省略...

    //评论
    Typecho_Plugin::factory('Widget_Feedback')->finishComment = array('TpCache_Plugin', 'comment_update');
    Typecho_Plugin::factory('Widget_Feedback')->finishComment = array('TpCache_Plugin', 'login_comment_update');

    return '插件安装成功,请设置需要缓存的页面';
}

接着,找到comment_update所在的代码块位置,在其后面添加下面代码块

/**
 * 用户登录评论更新
 *
 * @access public
 * @param array $comment 评论结构
 * @param Typecho_Widget $post 被评论的文章
 * @param array $result 返回的结果上下文
 * @param string $api api地址
 * @return void
 */
public static function login_comment_update($comment)
{
    if (self::check_login()) return true;
    $req = new Typecho_Request();
    self::delete(str_replace($req->getRequestRoot(), '', $req->getReferer()));
}

保存,然后上传到服务器代替原来的文件

测试

这里的测试就是把上面的bug描述再走一次,测试结果是评论可以正常显示出来。

至此,TpCache的bug修复完成。

等等,这应该算是给TpCache添加一个新的触发缓存刷新的功能吧···

更新

等等 这 ··· 好像有问题 ···

最后最后最后,这个教程不严谨,有很多问题···

大家别用这个教程···还是有问题···

我现在用的解决方法,如下

找到

self::delete(str_replace($req->getRequestRoot(), '', $req->getReferer()));

替换为

if ($req){self::$cache->flush();}
Responses
  1. https://github.com/phpgao/TpCache
    麻烦帮我测测

    Reply
    1. @老高

      self::delete($article_url, 1);
      这句的1好像失效了~

      Reply
    2. @老高

      评论完,确实没问题了。
      其实像我这种主题,每个页面都有 RECENT COMMENTS 的这个东西,有没有一个设置选项启用后实现评论后对footer还是sidebar局部刷新~

      Reply
  2. 老高现身说法,周末把这个bug解决了

    Reply
    1. @老高

      谢谢老高关注~😚

      Reply
  3. 5555

    有交流群吗

    Reply
    1. @5555

      暂时没有,以后可能会有,欢迎持续关注 :)

      Reply
  4. 韩小七

    另一款缓存插件也不错
    https://github.com/weicno/typecho-cache

    Reply
    1. @韩小七

      这个试过,不好用。

      Reply