Robes Robes
Robes
©Robes 2023 - 2026 萌ICP备20262028号 Theme Robes
主题模板

Robes Typecho 主题2.7.1

毛玻璃风格 Typecho 主题 · 版本 2.7.1 · 适用 Typecho 1.2 及以上

Robes 是一套偏「个人小站」的毛玻璃主题:左侧栏常驻、顶栏集中了通知面板与小站,文章页自带目录与阅读体验优化,评论侧做了无感人机验证和邮件提醒,另外还带友圈、相册、友链墙、归档、留言板这些独立页面模板。

一、特性总览

模块能力是否可关
外观强调色 / 背景色 / 模糊度 / 透明度 / 圆角 / 侧栏宽度 / 背景光晕 / 内置字体可调
深色模式跟随系统、默认浅色、默认深色、允许用户手动切换可调
PJAX站内跳转无刷新,只替换内容区与标题可关
通知面板公告 / 我的评论 / 最新评论 / 小站,未读红点 + 60 秒轮询随主题
小站站长心情 + 匿名漂流瓶(捞一个 / 扔一个)随主题
首页图片位轮播、每日天气、卡片流、图片渐显、滚动进度可调
文章页目录、阅读进度、代码高亮、图片灯箱、分享、上下篇可关
评论无感验证、私密评论、邮件通知、访客删除自己的评论可关
独立页面友圈、相册、友链墙、归档、留言板、关于按需创建
扩展自定义 CSS / 自定义 JS / SEO 与 JSON-LD随主题

二、环境要求

项目要求
Typecho1.2 及以上(本项目在 1.3 上开发验证)
PHP7.4 及以上,推荐 8.0+
PHP 扩展mbstring 必需;gd 用于缩略图;curl 用于友圈、友链检测与天气,缺失时相关功能自动隐藏
目录权限主题目录可写(缓存),站点 usr/cache/notice/ 可写(通知与漂流瓶数据)
伪静态建议开启,便于 /archives/1/ 这类地址与 PJAX 正常协作

三、安装与首次配置

3.1 安装

  1. 后台 → 外观 → 安装主题 → 上传 Robes-2.7.1.zip。
  2. 压缩包内顶层目录必须叫 robes,不要改名:主题里有几处路径写死了这个目录名,改名会导致评论验证和私密评论失效。
  3. 启用主题,访问一次首页,让主题自动创建缓存目录。

3.2 首次配置检查清单

  • 基础:Logo、底部版权、备案号、Favicon、建站日期
  • 外观:确认强调色与背景色,圆角与模糊度按喜好调
  • 布局:深色模式选「跟随系统」或「用户切换」
  • 功能:设置首页图片位来源(建议「文章封面」)、相册分类 ID
  • 内容:写一条站内公告、一句站长心情
  • 社交:按需填写,留空不显示
  • 页面:建好六个独立页面(见第十章)
升级提示:主题设置存在数据库里,覆盖文件不会丢;漂流瓶内容在 usr/cache/notice/bottles.json,升级前备份这一个文件即可。

四、外观与布局

4.1 可调项

设置项说明默认
强调色链接、按钮、高亮条的主色,十六进制,如 #839ac9#839ac9
背景色页面底色,毛玻璃卡片会透出这层颜色#cfcfcf
模糊度毛玻璃 backdrop-filter 强度,如 16px、20px20px
透明度玻璃底色透明度,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.phpGETaction=pick&exclude=ID随机捞取,可排除刚看过的 ID
bottle.phpPOSTaction=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.phpfriends友圈:聚合友链站点的最新文章友情链接插件(写入 links 表)
gallery.phpgallery相册:瀑布流展示某个分类下的文章图片设置里的「相册分类 ID」
links.phplinks友链墙,可显示在线状态与分类筛选友情链接插件
archive-page.phparchive归档:按年月分组无
guestbook.phpguestbook留言板无
about.phpabout关于页无

创建步骤:后台 → 管理 → 新建页面 → 填标题与内容 → 右侧「自定义页面模板」选择对应文件 → 发布。

10.1 友圈

读取 links 表里的友链地址,抓取各站 RSS,缓存 7 天;抓取失败保留旧数据、1 小时后重试;完全没有可用链接时显示空状态,不会报错。

10.2 相册

把要展示的文章归到一个分类(例如 ID 6),在设置里把「相册分类 ID」填成该分类,相册页就会按文章封面与正文图片生成瀑布流。

10.3 友链在线检测

开启后友链卡片会带在线状态:浏览器端先做一次探测,再调用本地接口 extras/api-link-check.php,服务端用 curl_multi 并发检测(每批 8 个),整体几秒内返回;结果在浏览器缓存 1 小时。设置里可整体关闭。

十一、完整设置项对照表

键名中文名说明
logoImageLogo 图片图片 URL,留空显示站点首字
faviconUrlFavicon图标 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
enablePJAXPJAX 无刷新开启 / 关闭
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通知邮箱留空发管理员邮箱
cmSmtpHostSMTP 服务器留空用 mail()
cmSmtpPortSMTP 端口默认 465
cmSmtpSecure加密方式ssl / tls / none
cmSmtpUserSMTP 账号完整邮箱
cmSmtpPassSMTP 密码建议填授权码
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 缓存,否则页面引用的还是旧版本。

十四、升级与迁移

  1. 备份 usr/cache/notice/(漂流瓶与已读状态)和数据库。
  2. 解压新包,把整个 robes 目录覆盖到 usr/themes/robes。
  3. 后台确认主题仍是启用状态;设置项存在数据库,不会丢。
  4. 刷新首页,确认资源版本号已变化。
  5. 新站要延续数据,把备份的 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 的写法。
遇到的BUG欢迎留言
Robes Typecho 主题2.7.1.zip772.1 KZIP下载
上一篇 低谷自愈,慢慢找回从前的自己
下一篇 已经是最后一篇了

16条评论

正在验证… Ctrl + Enter 发送
  1. Ewan Lv2

    博主的这主题真不错,我想说的是不太大的窗口藏着不简单,整体非常舒服

    回复 Mac Firefox
    1. Robes 站长 Lv6

      @Ewan 你的评价太高了,哈哈哈

      回复 Android Chrome
  2. 阿航 Lv2

    终于上了,明天部署个试试

    回复 iPhone Chrome
    1. Robes 站长 Lv6

      @阿航 有bug欢迎提出来

      回复 Android Chrome
      1. 阿航 Lv2

        @Robes 友链插件顺带可以提供下

        回复 iPhone Chrome
        1. Robes 站长 Lv6

          @阿航 https://www.imhan.com/archives/typecho-links/这个下载安装就好了

          回复 Windows Chrome
  3. Hary Lv2

    这么详细的食用文档,准备发售或者开源了么

    回复 Android Edge
    1. Robes 站长 Lv6

      @Hary 下载地址在最下面已经发出来了

      回复 Android Chrome
      1. Hary Lv2

        @Robes 啊,看到了,我刚才滑来滑去没看到有链接,原来是这种下载按钮,真五脏俱全啊

        回复 Android Edge
        1. Robes 站长 Lv6

          @Hary 哈哈哈,不过确实这个下载按钮不是那么明显

          回复 Android Chrome
©Robes 2023 - 2026
萌ICP备20262028号
Theme Robes
归档 关于 留言