毛玻璃风格 Typecho 主题 · 版本 2.7.1 · 适用 Typecho 1.2 及以上
Robes 是一套偏「个人小站」的毛玻璃主题:左侧栏常驻、顶栏集中了通知面板与小站,文章页自带目录与阅读体验优化,评论侧做了无感人机验证和邮件提醒,另外还带友圈、相册、友链墙、归档、留言板这些独立页面模板。
一、特性总览
| 模块 | 能力 | 是否可关 |
|---|---|---|
| 外观 | 强调色 / 背景色 / 模糊度 / 透明度 / 圆角 / 侧栏宽度 / 背景光晕 / 内置字体 | 可调 |
| 深色模式 | 跟随系统、默认浅色、默认深色、允许用户手动切换 | 可调 |
| PJAX | 站内跳转无刷新,只替换内容区与标题 | 可关 |
| 通知面板 | 公告 / 我的评论 / 最新评论 / 小站,未读红点 + 60 秒轮询 | 随主题 |
| 小站 | 站长心情 + 匿名漂流瓶(捞一个 / 扔一个) | 随主题 |
| 首页 | 图片位轮播、每日天气、卡片流、图片渐显、滚动进度 | 可调 |
| 文章页 | 目录、阅读进度、代码高亮、图片灯箱、分享、上下篇 | 可关 |
| 评论 | 无感验证、私密评论、邮件通知、访客删除自己的评论 | 可关 |
| 独立页面 | 友圈、相册、友链墙、归档、留言板、关于 | 按需创建 |
| 扩展 | 自定义 CSS / 自定义 JS / SEO 与 JSON-LD | 随主题 |
二、环境要求
| 项目 | 要求 |
|---|---|
| Typecho | 1.2 及以上(本项目在 1.3 上开发验证) |
| PHP | 7.4 及以上,推荐 8.0+ |
| PHP 扩展 | mbstring 必需;gd 用于缩略图;curl 用于友圈、友链检测与天气,缺失时相关功能自动隐藏 |
| 目录权限 | 主题目录可写(缓存),站点 usr/cache/notice/ 可写(通知与漂流瓶数据) |
| 伪静态 | 建议开启,便于 /archives/1/ 这类地址与 PJAX 正常协作 |
三、安装与首次配置
3.1 安装
- 后台 → 外观 → 安装主题 → 上传
Robes-2.7.1.zip。 - 压缩包内顶层目录必须叫
robes,不要改名:主题里有几处路径写死了这个目录名,改名会导致评论验证和私密评论失效。 - 启用主题,访问一次首页,让主题自动创建缓存目录。
3.2 首次配置检查清单
- 基础:Logo、底部版权、备案号、Favicon、建站日期
- 外观:确认强调色与背景色,圆角与模糊度按喜好调
- 布局:深色模式选「跟随系统」或「用户切换」
- 功能:设置首页图片位来源(建议「文章封面」)、相册分类 ID
- 内容:写一条站内公告、一句站长心情
- 社交:按需填写,留空不显示
- 页面:建好六个独立页面(见第十章)
升级提示:主题设置存在数据库里,覆盖文件不会丢;漂流瓶内容在 usr/cache/notice/bottles.json,升级前备份这一个文件即可。四、外观与布局
4.1 可调项
| 设置项 | 说明 | 默认 |
|---|---|---|
| 强调色 | 链接、按钮、高亮条的主色,十六进制,如 #839ac9 | #839ac9 |
| 背景色 | 页面底色,毛玻璃卡片会透出这层颜色 | #cfcfcf |
| 模糊度 | 毛玻璃 backdrop-filter 强度,如 16px、20px | 20px |
| 透明度 | 玻璃底色透明度,0–1,越小越透 | 0.45 |
| 侧边栏宽度 | 只填数字(如 230),带 px 也能识别 | 230 |
| 圆角大小 | 小 8px / 中 14px / 大 20px | 中 |
| 自定义字体 | 开启用内置 ZQL 字体,关闭回退系统字体(更省流量) | 开启 |
| 背景光晕 | 页面背后缓慢漂浮的三团光斑 | 开启 |
4.2 实现方式
所有外观参数由 functions.php 的 themeCSSVars() 输出成 :root 上的 CSS 变量(如 --accent、--glass-blur、--sidebar-w),样式表统一引用变量,所以改一处全站生效,不需要重新编译或上传样式文件。深色模式配色写在 css/base.css 的 html.dark 里。
五、首页与图片位
5.1 图片位三种来源
| 来源 | 行为 | 适用场景 |
|---|---|---|
| 自定义图片 | 「图片地址 / 文章ID」填一张图片 URL,整站用这一张 | 固定封面 |
| 指定文章 | 填一个文章 ID,抓取该文章内所有图片,打乱后轮流作轮播背景 | 相册型文章做图库 |
| 文章封面 | 取推荐文章各自的封面,一张对应一个推荐位 | 常规博客(推荐) |
| 都为空 | 回退为主题色渐变,不影响排版 | 极简 |
5.2 交互细节
- 轮播背景是双层结构,交叉淡入切换,不闪白。
- 图片位左上角有实时天气,按访客 IP 自动定位城市,显示描述、温度、体感、湿度、风向。
- 首页卡片图片懒加载渐显(IntersectionObserver),滚动时顶部有渐变遮罩。
5.3 天气实现
前端请求 extras/weather.php,服务端先按 IP 做地理定位(结果缓存 7 天),再请求天气:首选 Open-Meteo(免密钥),失败回退 wttr.in;天气结果缓存 20 分钟,请求失败时缓存 2 分钟避免反复重试。整个过程由服务端代理,不把第三方接口暴露给浏览器。
六、通知面板
顶栏铃铛打开的面板分四个标签页。
| 标签 | 内容 | 说明 | |
|---|---|---|---|
| 公告 | 设置里的「站内公告」 | 每行一条;要显示日期就写成 `2026-11-05\ | 公告内容` |
| 我的评论 | 当前访客发过的评论 | 游客按 Cookie/IP 指纹聚合,登录用户按账号聚合,点条目跳转到原文位置 | |
| 最新评论 | 全站最新评论 | 红点显示未读数,60 秒轮询一次 | |
| 小站 | 站长心情 + 漂流瓶 | 见下一章 |
实现方式
- 公告在服务端解析,不占用数据库。
- 评论数据由
notice.php提供,只接受count/list/read/seen四个动作,其余一律拒绝。 - 已读状态写在站点
usr/cache/notice/下(seen_*.txt记录水位、read_*.json记录逐条已读),不污染评论表。
七、小站:站长心情与漂流瓶
7.1 站长心情
设置里的「站长心情」一句话,显示在小站顶部,并自动带当天日期;留空显示默认文案。
7.2 漂流瓶
- 「捞一个」随机取一条别人的瓶子,可以连续捞。
- 「扔个瓶子」昵称可留空(最多 12 字),正文最多 120 字,实时字数统计。
- 数据落在站点
usr/cache/notice/bottles.json,最多保留 400 条。
| 接口 | 方法 | 参数 | 行为 |
|---|---|---|---|
bottle.php | GET | action=pick&exclude=ID | 随机捞取,可排除刚看过的 ID |
bottle.php | POST | action=drop&nick&text | 投掷一条,写入前做长度与频率校验 |
7.3 防滥用规则
- 同一 IP 两次投掷间隔 45 秒,每天最多 20 条。
- 写入用
flock串行化,避免并发写坏 JSON。 - 空内容、超长内容直接拒绝,返回中文提示。
迁移:新站想延续老站的瓶子,把老站的 usr/cache/notice/bottles.json 复制到新站同路径即可,不需要导数据库。八、文章页
| 功能 | 说明 | 设置项 |
|---|---|---|
| 文章头部 | 分类、标题、作者、发布时间、阅读量、字数、评论数 | — |
| 目录 | 按正文的 h2/h3 自动生成,可折叠 | 文章目录 |
| 阅读进度 | 顶栏回到顶部按钮外圈的进度环 + 百分比 | — |
| 代码高亮 | highlight.js,仅文章/页面加载 | — |
| 图片灯箱 | 点击正文图片放大查看 | 图片灯箱 |
| 分享 | 优先调用系统分享,不支持时回退复制链接 | — |
| 上下篇 | 文章底部上一篇 / 下一篇 | 上下篇导航 |
| 编辑入口 | 登录状态下直接跳到后台编辑该文章 | — |
目录、灯箱、分享、进度都在 js/article.v2.js 与 js/main.v2.js 里实现,不依赖任何前端框架。
九、评论体系
9.1 无感人机验证(默认开启)
页面打开时静默向 verify/verify.php?action=challenge 申请一个签名 token,并附带一道轻量计算题(PoW);提交评论时连同答案一起校验。用户全程无感知,脚本刷评论则需要付出计算成本。token 的签名密钥由站点配置派生,换域名或改配置后旧 token 自动失效,属于正常现象。
9.2 私密评论(可选)
开启后评论框多一个「私密」勾选:勾选的评论只有作者本人和管理员可见,其他人看到占位提示。实现上给评论表自动补一个 private 字段(全新安装也会自动补列),并用 robes_priv Cookie 记住访客身份,不需要改 Typecho 核心。
9.3 评论邮件通知(可选)
先启用模块:在站点根目录 config.inc.php 末尾追加
$__robesCommentMail = __TYPECHO_ROOT_DIR__ . '/usr/themes/robes/comment-mail/bootstrap.php';
if (is_file($__robesCommentMail)) require_once $__robesCommentMail;然后到 外观 → Robes 设置 → 邮件通知 填 SMTP:
| 字段 | 说明 |
|---|---|
| 通知邮箱 | 接收提醒的邮箱,留空发给管理员邮箱,多个用逗号分隔 |
| SMTP 服务器 | 如 smtp.qq.com;留空则用服务器本机 mail() |
| SMTP 端口 | SSL 一般 465,TLS 一般 587 |
| 加密方式 | SSL / TLS / 不加密 |
| SMTP 账号 | 通常是完整邮箱地址 |
| SMTP 密码 | QQ、163 等必须填「授权码」,不是登录密码 |
模块内置 PHPMailer,新评论与回复提醒各有一套模板;未配置 SMTP 时回退 mail(),多数虚拟主机禁用了这个函数,表现就是「发送成功但收不到」。
9.4 其他
- 访客可以删除自己刚发布的评论(
js/comment-del.js)。 - 评论提交后局部刷新评论区,不整页跳转。
十、独立页面
这六个模板不会自动出现,需要新建页面后在右侧「自定义页面模板」里选择。
| 模板文件 | 建议别名 | 用途 | 依赖 |
|---|---|---|---|
friends.php | friends | 友圈:聚合友链站点的最新文章 | 友情链接插件(写入 links 表) |
gallery.php | gallery | 相册:瀑布流展示某个分类下的文章图片 | 设置里的「相册分类 ID」 |
links.php | links | 友链墙,可显示在线状态与分类筛选 | 友情链接插件 |
archive-page.php | archive | 归档:按年月分组 | 无 |
guestbook.php | guestbook | 留言板 | 无 |
about.php | about | 关于页 | 无 |
创建步骤:后台 → 管理 → 新建页面 → 填标题与内容 → 右侧「自定义页面模板」选择对应文件 → 发布。
10.1 友圈
读取 links 表里的友链地址,抓取各站 RSS,缓存 7 天;抓取失败保留旧数据、1 小时后重试;完全没有可用链接时显示空状态,不会报错。
10.2 相册
把要展示的文章归到一个分类(例如 ID 6),在设置里把「相册分类 ID」填成该分类,相册页就会按文章封面与正文图片生成瀑布流。
10.3 友链在线检测
开启后友链卡片会带在线状态:浏览器端先做一次探测,再调用本地接口 extras/api-link-check.php,服务端用 curl_multi 并发检测(每批 8 个),整体几秒内返回;结果在浏览器缓存 1 小时。设置里可整体关闭。
十一、完整设置项对照表
| 键名 | 中文名 | 说明 |
|---|---|---|
logoImage | Logo 图片 | 图片 URL,留空显示站点首字 |
faviconUrl | Favicon | 图标 URL |
footerText | 底部版权 | 如 ©2023 - 2026 Robes |
icpText | 备案信息 | 显示在页脚 |
siteStartDate | 建站日期 | 格式 2024-01-01,自动算运行天数 |
accentColor | 强调色 | 十六进制色值 |
bgColor | 背景色 | 页面底色 |
glassBlur | 模糊度 | 如 20px |
glassOpacity | 透明度 | 0–1 |
sidebarWidth | 侧边栏宽度 | 只填数字,单位 px |
borderRadius | 圆角大小 | small / medium / large |
enableFont | 自定义字体 | 内置 ZQL 字体开关 |
enableOrb | 背景光晕 | 装饰光斑开关 |
darkMode | 深色模式 | auto / light / dark / switch |
enablePJAX | PJAX 无刷新 | 开启 / 关闭 |
enableTOC | 文章目录 | 开启 / 关闭 |
enablePostNav | 上下篇导航 | 显示 / 隐藏 |
enableLightbox | 图片灯箱 | 开启 / 关闭 |
enableCommentVerify | 评论验证 | 无感人机验证开关 |
showSidebarCategories | 侧边栏分类 | 显示 / 隐藏 |
showSidebarTags | 侧边栏标签 | 显示 / 隐藏 |
heroSource | 图片位来源 | image / post / cover |
heroImage | 图片地址或文章 ID | 配合上一项使用 |
galleryCategoryId | 相册分类 ID | 相册页取哪个分类 |
noticeBoard | 站内公告 | 每行一条,可带日期 |
ownerMood | 站长心情 | 小站顶部文案 |
showLinksCategory | 友链分类 | 友链页分类筛选开关 |
enableLinkCheck | 友链检测 | 在线状态检测开关 |
showThemeCredit | 主题署名 | Theme Robes 链接开关 |
socialGithub 等 8 项 | 社交链接 | GitHub / Twitter / 微博 / 微信 / Bilibili / Telegram / 邮箱 / RSS,留空不显示 |
cmEnable | 评论邮件通知 | 需先引入 bootstrap.php |
cmMail | 通知邮箱 | 留空发管理员邮箱 |
cmSmtpHost | SMTP 服务器 | 留空用 mail() |
cmSmtpPort | SMTP 端口 | 默认 465 |
cmSmtpSecure | 加密方式 | ssl / tls / none |
cmSmtpUser | SMTP 账号 | 完整邮箱 |
cmSmtpPass | SMTP 密码 | 建议填授权码 |
customCSS | 自定义 CSS | 直接注入全站 |
customJS | 自定义 JS | 直接注入全站 |
十二、自定义样式示例
把下面代码粘到「自定义 CSS」即可,不需要改主题文件:
/* 让卡片更不透,标题字号略大 */
:root {
--glass-opacity: 0.62;
--radius-md: 16px;
--text: #222831;
}
/* 隐藏页脚署名(也可以用设置项关闭) */
.theme-credit { display: none !important; }自定义 JS 适合放统计代码、第三方评论等,注入位置在页脚脚本之后,可以直接使用 window.ROBES 里的配置(如 ROBES.themeUrl)。
十三、缓存、性能与 CDN
- 静态资源统一带
?v=版本号参数,改版本号即全站换新地址,避免浏览器缓存。 - CSS 按页面按需加载,非首屏样式用
media="print"延迟应用;首屏关键资源做了 preload。 - 主题运行数据统一在站点
usr/cache/notice/:公告已读、漂流瓶、友圈 RSS、文章解析缓存。 - 若套了 CDN,升级后记得刷新 HTML 与 CSS/JS 缓存,否则页面引用的还是旧版本。
十四、升级与迁移
- 备份
usr/cache/notice/(漂流瓶与已读状态)和数据库。 - 解压新包,把整个
robes目录覆盖到usr/themes/robes。 - 后台确认主题仍是启用状态;设置项存在数据库,不会丢。
- 刷新首页,确认资源版本号已变化。
- 新站要延续数据,把备份的
bottles.json放回新站同路径。
十五、常见问题
改了颜色/宽度没生效? 设置保存后强制刷新一次;套了 CDN 需要刷缓存。宽度只填数字,带不带 px 都可以。
后台版本号还是旧的? 后台显示的是 index.php 头部的 @version,覆盖文件刷新页面即更新。
首页天气一直是「加载中」? 检查 extras/weather.php 是否能访问、PHP 是否有 curl;服务器无法访问外网时该块会自动隐藏,不影响排版。
友链状态一直灰的? 确认设置里「友链检测」开启,且 extras/api-link-check.php 可访问;部分站点有防火墙,检测失败属正常。
友圈空白? 先装友情链接插件并添加几条链接,友圈只聚合 links 表里的站点。
漂流瓶扔不出去? 同一 IP 45 秒一条、每天 20 条上限,超限会提示稍后再试;确认 usr/cache/notice/ 可写。
评论提示验证过期? 换域名、改配置或清理 Cookie 后旧 token 会失效,刷新页面重新获取即可。
邮件发送成功但收不到? 多半是用了 mail() 被主机拦截,改填 SMTP;QQ、163 必须用授权码,且发件人地址要和 SMTP 账号一致。
相册页没有图片? 检查「相册分类 ID」是否填对,且该分类下文章有封面或正文图片。
十六、目录结构
robes/
├── functions.php # 设置项、CSS 变量、SEO、JSON-LD
├── header.php # 顶栏、通知面板、小站
├── footer.php # 页脚、移动端 Tab 栏、脚本引入
├── sidebar.php # 侧栏
├── index.php # 首页
├── post.php # 文章页
├── comments.php # 评论区
├── notice.php # 通知面板接口
├── bottle.php # 漂流瓶接口
├── comment-private.php # 私密评论
├── verify/ # 评论无感验证(token + PoW)
├── comment-mail/ # 评论邮件通知(含 PHPMailer)
├── extras/
│ ├── weather.php # 天气接口(IP 定位 + 多源回退)
│ └── api-link-check.php # 友链并发检测(curl_multi)
├── css/ # base / home / components / article / pages / ri
├── js/ # main / home / article / comment-del / vibe / pow-worker
├── fonts/ # 内置 ZQL 字体子集
├── img/ # 图标等静态资源
└── admin/ # 设置页 UI 模板十七、开发者备注
- 版本号:
functions.php顶部ROBES_ASSET_VER,改它可以让全部静态资源换新 URL。 - 配色变量:
css/base.css的:root与html.dark两段,改动即时生效。 - 主题目录名固定为
robes,header.php、notice.php、verify/verify-core.php里有硬编码路径。 - 接口都做了动作白名单与来源校验,新增接口请沿用
verify/与notice.php的写法。

16条评论
博主的这主题真不错,我想说的是不太大的窗口藏着不简单,整体非常舒服
@Ewan 你的评价太高了,哈哈哈
终于上了,明天部署个试试
@阿航 有bug欢迎提出来
@Robes 友链插件顺带可以提供下
@阿航 https://www.imhan.com/archives/typecho-links/这个下载安装就好了
这么详细的食用文档,准备发售或者开源了么
@Hary 下载地址在最下面已经发出来了
@Robes 啊,看到了,我刚才滑来滑去没看到有链接,原来是这种下载按钮,真五脏俱全啊
@Hary 哈哈哈,不过确实这个下载按钮不是那么明显