幻蓝小站

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 11|回复: 0

Typecho不修改源码不关闭反垃圾保护兼容pjax

[复制链接]

5317

主题

5318

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
15994
幻蓝 发表于 2022-11-21 13:41:56
众所周知,typecho使用pjax模板会导致评论失败。

解决方法一是修改程序源码来兼容,二是在评论设置处关闭反垃圾保护来避免冲突。

方法一呢,明显不适合小白用户,而且程序更新后可能会出现问题,或者需要再次修改。
方法二,虽然简单直接了很多,但是呢作为一个写主题的博主,总会被小白重复问道为啥评论不好使【明明主题安装说明里都强调说明了要关闭反垃圾保护,可是小白就是看不到!所以对于主题作者来说这样也不太好】

其实认真观察yodu模板更新记录的人应该发现了,自从yodu3.3.0版开始,我就不在提示关闭反垃圾保护来兼容模板了,因为想到了个有趣的方法

在functions.php添加
  1. function themeInit($archive)

  2. {

  3. Helper::options()->commentsAntiSpam = false;

  4. }
复制代码

这个方法其实与方法二一样,就是关闭反垃圾保护,只不过不用手动去关闭而是模板强制关闭反垃圾保护,并且评论设置处看起来还是开启反垃圾保护的样子,忽悠小白妥妥的!

其实themeInit还有些厉害的地方,例如:
  1. function themeInit($archive)

  2. {

  3. Helper::options()->commentsMaxNestingLevels = 999;//评论回复楼侧最高999层.这个正常设置最高只有7层

  4. Helper::options()->commentsAntiSpam = false;//评论关闭反垃圾保护

  5. if ($archive->is('author')) {

  6.        $archive->parameter->pageSize = 50; // 作者页面每50篇文章分页一次

  7. }

  8. if ($archive->is('category','av')) {

  9. $archive->parameter->pageSize = 9; // 分类缩略名为av的分类列表每9篇文章分页一次

  10. }

  11. $archive->content = a_class_replace($archive->content);//文章内容,让a_class_replace函数处理

  12. }

  13. function a_class_replace($content)

  14. {

  15.   $content = preg_replace('#<a(.*?) href="([^"]*/)?(([^"/]*)\.[^"]*)"(.*?)>#',

  16.         '<a$1 href="$2$3"$5 target="_blank">', $content);//给文章每个超链接点击后新窗口打开,原理就是用正则替换文章内容

  17. }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|幻蓝小站 ( 黔ICP备18008076号-1 )|网站地图

GMT+8, 2022-11-30 09:16

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表