这篇文章上次修改于 538 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
博主使用 Typecho 也有个一两年了,在使用 Typecho 的过程中,我学习到了不少的 PHP 技能,我不仅可以做 TC 的模板开发及插件开发,还可以编写属于自己的简易 CMS 程序。
但是呢 Typecho 的官方文档介绍的相当不详细,程序内置了许多很有用的方法却没有编写出来。下面就给大家分享一些我所了解的一些不为人知的函数和变量,可以以此开发更多的扩展功能。这篇文章将长期不间断更新,欢迎关注~
切换 IP 来源获取
如果你的网站使用了 CloudFlare 一类的 CDN 服务使得部分插件无法正常记录用户 IP 地址的话,可以在 config.inc.php
声明这个静态变量,替换成服务商对应的用户 IP 头就可以了!CloudFlare 现在默认提供的是 HTTP_X_FORWARDED_FOR
头传送用户真实 IP 地址,所以我直接填入头的名称就可以了!
define("__TYPECHO_IP_SOURCE__", "HTTP_X_FORWARDED_FOR");
使用自己的静态存储
如果你有自己的 CDN 或静态存储,希望 Typecho 不使用默认的站点地址来分发内容,可以在 config.inc.php
声明这个静态变量,替换成你自己的附件地址即可!REQUEST_SCHEME
是访问站点的协议,所以 HTTP、HTTPS 都可以使用。
define("__TYPECHO_UPLOAD_URL__", $_SERVER["REQUEST_SCHEME"] . "://static.paugram.com");
自定义 Gravatar 源
安装完 Typecho 之后发现头像显示不出来?不如试试改用自己的 Gravatar 镜像源?
// define("__TYPECHO_GRAVATAR_PREFIX__", "https://cdn.v2ex.com/gravatar/");
// define("__TYPECHO_GRAVATAR_PREFIX__", "https://sdn.geekzu.org/avatar/");
// 由于国内某些不可抗拒因素,目前只推荐使用 Cravatar
define("__TYPECHO_GRAVATAR_PREFIX__", "https://cravatar.cn/avatar/");
镜像源顾名思义就是「复制」过的版本,如果你在 Gravatar 上修改了头像,一般不会立即生效,需要一定的等待。
排错功能
插入如下代码后,在编写插件或模板遇到问题时会输出更详细的报错信息(还要确认 PHP 的 display_errors
是否为 On
)
define("__TYPECHO_DEBUG__", true);
模板开发
这两段函数在模板开发中必不可缺,否则会出现一些奇怪的 Bug!
这段是 Typecho 的头部输出内容,如缺少将导致文章评论出现异常。建议放在 header.php
里面。
$this -> header();
这段是 Typecho 的尾部输出内容,如缺少将可能导致部分需要前端支持的插件无法使用。建议放在 footer.php
里面。
$this -> footer();
输出头像
这段函数用于输出当前页面的作者头像,可以用来做作者介绍和版权提示。参数是头像尺寸,建议大于等于 64 像素。
$this -> author -> gravatar(64);
输出当前登录用户的头像地址,可以用于评论区的输出。
echo Typecho_Common::gravatarUrl($this -> user -> mail, 150, 'X', 'mm')
检测是否登录
用于检测用户是否登录,已登录返回 true
否则为 false
,可以用来实现模板内的评论框结构变更,或是限制模板页面的内容不对外显示。
$this -> user -> hasLogin();
页面链接
输出上一页 / 下一页的链接
$this -> pageLink("上一页");
$this -> pageLink("下一页", "next");
文章时间
获得文章创建的时间
$this -> created
获得文章上次修改的时间
$this -> modified
计算文章修改自多少天前
ceil((time() - $this -> modified) / 86400) // 当前时间减去修改时间,换算为天并取整
文章信息
count($this -> tags()) // 返回标签数量
count($this -> category()) // 返回标签数量
评论层数最高为 7
解决后台评论「启用评论回复,以 7 层作为每个评论最多的回复层数」最多为 7 的问题
直接操作数据库 options
下的对应字段 commentsMaxNestingLevels
实现,但我觉得这样会使得评论的 SQL 执行次数大量增加,也许这也是原作者限制层数的原因吧
已有 7 条评论
谢谢,很有用,尤其是用了 CDN 后那个 IP 的问题
虽然没用过 Typecho,但看大佬光是“小技巧”就能写这么多,太厉害了,学习,学习!
模板开发里的算是冷门吗?
@LingC 有些模板没有加这些函数的,感觉官方文档的解释不太清晰
总感觉每次看到你博文的标题都显得非常高大上,但是内容……很少,或者说非常水。希望可以用心一点写吧……最少在我的标准来说这不是一篇合格的博文,很多其他的文章也不是
@惶心 这种文章只能发现了再慢慢补充啊== 难道全部找完才发咯
@Paul 大佬教训的是,以后我改正还不行吗