“写博客已经够难了,如果还要和丑陋的主题搏斗,那简直是双重暴击。”
—— 某位被前任主题伤透心的博主(也就是我)
简介
我在 关于 页面曾提到过 Inaline 主题,也就是现在博客使用的主题。整体使用了类似 Card 的风格,设计上还参考了 Joe 主题。Joe 确实是一款不错的主题,但是原作者放弃了更新,而且也不支持最新的 Typecho 版本了。你就必须在安全性与主题之间做选择。
而 Inaline 主题。在于它不仅美观、安全,而且支持了最新的 Typecho 版本,并在持续不断的保持更新。
接下来放几张截图,来欣赏一下 Inaline 主题的设计。


Inaline 主题支持了桌面端和移动端的 UI,且并不是仅仅停留在「能用」的层面,而是针对移动端,对操作逻辑和控件大小都做了优化。使用了侧边栏和各种展开栏来在不减少功能的情况下支持移动端,字体也缩放的恰到好处。
为啥选择 Inaline 主题
- 性能
- 全站 服务端渲染 + 静态缓存,没有花里胡哨的 React Hydrate。还
预计支持 RESTful API - JS 和 CSS 加起来不超过 100KB, 不依赖 jQuery,加载速度是👍这个
- 功能
Inaline 主题在不破坏 Typecho 的原生后台的情况下,针对后台做了许多优化。
- 编辑器新增了 网易云音乐歌单插入、单曲插入、B站视频插入、网盘链接插入、数学公式插入、卡片插入 等功能和可视化的语法。
- 编辑器添了行号,支持自动折行,让你不用移动光标来判断「这™的到底在不在一行啊」
- 颜值
Inaline 主题非常现代化,支持了暗色模式,并能根据用户的浏览器设置自动切换。还可以在后台设置。别的不说,是比那些添改还得修改源码的主题强。
- SEO 友好
- 自动生成 JSON-LD 结构化数据,Google 搜索直接出“富卡片”。
- 外链 Sitemap 可以直接提交搜索引擎的站长工具。
如何安装?
说这么多其实大部分人也不想听我吹,接下来就是重点了,快从裤兜掏出小本本记上(。>∀<。)
环境要求
- PHP ≥ 7.4(Typecho 1.2+)
- MySQL ≥ 5.7
- 伪静态(URL Rewrite) Nginx/Apache 均可
一键安装
通过 Git 安装(推荐)
依次执行如下两条命令
$ cd path/to/typecho/usr/themes
$ git clone https://gitee.com/inaline/typecho-theme.git inaline通过文件安装
本方法可能安装的不是最新版本,因为我可能会忘记更换链接。
- 从 Gitee 或 Github(下文会有链接) 下载 release 或从本站下载 .zip
- 解压后得到一个 inaline 文件夹
- 将它复制到 cd path/to/typecho/usr/themes
启用主题
后台 → 控制台 → 外观 → 启用 → 搞定!
启用主题后,必须点击主题设置保存一次,不然默认设置不会生效
项目传送门
喜欢的话,点个 Star, 蟹蟹(。>∀<。)
评论 (5)
你这么说(如果指网站)我就上 cloudflare了 (▼ヘ▼#)
Warning: http_response_code(): Calling http_response_code() after header('HTTP/...') has no effect in /www/wwwroot/xzccs.top/usr/themes/typecho-theme-master/core/Modules/Inaline/ErrorHandler.php on line 65
Error
处理您的请求时发生错误: json_decode(): Passing null to parameter #1 ($json) of type string is deprecated
错误类型:
Error
错误信息:
json_decode(): Passing null to parameter #1 ($json) of type string is deprecated
文件:
/www/wwwroot/xzccs.top/usr/themes/typecho-theme-master/core/Widgets/Category.php
行号:
344
相关代码:
338 * 解析分类描述 JSON
339 * @param string $description 分类描述
340 * @return array
341 */
342 private static function parseDescription($description)
343 {
344 $parsed = json_decode($description, true);
345
346 if (json_last_error() === JSON_ERROR_NONE && is_array($parsed)) {
347 return $parsed;
348 }
349
350 return ['icon' => '', 'details' => $description];
调用栈:
#0 [internal]:0 → onError()
#1 /www/wwwroot/xzccs.top/usr/themes/typecho-theme-master/core/Widgets/Category.php:344 → json_decode()
#2 /www/wwwroot/xzccs.top/usr/themes/typecho-theme-master/core/Widgets/Category.php:370 → parseDescription()
#3 /www/wwwroot/xzccs.top/usr/themes/typecho-theme-master/core/Widgets/Category.php:426 → icon()
#4 /www/wwwroot/xzccs.top/usr/themes/typecho-theme-master/core/Widgets/Category.php:404 → buildNavItem()
#5 /www/wwwroot/xzccs.top/usr/themes/typecho-theme-master/core/Widgets/ComponentData.php:45 → buildNavJson()
#6 /www/wwwroot/xzccs.top/usr/themes/typecho-theme-master/index.php:15 → GetTopBar()
#7 /www/wwwroot/xzccs.top/var/Widget/Archive.php:1390 → require_once()
#8 /www/wwwroot/xzccs.top/var/Typecho/Router.php:88 → render()
#9 /www/wwwroot/xzccs.top/index.php:23 → dispatch()