默认分类 2026-01-16 16:33 10

为了在宿舍躺平,我给博客搓了个“查电费”功能

摘要:作为一名电气工程专业的大学生,最尴尬的事情莫过于——玩游戏正嗨,宿舍突然断电了。为了不再体验这种“黑暗时刻”,我决定把查电费的功能集成到我的个人博客里。本以为只是写个简单的 HTML,结果在伪静态、Caddy 配置和 Typecho 模板机制上足足折腾了一整天。好在,最终效果完美!

🚀 最终效果展示

先别急着看代码,看看这“颜值升级”后的成果:

  • 界面:采用 iOS 风格的渐变紫卡片,电量数字超大显示,一目了然。
  • 智能:第一次输入楼栋房间后,系统会自动记住。第二次进来,无需点击,直接自动查询并显示结果。
  • 极速:去掉了花里胡哨的加载动画,数据秒开。
  • 警告:如果电量低于 10 度,卡片会自动变红预警,提醒我该交费了。

🛠️ 技术栈与思路

  • 博客程序:Typecho
  • 主题:Pure (极简风格)
  • 服务器环境:Docker + Caddy (反向代理)
  • 核心逻辑:通过 PHP curl 转发学校电费接口(解决跨域问题),前端使用 Fetch API + LocalStorage 实现无刷新查询和本地存储。

💣 踩坑实录(重点来了)

这次开发过程并不是一帆风顺,可以说是一步一个坑,坑坑不一样。

1. 伪静态的“死循环”之谜 🌀

为了让链接好看点(变成 domain.com/dianfei 而不是 domain.com/index.php/dianfei),我开启了 Typecho 的地址重写功能。

结果因为我用的是 Caddy 做反向代理,Typecho 和 Caddy 打架了:

  • Caddy 说:“你访问 /dianfei,我帮你偷偷改成 /index.php/dianfei 发给后台。”
  • Typecho 说:“你怎么带着 index.php 来了?这不符合规范!给我重定向回 /dianfei!”
  • 结果:浏览器就在这两个地址之间无限疯狂跳转,直接报 Too many redirects

✅ 解决方法
在 Caddy 里配置 rewrite 规则,同时在 Typecho 后台关闭地址重写(或者让 Caddy 负责重写,Typecho 负责处理),最终实现了完美的短链接访问。

2. “关于我”的幽灵 👻

这是最让我怀疑人生的一个坑。我明明创建了 page-dianfei.php,也把缩略名改成了 dianfei,但每次点进去,显示的都是“关于我”的通用页面内容。

一开始以为是缓存,后来才发现是 Typecho 的模板识别机制问题:
如果不告诉 Typecho 这是一个“自定义模板”,它有时候会因为找不到标识而默认加载通用的 page.php

✅ 解决方法
必须在 PHP 文件最开头加上标准的注释声明,格式必须是 @package custom,少一个字符都不行!

<?php
/**
 * 查电费专用模板
 *
 * @package custom
 */

加上这几行后,Typecho 后台的“自定义模板”选项里立马就出现了它!

3. 终端粘贴代码的惨案 💥

最离谱的一个错误。我图省事,直接在 SSH 终端里用 cat > file.php <<EOF 的方式粘贴代码。

结果 Linux 终端把 PHP 代码里的 // 当成了注释,把 $ 当成了变量,直接把代码吞了一半,生成了一个全是乱码的残废文件。怪不得 Typecho 死活认不出来!

✅ 教训
修改代码还是得用编辑器(比如 FinalShell 自带的图形化编辑功能),千万别迷信命令行直接粘贴复杂代码!


💻 核心代码分享

对于想抄作业的同学,其实原理很简单。利用 Typecho 的独立页面机制 (page-{slug}.php),我们可以让某个页面完全脱离博客原本的布局,变身成一个 Web App。

前端自动查询逻辑 (JavaScript):

// 读取本地存储,如果有记录,直接自动查询
function loadMem() { 
    try{ 
        let l = JSON.parse(localStorage.getItem('df_last')); 
        if(l && tree[l.b]){ 
            // 自动填充下拉框...
            document.getElementById('sel-b').value = l.b;
            chgB();
            // ...省略部分代码...
            // 自动触发点击查询
            query();
        } 
    } catch(e){} 
}

📝 总结

虽然折腾了一天,但看到手机上那个紫色的卡片亮起电量数字时,成就感是爆棚的。

这就是折腾的乐趣吧——为了省去以后的一点点麻烦,愿意现在通过技术解决所有的大麻烦。

现在,我要去给宿舍充电费了 👋。

Tags: Typecho, Caddy, PHP

1 条评论

👻
乐多 01-17 18:57

什么鬼

发表评论