Typecho的Pjax适配

Typecho并不适合直接安装pjax。我安上这玩意后,一开始没发现什么异常,不过越用到后来越……

0x01 评论区问题

当你利用pjax进入带有评论区的页面时,点击“回复”,页面会滚到评论区顶端的textarea上,而不是在对应的评论下新开textarea元素;而单独进入就可以正常使用。

打开F12查看错误信息,发现用pjax进入的页面点击“回复”会报错找不到TypechoComment类。经过继续研究,我发现pjax进入的页面head元素里少了js代码。

这段js代码是包含在$this->header()输出里面的,启用pjax后,我们可以在评论区的顶端(一般是主题的comments.php)加上这段代码:

<?php $this->header('commentReply=1&description=0&keywords=0&generator=0&template=0&pingback=0&xmlrpc=0&wlw=0&rss2=0&rss1=0&antiSpam=0&atom'); ?>

这样就能加上丢失的js,正常使用评论区。

0x02 特殊博客状态码问题

pjax库刷新时会检查状态码,如果不是2xx便会终止覆盖。而header函数在typecho主题里不起作用😫

在headers.php或index.php的<?php if (!defined('__TYPECHO_ROOT_DIR__')) exit; ?>后加上这段代码就行

<?php
if($_SERVER["HTTP_X_PJAX"]==="true"){//如果是pjax请求
    \Typecho\Response::getInstance()->setStatus(200);
}
?>

标签: 博客, 教程, 踩坑

许可协议

本文作者 , 采用 CC-BY-SA-4.0 许可协议,转载请注明出处。

已有 6 条评论

添加新评论

  1. 啊啊啊 我也想给博客用pjax

  2. 新年快乐🎆

  3. 大佬.这篇文章是对于你这个主题的.修复吗🤔.我是用你的主题评论发送了总是没有

    1. 是的)

      还没来得及提交github

      放上去了,更新下就行)

  4. SCPLOVER SCPLOVER

    来看看