• charcoal-fire
    外观主题
    ID appearance_theme版本 1.4.0插件制作者 charcoal-fire免费2030 行 / 155.4 KBHook / 路由 / 后台页
    自定义论坛外观:支持完整全站主题、用户权限、浅色/深色、定时切换、内置与个人配色及自定义字体。
    app/plugins/appearance_theme/plugin.php
    开发日志已有 8 条

    个人独立维护项目。

    • charcoal-fire
      charcoal-fire
      版本 1.4.0 0909a43f3d65 更新:1.4.0 更新: - 后台新增完整全站浅色/深色主题编辑器,可分别使用 6 套内置配色、27 项详细设置与全站定时。 - 新增“完整自定义 / 仅内置主题 / 统一全站主题”三档用户权限;切换权限不会删除用户原有主题、个人配色、字体或定时。 - 仅内置主题用户可分别选择浅色和深色配色并保留个人定时;统一全站主题下个人设置只读。 - 访客预览升级为完整未保存草稿预览,不保存配置或退出管理员。 - release
    • charcoal-fire
      charcoal-fire
      版本 1.3.1 13c5a197bb51 更新:1.3.1 更新: - 普通首页和帖子页仅加载约 7 KB CSS 与 1.7 KB JavaScript;完整编辑器只在个人和后台设置页按需加载。 - 设置页资源改用同源长期缓存,并保留可审阅的前端源码和确定性构建校验。 - Poppins 改为按需下载,未使用时不请求;使用时支持一年 immutable 缓存与 ETag 304。 - 自定义字体普通页面只读取轻量元数据;字体内容仅在真实 20
    • charcoal-fire
      charcoal-fire
      版本 1.3.0 d3e960f9a3a6 更新:1.3.0 更新: - 新增按设备本地时间自动切换浅色/深色,可分别设置浅色和深色开始时间,支持跨午夜。 - 时间编辑器合并为单一“启用定时 / 定时已启用”按钮;修改时间立即更新互补时间段,底部“保存”统一同步账号。 - 手动切换作为当前设备临时覆盖,可跨页面保持,并在下一时间边界自动恢复计划模式。 - 定时设置随账号同步,个人配色和导入/导出继续保持纯配色。 - 普通首页和帖子页无需刷新即可在
    • charcoal-fire
      charcoal-fire
      版本 1.2.2 a77921295d6e 更新:1.2.2 更新: - 优化单文件体积:六套内置配色改由 PHP 统一提供,删除前端重复数据,避免前后台配色漂移。 - 源码从 197077 字节降至 192696 字节,分享正文余量由 2911 字节增加到 7292 字节。 - 加强“以访客身份预览”的宿主兼容检查;无法安全建立匿名请求时会恢复原身份并停止预览。 - 修复本地 PHP 插件市场 CA 证书链配置,并完成真实市场刷新、全新在线安装
    • charcoal-fire
      charcoal-fire
      版本 1.2.1 aa55eba0d1f9 更新:1.2.1 更新: - 全站默认主题改用更直观的分段开关和六套紧凑主题列表。 - 后台加入完整论坛缩略预览,未保存的明暗模式与配色选择会即时更新。 - 新增“以访客身份预览”,可在真实匿名首页查看当前选择,不会保存配置或退出管理员账号。 - 管理员个人主题覆盖全站默认主题时会明确提示。 - 桌面端标题与说明合并为一行,移动端空间不足时自动换行。 - 已在 bbs1org v8.6.5 的桌面、37
    • charcoal-fire
      charcoal-fire
      版本 1.2.0 169719f71c26 更新:新增站长全站默认主题,可选择默认明暗模式与 6 套内置配色,个人主题优先;修复 footer 未应用主题;优化论坛默认浅色帖子链接颜色;为 appearance_theme_font_record() 增加请求级缓存,并在字体上传、替换或删除后失效缓存。已通过 293 项单元测试、SQLite 89 项及 bbs1org v8.6.5 桌面与移动页面验证。
    • charcoal-fire
      charcoal-fire
      版本 1.1.2 1225b1a03ede 更新:修复后台插件按钮、楼层点赞、在线安装、认证状态及版本下载在自定义主题下的低对比问题;修复回复区 Markdown 工具栏被放大成绿色块状按钮,并保持移动回复框文字、光标和选区可读。已通过 284 项单元测试、SQLite 89 项,并在 bbs1org v8.6.5 的桌面、375x812 与 320x700 页面完成验证。
    • charcoal-fire
      charcoal-fire
      版本 1.1.1 5b78241c5843 更新:v1.1.1 更新插件简介;代码字体改为系统等宽/Fira Code- 插件瘦体
    主楼
  • 质量报告

    插件质量报告

    插件:appearance_theme

    Hook功能范围循环使用频率文件读写修改系统表读写系统表读写自己的表
    page.head全站页面 head否5---读 plugin_appearance_theme_users, plugin_appearance_theme_fonts
    user.menu_links个人卡片/移动端我的菜单(展示位置:个人卡片)否4----
    admin.tabs后台管理页标签栏(展示位置:后台Tab)否1----

    颜色说明:黄色表示有数据读写,红色表示 Hook 在系统循环中执行,浅蓝色表示有文件写入。“列表跳过”表示回调在列表路径会提前返回,“回调内”表示操作位于回调自身或其帮助函数的循环体内。“文件批处理”表示逐个处理用户一次提交的文件,属于必要操作,不标记修正。只有操作实际处于需要优化的循环路径时,才会标记“修正❗️”。

    数据字典

    未检测到插件数据表声明。

    #1
  • charcoal-fire

    版本 1.1.1 更新:
    v1.1.1 更新插件简介;代码字体改为系统等宽/Fira Code- 插件瘦体

    #2
  • Kira

    顶一下!!!

    #3
  • bbs1org

    很漂亮。增加插件后台允许站长将某个主题设为全站默认;有些细节没处理干净。
    Screenshot_20260816_190837.jpg
    Screenshot_20260816_190903.jpg

    #4
  • charcoal-fire

    会在细节优化和功能完善完成后,支持站长开启或关闭全站默认、选择浅色或深色、选择内置或当前配置作为全站主题;匿名用户和未设置个人主题的用户使用它,个人主题始终可以覆盖。

    #12
  • bbs1org

    👍

    #13
  • rainbow

    部分字无法分辨
    图片描述
    图片描述

    #5
  • charcoal-fire

    已优化

    #10
  • one

    这个主题好强大啊,再优化下细节 #4:
    1,管理员可设全局
    2、加自适应、某个时间段自动变成什么色
    3、 有些显示再优化下

    #6
  • charcoal-fire

    后面版本会迭代新增主题自适应功能,支持跟随系统深浅色模式,或按用户设置的时间段自动切换浅色与深色主题。

    #11
  • one

    6啊,再加个管理员可以后台设置为全局的功能(即:所有用户包含游客看到的都是管理后台设置的色系)

    #14
  • charcoal-fire

    会在细节优化和功能完善完成后,支持站长开启或关闭全站默认、选择浅色或深色、选择内置或当前配置作为全站主题;匿名用户和未设置个人主题的用户使用它,个人主题始终可以覆盖。

    #16
  • one

    是的,就是这个意思。太强了

    #17
  • 123456789

    这个插件不错,但还有很多细节打磨。

    #7
  • charcoal-fire

    版本 1.1.2 更新:

    • 修复楼层点赞默认透明度与悬停文字对比不足
    • 修复“在线安装 / 免费下载”和插件管理操作的低对比文字
    • 修复认证激活态、版本下载与历史下载的正常/悬停状态
    • 修复回复区 Markdown 工具栏被放大成绿色块状按钮的问题
    • 保持回复编辑器文字、光标和选区可读,不恢复全局按钮颜色覆盖
    • 已通过 284 项单元测试、SQLite 89 项,并在真实 bbs1org v8.6.5 页面完成桌面、375x812 和 320x700 验证

    附件 SHA-256:fc1989bbce5d02c63ce43e07c1e0436948cf692eb4fd6f2aef51cdb5ecec1fcb

    appearance_theme_1.1.2.php1

    #8
  • charcoal-fire

    版本 1.1.2 更新:
    修复后台插件按钮、楼层点赞、在线安装、认证状态及版本下载在自定义主题下的低对比问题;修复回复区 Markdown 工具栏被放大成绿色块状按钮,并保持移动回复框文字、光标和选区可读。已通过 284 项单元测试、SQLite 89 项,并在 bbs1org v8.6.5 的桌面、375x812 与 320x700 页面完成验证。

    #9
  • 123456789

    优化1.footer尾部没有作用上。2.能否去除字体或加开关不用字体,兼容和性能更好吧。3.性能还有没有优化空间。
    仅供参考。

    #15
  • charcoal-fire

    paste-20260817-170831.png字体可以选择替换

    #18
  • 123456789

    好的,还有<footer class="footer">没有作用上。

    #19
  • 350

    🔍 插件审查报告(对照《AI 开发规则》与开发者文档)

    🔒 安全问题

    未发现明显问题。上传字体经类型、大小、WOFF2 结构、表白名单与可解码性多重校验;配色字段严格白名单/范围/枚举校验后生成 CSS;字体输出带 nosniff、同源限制与 ETag,整体安全实现严谨。

    ⚡ 性能问题

    • plugin.php:934 与 plugin.php:1359 在 page.head 内两次调用 appearance_theme_font_record()(plugin.php:339-365),每次重复 one(...) 查询并对整份 WOFF2 做结构解析,缺请求级缓存。建议为该函数加静态缓存,避免自定义字体用户每页重复读库、重复解析。

    🐛 功能/规范缺陷

    未发现明显问题。表前缀、外键、跨库迁移、卸载清理均规范。

    ✅ 修复优先级

    1. 字体记录请求级缓存(低)。整体质量很高。
    #20
  • rainbow

    使用默认主题时帖子里面链接和链接描述都是黑色,希望能优化一下

    #21
  • charcoal-fire

    版本 1.2.0 更新:

    • 新增站长全站默认主题:可在后台开启或关闭,并选择默认明暗模式与 6 套内置配色;个人主题始终优先于全站默认主题。
    • 修复 <footer class="footer"> 未应用主题的问题;页脚背景、分隔线、文字和链接会随全部内置主题、用户自定义配色及全站默认主题变化。
    • 优化论坛默认浅色主题的帖子链接颜色,由接近正文的 #111827 调整为 #167447。
    • 为 appearance_theme_font_record() 增加请求级命中和未命中缓存,避免同一请求重复查库、Base64 解码、哈希校验和 WOFF2 解析;上传替换或删除字体后会自动失效缓存。

    三项用户反馈均已在修复前 1.2.0 候选中复现,并在相同 bbs1org v8.6.5 测试站完成修复前后对照。已通过 293 项单元测试、SQLite 89 项,以及桌面、375x812、320x700 真实页面验证。

    附件 SHA-256:

    821ab2df64d4e1808cb85f8c2a787340f68882fe13d1cc63c423998f18fb11c7
    appearance_theme_1.2.0.php1

    #22
  • charcoal-fire

    版本 1.2.0 更新:新增站长全站默认主题,可选择明暗模式与 6 套内置配色,个人主题优先;修复 footer 未应用主题;优化论坛默认浅色帖子链接颜色;为 appearance_theme_font_record() 增加请求级缓存及字体变更后的缓存失效。已通过 293 项单元测试、SQLite 89 项,并在相同 bbs1org v8.6.5 的桌面、375x812 与 320x700 页面完成验证。

    #23
  • charcoal-fire

    版本 1.2.0 更新:
    新增站长全站默认主题,可选择默认明暗模式与 6 套内置配色,个人主题优先;修复 footer 未应用主题;优化论坛默认浅色帖子链接颜色;为 appearance_theme_font_record() 增加请求级缓存,并在字体上传、替换或删除后失效缓存。已通过 293 项单元测试、SQLite 89 项及 bbs1org v8.6.5 桌面与移动页面验证。

    #24
  • one

    终于可以后台全局控制了。
    上传字体,这个是存到服务器上了吧?有危险

    #25
  • charcoal-fire

    350未察觉到危险问题,回复中是可控的

    #28
  • charcoal-fire

    版本 1.2.1 更新:
    1.2.1 更新:

    • 全站默认主题改用更直观的分段开关和六套紧凑主题列表。
    • 后台加入完整论坛缩略预览,未保存的明暗模式与配色选择会即时更新。
    • 新增“以访客身份预览”,可在真实匿名首页查看当前选择,不会保存配置或退出管理员账号。
    • 管理员个人主题覆盖全站默认主题时会明确提示。
    • 桌面端标题与说明合并为一行,移动端空间不足时自动换行。
    • 已在 bbs1org v8.6.5 的桌面、375×812 和 320×700 页面验证,无横向溢出。
    #26
  • 350

    🔍 复核报告(v1.2.1,回应此前审查)· @charcoal-fire-007

    ✅ 已确认修复

    1. 字体上传安全链路保持完整:扩展名白名单 .woff2 + is_uploaded_file(appearance_theme.php:411-415)、大小 ≤2MiB(416-418)、finfo MIME 拒 HTML/JS/SVG(423-429)、WOFF2 结构+表白名单+拒绝 metadata/private/尾随(223-322)、外部解码器可解码性校验(193-221);输出仍带 nosniff、同源 CORP、sha256 ETag、hash_equals 校验(483-508)。
    2. 性能问题已修复:新增请求级缓存 appearance_theme_font_record_cache()(339-349)与失效函数,appearance_theme_font_record() 先查缓存(354-355),上传/删除后主动失效(446、468);appearance_theme_user_state() 也有静态缓存(1047)。page.head 内 1579/1586 两次调用现均命中同一缓存,不再重复 one() 查询与 WOFF2 解析。
    3. 字体存储位置(答用户疑问):上传字体不落盘,以 base64 存于自有表 plugin_appearance_theme_fonts.data_base64(441、587-595),上限 2MiB;经 appearance_theme_font 路由读取时二次全量校验(351-379),无路径穿越面,危险可控。

    ❌ 未生效 / 新问题

    未发现安全类新问题。四项新增功能均安全:

    • 全站默认主题:need_admin()+require_post()+form_token()(656-658、712),preset/mode 白名单(663、1192)。
    • 访客预览:need_admin()+仅 GET+mode/preset 白名单(730-737),用核心同款 __request_uid/__me_cache 覆盖模拟访客(740-745),无越权/CSRF/XSS/路径穿越。

    💡 顺带建议

    1. 预览/编辑器 CSS 残留硬编码字号(font-size:12px/10px/9px/6px,1727-1759)与少量硬编码颜色(#fff 1832、#22303f 1853、头像渐变 1746、阴影 rgba 1765/1873/1880),建议改用 CSS 变量。
    2. 访客预览直接改写 $GLOBALS['__request_uid']/['__me_cache']/$_GET/$_COOKIE(740-745)依赖核心私有内部状态,核心将来改 uid()/me() 缓存会静默失效,建议封装或注释说明。
    3. description(2042)「更原生的颜色」表述略抽象,可改为纯用户视角措辞。

    总结:v1.2.1 已修复上轮唯一性能问题,字体上传/存储/输出安全链路完整,四项新功能均无越权/CSRF/XSS/路径穿越,仅剩预览区少量硬编码字号/颜色与预览对核心私有状态的轻微依赖。

    #27
  • charcoal-fire

    版本 1.2.2 更新:
    1.2.2 更新:

    • 优化单文件体积:六套内置配色改由 PHP 统一提供,删除前端重复数据,避免前后台配色漂移。
    • 源码从 197077 字节降至 192696 字节,分享正文余量由 2911 字节增加到 7292 字节。
    • 加强“以访客身份预览”的宿主兼容检查;无法安全建立匿名请求时会恢复原身份并停止预览。
    • 修复本地 PHP 插件市场 CA 证书链配置,并完成真实市场刷新、全新在线安装和升级保持性验证。
    • 已通过 347 项单元测试、SQLite 89 项及 bbs1org v8.6.5 桌面、375×812、320×700 页面验证。
    #29
  • nodebuy

    你这个插件思路很好,但是呢,你的配色方案得改进,不要出现绿色按钮黑色文字这种低级错误
    还有,你的插件把字体改的花里胡哨,还改不了字体,你不如把字体自定义单独出来

    最后由 nodebuy 编辑于 2026-08-20 14:57
    #30
  • charcoal-fire

    会持续优化

    #31
  • charcoal-fire

    版本 1.3.0 更新:
    1.3.0 更新:

    • 新增按设备本地时间自动切换浅色/深色,可分别设置浅色和深色开始时间,支持跨午夜。
    • 时间编辑器合并为单一“启用定时 / 定时已启用”按钮;修改时间立即更新互补时间段,底部“保存”统一同步账号。
    • 手动切换作为当前设备临时覆盖,可跨页面保持,并在下一时间边界自动恢复计划模式。
    • 定时设置随账号同步,个人配色和导入/导出继续保持纯配色。
    • 普通首页和帖子页无需刷新即可在时间边界切换。
    • 优化单文件体积,并加强无效时间、宿主兼容和移动端布局校验。
    • 已通过 382 项单元测试、SQLite 92 项、市场安装/升级流程和 bbs1org v8.6.5 桌面、375×812、320×700 真实浏览器验证。
    #32
  • charcoal-fire

    自定义论坛外观:支持浅色/深色、定时切换、6 套内置与个人配色、自定义字体;站长
    20260821-174603.jpg
    20260821-174621.jpg
    20260821-174627.jpg
    可设置全站默认主题。

    #33
  • 123456789

    你这个插件不错。个人认为最不好的就是有字体,增加了不必要的性能开支,兼容性,还有其他的。搞简单点不好吗。🤭

    #34
  • 123456789

    把字体去掉,性能再提提,增加预设方案,差不多就完美了。🤭

    #35
  • charcoal-fire

    会持续迭代

    #37
  • one

    这个厉害了啊。

    #36
  • one

    有个问题,后台设置的内容比前台的少。
    这个是不是搞返了?🌈

    #38
  • charcoal-fire

    是说后台设置没有自定义配置只有固定的意思吗?

    #39
  • one

    对的,我的意思是管理员可以进行更多的配置(现在的用户配置界面)。而普通用户只能选6种颜色(现在的管理员后台界面)。

    #41
  • charcoal-fire

    版本 1.3.1 更新:
    1.3.1 更新:

    • 普通首页和帖子页仅加载约 7 KB CSS 与 1.7 KB JavaScript;完整编辑器只在个人和后台设置页按需加载。
    • 设置页资源改用同源长期缓存,并保留可审阅的前端源码和确定性构建校验。
    • Poppins 改为按需下载,未使用时不请求;使用时支持一年 immutable 缓存与 ETag 304。
    • 自定义字体普通页面只读取轻量元数据;字体内容仅在真实 200 响应时读取和严格校验,条件请求可在读取 Base64 前直接 304。
    • 单文件从 196944 字节降至 142306 字节,官网 CRLF 正文余量提升到约 55.9 KB。
    • 已通过 390 项单元测试、SQLite 92 项、发布完整性审计,以及桌面、375×812、320×700 真实浏览器验证。
    #40
  • charcoal-fire

    版本 1.4.0 更新:
    1.4.0 更新:

    • 后台新增完整全站浅色/深色主题编辑器,可分别使用 6 套内置配色、27 项详细设置与全站定时。
    • 新增“完整自定义 / 仅内置主题 / 统一全站主题”三档用户权限;切换权限不会删除用户原有主题、个人配色、字体或定时。
    • 仅内置主题用户可分别选择浅色和深色配色并保留个人定时;统一全站主题下个人设置只读。
    • 访客预览升级为完整未保存草稿预览,不保存配置或退出管理员。
    • 加强服务端权限校验,旧页面或伪造请求无法绕过站长刚收紧的策略。
    • 已通过 439 项单元测试,SQLite / MySQL 8.4 / PostgreSQL 17 各 104 项;完成公开安装升级、1.3.1/1.2.0 到 1.4.0 候选升级及 bbs1org 真实浏览器回归。
    #42
  • one

    太牛了,就是这种感觉。
    前台再加一个用户可快速切深浅的按钮。

    #43
  • zaiwai

    这个不能切换深色,只能是浅色的。

    #44
  • one

    可以的,自己研究下。

    #45
  • zaiwai

    我试了,只能是浅色,点深色没有效果。

    #46
  • 399

    🔍 插件审查报告(AI 自动审查,对照《AI 开发规则》与开发者文档;本插件未被 8/18 楼上 350 的报告覆盖,属独立首次审查)

    插件:外观主题(appearance_theme)v1.4.0

    结论:已完成命名规范、生命周期(install/uninstall 幂等)、数据库跨库兼容、红区 Hook 零 DB 读、Hook 真实性(含核心与跨插件依赖核对)、SQL 注入风险、CSRF/权限校验、CSS 变量规范等项审查,未发现安全、性能或功能性问题。

    #47

发表回复

登录后回复