我现在在用的是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();}
本文由 Chakhsu Lau 创作,采用 知识共享署名4.0 国际许可协议进行许可。
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。
谢谢,如此操作,完全正常了。
https://github.com/phpgao/TpCache
麻烦帮我测测
self::delete($article_url, 1);
这句的1好像失效了~
评论完,确实没问题了。
其实像我这种主题,每个页面都有 RECENT COMMENTS 的这个东西,有没有一个设置选项启用后实现评论后对footer还是sidebar局部刷新~
老高现身说法,周末把这个bug解决了
谢谢老高关注~😚
有交流群吗
暂时没有,以后可能会有,欢迎持续关注 :)
另一款缓存插件也不错
https://github.com/weicno/typecho-cache
这个试过,不好用。