🏗️
What Was Done
完成清单
📐 Layout & Typography · 布局与排版
- ✅ Header 高度统一(桌面 76px、手机 64px)
- ✅ 手机字号缩放(80% → 85%)
- ✅ 内容页页首三栏(桌面:Logo / 分类 / Back;手机:Logo / 📋 + ←)
- ✅ 主页内容区块动态生成(最新 n 条,n 可通过分类配置)
- ✅ 列表页卡片布局(标题 + 作者 + 日期)
🖨️ Print & PDF · 打印与 PDF
- ✅ 打印双列布局
- ✅ 每页页眉页脚(用户关不掉)
- ✅ 分页优化(第 1 页有内容)
- ✅ Android 兼容方案(预生成 PDF)
🔐 Security · 安全
- ✅ 内容可见性(public / members / private / draft)
- ✅ 私有文章 404 保护
- ✅ 敏感文件保护(ALLOW_*_LOAD 常量)
- ✅ assets/ 目录防浏览
⚙️ Engineering · 工程
- ✅ Shared functions library(load_posts / format_date)
- ✅ 站点信息模块(site.php)
- ✅ 邮件脚本从配置文件读取配置
- ✅ 代码去重
📖 Documentation · 文档
- ✅ 设计规范文档(29 节,网页版)
- ✅ 内容元数据字段规范
- ✅ 安全规范
- ✅ 打印规范
📚
What Was Learned
学习收获
🎨 CSS & Layout · CSS 与布局
- ✅ position: fixed vs sticky
- ✅ Flex align-items: flex-start
- ✅ 变量作用域与覆盖顺序
- ✅ @media 后写覆盖先写
🖨️ Print CSS · 打印 CSS
- ✅ @page 与 @media print
- ✅ page-break-inside: auto vs avoid
- ✅ thead / tfoot 每页重复
- ✅ position: fixed 打印不可靠
🐘 PHP
- ✅ define + require 常量保护
- ✅ glob() 失败处理
- ✅ try-catch 处理 require
- ✅ Session 与安全
🏛️ Architecture · 架构
- ✅ 文件系统即数据库(flat-file CMS)
- ✅ 元数据与视图分离
- ✅ 内容加载函数复用
- ✅ 内容页规范可复用
📱 Cross-Device · 跨设备
- ✅ Android 打印限制
- ✅ 预生成 PDF 方案
- ✅ 手机页首特殊处理
🔄
Before / After
之前 / 现在
| ❌ Before · 之前 |
✅ After · 现在 |
| ❌ 手机字号偏小 |
✅ 85% 缩放,视觉舒适 |
| ❌ Header 高度不统一 |
✅ 桌面 76px / 手机 64px |
| ❌ 主页内容区块硬编码 |
✅ 动态读取最新 n 条 |
| ❌ 打印单列、第 1 页空白 |
✅ 双列、每页有内容 |
| ❌ Android 无法下载 PDF |
✅ 预生成 PDF 方案 |
| ❌ 私有文章可猜 URL |
✅ 服务端 404 保护 |
| ❌ 元数据文件可直接访问 |
✅ 常量保护 |
| ❌ 邮件脚本硬编码 |
✅ 从配置文件读 |
| ❌ 代码重复 |
✅ 内容加载函数统一 |
| ❌ 无设计规范 |
✅ 29 节完整规范 |
🧩
Issues & Solutions
问题与解决
| 问题 · Issue |
原因 · Cause |
解决方案 · Solution |
| 手机字号偏小 |
缩放 80% |
改成 85% |
| Header 高度不一致 |
变量用 rem 随缩放 |
用 px + 手机媒体查询 |
| 点击跳转时 Header 跳动 |
两页高度计算不同 |
统一 76px / 64px |
| 打印第 1 页空白 |
page-break-inside: avoid |
改成 auto |
| 打印单列 |
浏览器忽略 grid |
@media print 强制 grid |
| 页眉页脚用户可关 |
@page 的 margin box |
<table> + thead/tfoot |
| Android 不能下载 PDF |
系统打印受限 |
预生成 PDF + 静态链接 |
| 私有文章可猜 URL |
只在前端过滤 |
服务端 404 检查 |
| 元数据文件可访问 |
无保护 |
ALLOW_META_LOAD 常量 |
| 代码重复 |
每个文件独立实现 |
抽公共函数库 |
| 变量覆盖顺序错 |
@media 在前、:root 在后 |
调整顺序 |
|