侠客行 · xiakexing|一款把「江湖」写进代码的 Typecho 主题
墨黑为骨,宣纸为肤,朱砂为血,松烟为气。
不依赖任何插件,不请求任何外部资源 —— 整卷江湖,都装在一个文件夹里。
如果你刚接触 Typecho,或者只是想给自己的博客换一张「有味道」的脸,这篇介绍为你而写。它不讲晦涩的代码,只讲三件事:它长什么样、它能做什么、你怎么把它装上去。
一 · 先说结论:它是什么
侠客行(xiakexing) 是一款武侠风的 Typecho 主题,当前版本 v1.5.1。
它最特别的地方,是不靠外链活:
| 别的主题常见的做法 | 侠客行的做法 |
|---|---|
| 从 CDN 加载楷体/宋体 | 只用系统自带的楷体、宋体,一个字节都不外链 |
| 用图床放竹影、云纹、印章 | 全部是内联 SVG,随页面一起送达 |
| 用 Gravatar 拉头像 | 自绘二十款侠客面具,按名号推演,零请求 |
| 装一堆插件补功能 | 一个插件都不用,功能全在主题自己身上 |
按官方 README 的说法:「只有把『批注头像』切到 Gravatar 时,才会请求一次 gravatar.com」。换句话说,只要你保持默认设置,这个站可以断网打开、离线存活。
对新手最实际的好处是:不会因为图床挂了、CDN 被墙、字体服务收费而变丑。
二 · 武侠的寓意:为什么它叫「侠客行」
一个好主题的名字不是随便起的。侠客行把整站拆成了四样东西,每样都对应武侠里的一件物事:
| 意象 | 在主题里的位置 | 寓意 |
|---|---|---|
| 墨黑为骨 | 正文与结构色 #141618 | 骨架要硬,字要立得住 |
| 宣纸为肤 | 背景与卡片 #f4efe2 | 承载文字的纸面,要能透气 |
| 朱砂为血 | 强调色 #a8322b | 批注、印章、重点 —— 一点红,见生气 |
| 松烟为气 | 辅助色 #5c6b63 | 松烟墨的清冷,压住艳色,不喧宾夺主 |
再往细里看:
- 首页是卷轴:整页纵向滚动,文章是一枚枚竹简,竹简上有竹筋竖纹、编绳装订痕、汉字编号(壹、贰、叁)。
- 导航是匾额:分类不叫分类,叫门派;导航条上的每一项都是一方匾额(刀剑录/药典/诗酒行/夜行记)。
- 评论是朱批:评论区叫「侠客批注」,朱砂色边框,像在纸上用朱笔圈点。
- 头像即面具:每位留言者都戴一张面具 —— 这是他在江湖中的身份。
- 侧栏是舆图:侧栏叫「江湖地图」,山水舆图上钉着四盏驿站灯:驿站·归档、茶馆·批注、名录·友链、藏经·题签。
- 404 是残阳:找不到页面时,一雁南去、残阳如血,配一句「江湖路远,此地无碑」。
- 文末有短句:每篇文章结尾自动缀一句门派短句(可按门派配置,也可用自定义字段单独覆盖)。
一壶浊酒,半卷残书。愿这卷轴,装得下你的江湖。
三 · 外观设计:从卷首到页脚
3.1 配色与纸面
- 四种主色全部可在后台修改(题字、朱砂、墨黑、宣纸、松烟),改完实时注入 CSS 变量,全站跟着变。
- 纸面不是纯色:宣纸肌理(SVG 噪声)+ 淡墨晕染(径向渐变)+ 云纹隐现(SVG 平铺)三层叠成,全部是内联 data URI,不下载任何图片。
3.2 字体
- 主标题走楷体栈(
Kaiti SC / STKaiti / KaiTi / 楷体),正文走宋体栈(Songti SC / STSong / SimSun / 宋体)。 - 全部取系统字体,不加载远程字体 —— 这是「零请求」的一半功劳,也是首屏快的原因。
3.3 纹样
竹影、孤雁、残阳、刀剑轮廓、云纹、印章,都是内联 SVG,而且只做边缘点缀,绝不压住正文。后台可以逐项开关(五个装饰元素单独控制)。
3.4 逐屏速览
| 位置 | 设计做法 |
|---|---|
| 首页 | 卷轴式纵向滚动;文章为竹简卡片(竹筋竖纹 + 编绳痕 + 竹简编号) |
| 卷首 | 一屏题词(一行一句)+ 时辰 · 节气 · 卷数 |
| 文章页 | 两侧留白如古籍页边,版心用细线标出,页边配刀剑轮廓 |
| 评论区 | 「侠客批注」:朱批样式 + 面具头像 + 身份标签(剑客/琴师/隐士/阁主……) |
| 侧栏 | 「江湖地图」山水舆图 + 四盏驿站灯,窄屏自动收起 |
| 导航 | 门派匾额样式,移动端可开合 |
| 404 | 孤雁残阳,「江湖路远,此地无碑」 |
| 页脚 | 江湖时辰(如「未时·日昳」)+ 二十四节气 + 日期 + 题签一句 |
| 开屏 | 首次进站时,卷轴自中缝向上下展开 |
| 移动端 | 自动切为单行卷轴:侧栏整块隐去,竹简单列到底,卷轴木轴变细 |
3.5 三张独立页面模板
新建独立页面时,右侧「自定义模板」里可以挑:
| 模板 | 用途 |
|---|---|
| 江湖名录 | 把后台的友链排成一墙名刺帖:竖版帖身 + 顶中朱砂顶针 + 右肩 30px 首字方印(歪 4°)+ 汉字编次;帖与帖交替微倾,如手工贴满一墙 |
| 关于 · 名片册 | 名号名片 + 数说江湖 + 新近落笔 + 门户题签 |
| 武林谱 | 全站文章按年份编年,附门派户口与题签云 |
另外,只要独立页面的缩略名分别是 about、links,不选模板也会自动套用对应卡片页。
名录页的排布是手机两列起、宽屏自动增列:每张名刺帖顶上钉着一枚朱砂顶针,右肩是 30px 的首字方印(微微歪 4°),帖与帖交替微倾,像有人把帖子一张张贴满了整面墙。鼠标移上去(或键盘 Tab 到)时,帖子会扶正、上浮、印章归正、钉影加深,露出一副「请进」的姿态。新加的朋友(名录行末写 新)会在名号旁多盖一枚朱砂「新」标,榜额上也会多吐一句「新朋 N 位」。
四 · 侠客面具:本版的重头戏(v1.5.0 扩至二十款)
面具是这版的重头戏:从 6 款起步,1.4.0 扩到 12 款,1.5.0 再扩到 20 款。每张都由「眉形 + 额饰 + 颏饰」三层叠成,20 款组合互不重复 —— 你从纶巾、镖带、道髻、酒匏、折扇、莲冠、角弓、棋枰里,一眼就能认出对方的身份。
4.1 二十款面具一览
| 编号 | 面具 | 造型要点 |
|---|---|---|
| 0 | 侠客 | 圆孔额饰 · 眉眼平正 |
| 1 | 刀客 | 一字额带 · 刀目 |
| 2 | 剑客 | 三角额饰 · 剑眉 |
| 3 | 琴师 | 云纹额饰 · 弦眉 |
| 4 | 药师 | 人字额饰 · 垂目 |
| 5 | 隐士 | 双珠额饰 · 疏淡 |
| 6 | 书生 | 纶巾 |
| 7 | 镖师 | 镖局额带 |
| 8 | 道人 | 道髻 |
| 9 | 酒客 | 酒匏 |
| 10 | 剑仙 | 剑纹 |
| 11 | 女侠 | 花钿 |
| 12 | 捕快 | 腰间铁牌 · 平眉带挑 |
| 13 | 游医 | 悬壶药匏 · 柳叶细眉 |
| 14 | 说书人 | 折扇 · 长眉上扬 |
| 15 | 女冠 | 莲花冠 · 淡远弯眉 |
| 16 | 刀疤客 | 额上刀痕 · 眉锋一高一低 |
| 17 | 猎户 | 角弓 · 粗眉倒竖 |
| 18 | 棋士 | 棋枰 · 平眉如枰线 |
| 19 | 更夫 | 巡夜梆灯 · 八字愁眉 |
12–19 号为 1.5.0 新增;0–5 号是 1.3.0 的老面孔,6–11 号是 1.4.0 的旧账,路径与次序一字未动。
每一款都由「眉形 + 额饰 + 颏饰」三层叠成,12 款组合互不重复。
4.2 访客怎么用
在评论框(「落笔」)里,有一栏叫 「择一面具」:点一下那条触发条,面具谱便自屏幕底部升起 —— 二十款分四行排开(窄屏五列,宽屏六列/八列),点哪张,触发条上的预览与名号就换成哪张,随即自动收起。另有一条底注:
批注里露的那张脸,随这条批注一同入档
这句话是认真的:你选了哪张,这条批注就永远戴着哪张,翻回来看到的还是它。
4.3 没选面具的人呢
没选的人,系统按名号推演 —— 同一个名字,永远得到同一张脸。
升级不会打乱老批注的脸。 推演的基数被固定为旧版的 6 款(xiake_mask_legacy_count()),所以从 v1.3.0 升上来的站,所有老评论的面貌一字未变;新面具只在你主动挑选时出现。若存档里的编号越了界(比如手改过数据库),也会自动退回名号推演,不会白脸。4.4 弹出选择:为什么不是铺一张大网格
- 不改数据库结构。 Typecho 的评论表没有自定义字段,主题借用了
agent这一列 —— 它是唯一「会入库、但前台后台都不显示」的自由文本列。所选编号以xkxmaskN记在它的末尾,读取时再解析回来。 - 不阻断评论。 万一钩子没挂上、字段被截断、编号异常,面具只会退化成「由名号推演」,绝不会让评论提交失败。
五 · 特色亮点:十件值得说的事
- 零外链、零请求:字体、纹样、头像全部自给,断网可开。默认设置下全站不发一个外部请求。
- 不装插件、不改内核、不动数据库:解压即用,卸载即净。
- 二十款自绘面具:不依赖 Gravatar,隐私友好,还好看。
- 移动端优先:窄屏自动转单行卷轴,触控目标够大,正文 15–17px。
- 无障碍:保留「直入正文」跳转链接、键盘焦点样式、
aria-expanded/aria-hidden标注,并尊重系统的「减弱动态效果」设置(prefers-reduced-motion)。 - 可打印:打印时自动隐去匾额、侧栏、批注与纹样,只留纸与字。
- 江湖时辰与节气:页脚按服务器时间推算十二时辰与当前节气(采用通用寿星公式,2000—2099 年精度最好)。
- 三张现成页面模板:名录、关于、武林谱,建好页面改个缩略名就能用。
- 弹出式面具谱:自屏幕底部升起一栏「面具谱」,二十款任择其一。移动端不外溢、不添滚动条,键盘
Esc、点遮罩、「收起」三处皆可关;脚本未就绪时面具谱平铺在表单里,无 JS 也能选。 - 文章置顶 · 朱砂「荐」印:后台「江湖令 · 置顶卷」填 cid 或 slug,或在文章自定义字段里加
sticky = 1,该篇便排到首页首屏最前,卡片右上角盖一枚朱砂「荐」印。
六 · 下载与安装(新手向,逐步照做)
6.1 环境要求
- Typecho 1.1.x / 1.2.x
- PHP 5.6 及以上(代码已在 PHP 7.x / 8.x 语法范围内编写)
- 不需要任何插件
6.2 四步装好
第 1 步:拿到主题包
下载 xiakexing-v1.5.0.zip,解压。你会得到一个名为 xiakexing 的文件夹。
第 2 步:放进 usr/themes/
用 FTP/宝塔面板/SFTP,把 xiakexing 整个文件夹放进 Typecho 根目录下的 usr/themes/ 里。放好后路径应该长这样:
你的站点根目录/
└── usr/
└── themes/
└── xiakexing/
├── index.php
├── style.css
├── functions.php
└── ...注意:️ 新手最容易踩的坑:不要把
xiakexing外面那层目录一起传进去,否则会变成usr/themes/xiakexing/xiakexing/index.php,后台认不出这个主题。判断标准很简单:index.php必须直接躺在usr/themes/xiakexing/里面。另外请保持文件夹名为
xiakexing(改名后主题的兜底资源路径会失效)。
第 3 步:后台启用
登录后台 → 控制台 → 外观 → 找到「侠客行」→ 点击启用。
第 4 步:逐项配置
后台 → 外观 → 设置外观 → 打开「江湖令」面板,按下面的清单走一遍即可。
6.3 升级(已是旧版站点)
直接用新包覆盖 usr/themes/xiakexing/ 整个目录即可。本次只动了 functions.php 和 style.css 两个文件,也可以只覆盖这两个。不改内核、不动数据库、无插件依赖,回滚就是恢复备份目录。
七 · 首次上手:五步配置
装好之后别急着写文章,先花五分钟配这五样,效果立刻不一样:
- 题字与匾额:填站名与匾额小字(默认「侠客行 / 落笔皆是江湖」)。
- 四色:朱砂、墨黑、宣纸白、松烟灰。想更冷就调低朱砂饱和,想更亮就调高宣纸白。
建分类,用武侠语汇:主题不强制,但推荐
刀剑录 药典 诗酒行 夜行记 江湖志分类在这里叫「门派」,导航会自动呈现为匾额,归档标题写作「某派门下」。
- 写几条门派短句:格式
门派名|短句,一行一条。文章末尾会自动缀上对应的一句;没命中就按文章编号稳定取一句。 - 挂上江湖名录(友链):格式
名号|网址|一句评,一行一条;想让哪一位在帖上多盖一枚朱砂「新」标,就在行末再加一栏写新(名号|网址|一句评|新),三栏的老写法照旧可用。然后新建一个独立页面,缩略名填links,不选模板也会自动变成名刺帖陈列墙。
可选:换掉匾额上的「侠」字
后台「江湖令 → 匾额印图」填一个图片地址,网站的匾额就以图代印;留空则自动去找 assets/img/logo.svg(或 .png / .jpg / .jpeg / .webp);都没有,就回到朱砂「侠」印。三级兜底,不会留白。
自定义字段(写在文章的「自定义字段」处)
常用的三枚:thumb 填封面图地址;mantra 填一句门派短句;1.5.0 起多一枚 sticky —— 值填 1,这篇就置顶(等价于在「江湖令 · 置顶卷」里写上它的 cid 或 slug)。
| 字段名 | 用途 |
|---|---|
thumb | 竹简卡片顶部的封面图地址(可留空) |
mantra | 覆盖文末短句,写什么就是什么 |
sticky | 值填 1,这篇就置顶(1.5.0 起) |
八 · 常见问题 FAQ
Q1:评论提交了却不显示?
本站 v1.3.0 起已修掉这个经典问题。根因是 Typecho 1.2 之后开启了评论防垃圾校验,而回批框的 id 必须与内核的 respondId(形如 respond-post-12)一致,令牌才塞得进去。主题已把 id 交还内核口径,表单里还内置了一枚兜底令牌,无 JS 也能提交。若你仍在旧版遇到此问题,升级到 1.3.0 以上即可。
Q2:搜「寻」跳到主页或错页?
旧版空关键词会被内核拼成 /search//,匹配不上搜索路由。现版本:输入框加了必填;提交时直接把关键词编码后跳到搜索页,绕开中间那次 302。
Q3:侧边栏有一条滚动条,很丑。
现版本已隐去侧栏滚动条的描边(scrollbar-width:none 等),滚轮与触摸照旧可滚,只是不再画出那条线。
Q4:能完全断网运行吗?
能。只要「批注头像」保持默认的侠客面具(而不是 Gravatar),全站不发任何外部请求,字体与纹样全部本地内联。
Q5:节气/时辰不准?
节气是推算值(通用寿星公式,2000—2099 年精度最好),个别年份可能差一日,属正常。时辰按服务器时间推算,与访客本地时区可能不同,可在服务器时区设置里调整。
Q6:能不能改面具数量/换成自己的图?
面具是 functions.php 里 xiake_avatar_svg() 的三组数组(眉形/额饰/颏饰)生成的。加面具只需往数组尾部追加元素并把 xiake_mask_count() 的返回值改大;注意不要动已有元素的顺序,否则会打乱老批注的面貌。若想彻底换成照片头像,把「批注头像」切到 Gravatar 即可。
九 · 版本与升级
- v1.5.1(当前):友链页改版为名刺帖陈列墙——以竖版名刺取代横排名帖:顶中一枚朱砂顶针、右肩一方 30px 首字方印(-4°)、帖与帖交替微倾(-1.1°/0.9°/-0.35°),悬停扶正上浮、印归正、钉影加深;手机两列、≥620px 三列、≥1180px 四列(真机自 900px 起有右侧「江湖地图」栏,四列故而后移);名录制式加一栏可选「新」,榜额出「新朋 N 位」;投帖区改为三枚 chips。旧名帖类名一律不保留。
- v1.5.0:面具库 12 → 20 款(新增捕快/游医/说书人/女冠/刀疤客/猎户/棋士/更夫);「择一面具」改为弹出式面具谱(移动端底部弹层,无 JS 时平铺兜底);新增文章置顶——后台「江湖令 · 置顶卷」或文章自定义字段
sticky = 1,置顶卷排首页首屏最前并盖朱砂「荐」印;卡片形制抽成xiake_slip_markup()共用。 - v1.4.0:面具库 6 → 12 款(新增书生/镖师/道人/酒客/剑仙/女侠);旧六款绘制路径与次序一字未动;推演基数固定为旧六款,老批注面貌不变;评论框面具栅格适配十二款。
- v1.3.0:修复前后台评论都不显示;「寻」直达搜索页;隐去侧栏滚动条;友链页重设计为名帖册;匾额印图可配;评论框首次加入面具自选。
- v1.2.x:组件池清理、PHP 8
Throwable兜底、批注显示链路等一批修复。
升级方式:覆盖整包即可,或只覆盖 functions.php 与 style.css。
自检:在主题目录下执行
node tools/selfcheck.mjs可复核版本号一致性、关键函数存在性、面具库规模、名刺帖接线与括号配平(1.5.1 共 80 项断言)。
十 · 版权与致谢
- 主题基于 Typecho(typecho.org)开发,遵循其生态惯例。
- 全部纹样、面具、图标均为主题自绘内联 SVG,不引用任何第三方素材站资源。
- 页脚会自动附上 Typecho 与主题署名,这是对开源作者的尊重,建议保留。
一壶浊酒,半卷残书。愿这卷轴,装得下你的江湖。
侠客批注 2 条批注
朱笔在侧,留一句给后来人。
randaxia 阁主
00000
执笔回批
randaxia 阁主
之
执笔回批