Typecho判断是否加密文章,解决加密文章与Pjax冲突
由于没有使用过加密文章,所有之前从未注意过这方面,幸亏前几天一位朋友帮我测试主题,他有几篇加密文章,才发现一些关于加密文章的问题,但是想要解决这些问题,首先就是要判断文章是否是加密文章,查看了文档,也搜索了一圈,并没有发现有这方面答案,只好自己找了。
发现问题
先说说加密文章都有哪些问题吧,折腾了几天发现了几处,最主要是跟Pjax冲突,如果不用Pjax,问题不太大:
- 加密文章无法Pjax进入,由于返回403状态码,所以无法使用Pjax进入文章链接
- 加密文章与普通文章没有特殊标识来区分,比如给加密文章一个name或者id或者class
- 加密文章的密码cookie有问题,所有加密文章统一使用一个cookie😰
官方并没有给加密文章提供一个判断函数(目前我还没有找到)(已发现😉)
如何判断
后续更新:
最近翻了很多后台文件,发现Typecho是有直接判断加密文章的方法的
如下:(是不是清爽许多)
if ($this->hidden) {
//是加密文章并且未解锁
} else {
//不是加密文章或者已解锁
}
下面是老的判断方法:
代码摘自后台然后修改了一下,完整代码如下(这个是最初的方法,等于是上面新方法的详细说明,建议使用上面的新方法😏)
if (isset($this->password) && $this->password !== Typecho_Cookie::get('protectPassword') && $this->authorId !== $this->user->uid && !$this->user->pass('editor', true)) {
//是加密文章并且未解锁
} else {
//不是加密文章或者已解锁
}
//解释一下这几个因素:文章设置了密码 且 输入的密码不正确 且 用户不是作者 且 用户无编辑及以上权限
如果单纯的只判断是否加密文章,只用第一个因素isset($this->password)
就行。
解决问题
有了最主要的判断,就可以解决问题了,说一下目前我的解决办法吧,不是最完美的,但是算是够用了
- 无法Pjax进入,我是把密码输入这一步提前到打开链接前进行,拦截链接的跳转,强制用户先输入密码,密码是否正确用Ajax获取,正确则Pjax跳转页面。
- 加密文章标识,这个容易了,判断是否加密文章后,标识自己手动随便添加。
- 这个是Typecho程序机制问题,在我这暂时无解(本人技术有限🤣),这个确实很不严谨,希望官方能够解决。
- 如何判断,上面已经说过
打完收功。
其实这些问题只要是带Pjax功能的主题,都会存在,我试了几个Typecho比较有名的主题,也确实都存在,我这个办法个人感觉有点笨,希望大家能够找到更好的解决办法😊
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
有代码示例吗 看不大懂
感谢分享
突然发现我写的Titleshow插件能解决这个问题,不会返回403,哈哈哈https://qqdie.com/archives/typecho-articlepassword-titleshow.html
感谢分享