# LanternPress **Repository Path**: muzinext/LanternPress ## Basic Information - **Project Name**: LanternPress - **Description**: 一款经典报纸复古风 Typecho 主题,内置文章点赞、阅读量统计、目录树、模态框搜索、跟随系统主题色、归档 / 友链 / 标签云三大独立页面模板,支持瀑布流加载、图片灯箱、代码高亮复制。性能上实现懒加载、内容缓存、数据库优化;安全上配备 CSP、HSTS、XSS 防护与接口速率限制。适配 PHP 8 与 Typecho 1.3.0+,全站响应式布局。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: https://muzihome.com/archives/271.html - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-06 - **Last Updated**: 2026-10-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # LanternPress 主题 一款经典报纸复古风 Typecho 主题,适配 PHP 8 与 MySQL 8。 > 作者:木子小鱼 > 项目地址:https://github.com/muzihome/LanternPress > 当前版本:v2.4.0 > 更新日志:[LOG.md](./LOG.md) --- ## 目录 - [主题介绍](#主题介绍) - [功能特性](#功能特性) - [环境要求](#环境要求) - [安装方法](#安装方法) - [主题配置](#主题配置) - [文章自定义字段](#文章自定义字段) - [独立页面模板](#独立页面模板) - [常见问题](#常见问题) - [更新日志](#更新日志) - [开源许可](#开源许可) --- ## 主题介绍 **LanternPress** 是一款经典报纸复古风 Typecho 主题,基于 LanternTown 二次开发。内置文章点赞、阅读量统计、目录树、模态框搜索、跟随系统主题色、归档 / 友链 / 标签云三大独立页面模板,支持瀑布流加载、图片灯箱、代码高亮复制。性能上实现懒加载、内容缓存、数据库优化;安全上配备 CSP、HSTS、XSS 防护与接口速率限制。适配 PHP 8 与 Typecho 1.3.0+,全站响应式布局。 **版本对比:** | 项 | 原始 LanternTown v1.0.0 | 当前 LanternPress v2.4.0 | |---|---|---| | 文件数 | 30 | 32 | | 配置项 | 12 | 30 | | 独立页面模板 | 0 | 3 | | 文章交互功能 | 基础 | 点赞、阅读量、目录树、灯箱、代码复制 | | 无障碍 | 无 | 跳转链接、键盘焦点轮廓、ARIA 语义(WCAG 2.1 AA 对比度) | | PWA | 无 | Web App Manifest、SVG 主题图标 | --- ## 功能特性 ### 视觉与主题 - 经典报纸复古风格设计,5 种主题色可选(复古黄 / 纯白色 / 灰白色 / 暗夜黑 / 跟随系统) - 「跟随系统」模式自动根据浏览器/系统深色偏好切换明暗主题 - 首页图片支持灰白/彩色两种显示模式 - 响应式布局,适配桌面、平板、手机 - 移动端导航菜单样式统一,搜索按钮与菜单项风格一致 ### 文章功能 - **阅读量统计**:Cookie 防刷,24 小时内同一文章只计一次 - **点赞功能**:AJAX 无刷新,Cookie 防重复(1 年内不可重复点赞),IP 速率限制防刷 - **文章目录树**:可按文章单独开启/关闭,移动端(≤767px)不加载目录树模块,避免小屏布局错乱 - **图片灯箱**:原生 JS 实现,点击放大查看,支持分组画廊循环、键盘左右切换与缩放,已在链接内的图片不重复包裹 - **代码高亮**:Prism.js 实现,支持行号显示、一键复制、语言标签 - **段首缩进**:文章正文段首自动缩进 2 个字符 - **图片懒加载**:原生 `loading="lazy"` + IntersectionObserver 双重保障 - **上下篇导航**:复合条件排序,避免时间戳相同时漏篇 - **文章页增强**:版权声明、作者简介、打赏二维码、社交媒体链接、阅读时长估算、字数统计 - **内容处理缓存**:文章内容处理结果数据库缓存,配置变更自动失效,长文章性能提升明显 ### 首页功能 - **推荐文章轮播**:原生 JS 实现(自动播放、触摸滑动、循环切换),支持自定义推荐文章 ID - **最新文章列表**:支持缩略图、摘要、阅读量、点赞数 - **两种翻页模式**:页码翻页 / 瀑布流加载更多(AJAX 无刷新,15 秒超时保护) - **自定义导航菜单**:支持 `名称|URL` 格式,留空自动显示独立页面 - **模态框搜索**:点击「搜索」居中弹出,输入框与按钮主题色统一 ### 评论功能 - **AJAX 无刷新提交**:事件委托模式,DOM 替换后无需重新绑定,避免内存泄漏 - **头像镜像代理**:支持 Gravatar 及自定义镜像地址,解决国内访问慢的问题 - **嵌套评论**:支持多级嵌套回复 - **表单智能填充**:autocomplete 属性,浏览器自动填充姓名/邮箱/网址 - **XSS 防护**:评论内容统一 HTML 转义,防止存储型 XSS ### 独立页面模板 - **归档页**:按年份/月份归档所有文章,带文章数量统计,数据自动缓存 - **友链页**:展示友情链接,支持 Markdown 列表格式 - **标签云**:展示所有文章标签,按使用频次显示不同大小 ### 性能优化 - **图片懒加载**:IntersectionObserver 单例实现,避免重复创建 observer 导致内存泄漏 - **资源预加载**:preload / preconnect,加速关键资源加载 - **数据缓存**:归档页文件缓存,文章发布时自动清除 - **数据库优化**:字段操作请求内静态缓存、单条 SQL upsert、推荐文章批量查询 - **原子递增**:阅读量/点赞使用 SQL 原子递增(`INSERT ... ON DUPLICATE KEY UPDATE int_value = int_value + 1`),避免高并发竞态条件 - **AJAX 片段请求**:瀑布流加载更多只请求文章列表片段,减少整页流量 - **图标缓存**:SVG 数组静态缓存,避免重复构建 - **请求超时**:fetch 请求 15 秒 AbortController 超时控制 - **内容缓存**:文章内容处理结果文件缓存(`cache/content/{cid}.php`),结构版本化失效,不再占用数据库 fields 表 - **按需加载**:Prism 代码高亮仅在正文含代码块/围栏时加载,无代码文章零开销 - **首屏优化**:首屏首张卡片缩略图即时渲染、正文首图 `fetchpriority="high"`,改善 LCP ### 安全加固 - **安全响应头**:CSP / X-Frame-Options / X-Content-Type-Options / Referrer-Policy - **HSTS**:HTTPS 站点自动启用 Strict-Transport-Security - **速率限制**:点赞接口 IP 速率限制(10 秒内最多 5 次),flock 文件锁避免并发竞态 - **XSS 防护**:全局 HTML 输出转义 - **URL 校验**:防止 javascript: / data: 协议注入 - **目录保护**:缓存目录 `.htaccess` 保护,防止直接访问 - **可信代理**:IP 获取支持可信代理白名单(`LT_TRUSTED_PROXY_IPS`),防止客户端伪造 IP 绕过速率限制 ### 其他特性 - **全站国际化**:`_t()` / `_e()` 支持,便于多语言翻译 - **自定义 CSS/JS**:后台直接填写,无需修改主题文件 - **统计代码注入**:支持百度统计、Google Analytics 等 - **双备案显示**:ICP 备案号 + 公安备案号(自动链接至 beian.mps.gov.cn) - **返回顶部**:平滑滚动按钮 - **阅读进度条**:文章页顶部显示阅读进度 - **移动端优化**:菜单点击链接后自动关闭、目录树浮动按钮、搜索模态框 --- ## 环境要求 | 项目 | 最低版本 | 推荐版本 | |---|---|---| | Typecho | 1.2.0 | 1.3.0 | | PHP | 8.0 | 8.2 / 8.3 / 8.4 | | MySQL | 5.7 | 8.0 | | 浏览器 | - | Chrome / Edge / Firefox / Safari 最新版 | > 本主题已在 **PHP 8.2 + Typecho 1.3.0 + MySQL 8** 环境下充分测试。 --- ## 安装方法 ### 方法一:直接上传(推荐) 1. 下载主题压缩包 2. 解压后将 `LanternPress` 文件夹上传到 Typecho 主题目录 `usr/themes/` 3. 登录 Typecho 后台 → 外观 → 启用「LanternPress」主题 4. 点击「设置外观」进行主题配置 ### 方法二:Git 克隆 ```bash cd /path/to/usr/themes/ git clone https://github.com/muzihome/LanternPress.git ``` > 注意:源码仓库(Git)内的 `assets/css/` 为可读的未压缩版(`lantern.css` / `iconfont.css`),而模板引用的是压缩版文件名(`*.min.css`)。**Git 克隆后需先在本机执行构建**再部署,否则 CSS 无法加载: > ```bash > php .build/deploy-sync.php # 生成压缩 CSS/JS 并同步到部署目录 > ``` > 发布压缩包与测试站均使用构建产物,下载压缩包直接上传无需此步骤。 ### 目录权限 确保缓存目录可写(归档缓存、点赞限流、文章内容文件缓存均写入此目录,`cache/content/` 会自动创建): ```bash chmod 755 usr/themes/LanternPress/cache ``` #### Web 服务器防护 `cache/` 下均为 PHP 运行时产物(含 `` 前缀),Apache 已由内置 `.htaccess` 拒绝直接访问;**Nginx 不会读取 `.htaccess`**,必须在站点配置中显式拒绝: ```nginx location ^~ /usr/themes/LanternPress/cache/ { deny all; return 403; } ``` 建议同时为带版本号参数的静态资源开启长缓存(主题已通过 `?v=` 版本号解决更新失效问题): ```nginx location ~* ^/usr/themes/LanternPress/assets/ { expires 30d; add_header Cache-Control "public, immutable"; } ``` --- ## 主题配置 登录后台 → 外观 → 设置外观,可配置以下 30 个选项: ### 基础设置 | 配置项 | 说明 | |---|---| | 站点 LOGO 地址 | 填写图片 URL,在网站标题处显示 LOGO | | 海报 LOGO 地址 | 生成文章海报时使用的站点 LOGO;留空自动选用导航栏 LOGO / 站点 LOGO / JSON-LD LOGO | | favicon 地址 | 网站图标地址 | | 自定义导航菜单 | 每行一个,格式:`名称\|URL`,留空自动显示所有独立页面 | | 首页推荐阅读 | 推荐文章 ID,用 `\|\|` 分隔,如:`3\|\|4` | | 首页文章图片 | 每行一张图片 URL,按文章 ID 稳定分配 | | 首页图片是否默认灰白显示 | 灰白 / 彩色 | ### 显示设置 | 配置项 | 说明 | |---|---| | 翻页模式 | 页码翻页模式 / 加载更多(瀑布流 AJAX) | | 主题色 | 复古黄 / 纯白色 / 灰白色 / 暗夜黑 / 跟随系统 | | 文章页布局 | 右侧边栏(默认)/ 左侧边栏 / 无侧边栏;移动端(≤1150px)自动转单列 | | 长文折叠 | 开启后正文高度超过「折叠阈值」时折叠显示,点击「阅读剩余 X%」展开;仅影响前端显示,不影响 SEO | | 折叠阈值(px) | 正文实际高度超过此值才触发折叠,默认 2000 | | 折叠显示高度(px) | 折叠后保留的正文高度,默认 1500;移动端自动按视口折算 | | 最小剩余比例(%) | 折叠后剩余内容占比低于此值时不折叠,默认 20 | | 文章页侧边栏模块 | 多选:文章目录 / 搜索框 / 微言 / 广告位 / 分类目录 / 最新文章 / 热门文章 / 最新评论 / 标签云 / 站点信息;未配置时默认全部显示 | | 侧边栏微言 | 一行一条,格式:日期\|内容(如:09-05\|把复杂的事情做简单);留空隐藏该模块 | | 侧边栏广告位 | 自定义 HTML/文本,展示在文章页侧边栏;留空隐藏(建议尺寸 360×250) | | 文章底部广告位 | 自定义 HTML/文本,展示在文章正文底部(工具栏与上/下一篇导航之间);留空隐藏 | | 版权声明 | 在文章结尾显示版权声明 | | 作者简介 | 在文章结尾显示作者简介 | | 一句话自我介绍 | 展示在文章页作者介绍处 | | 打赏收款二维码 | 二维码图片地址,一行一个,最多两个 | | 社交媒体链接 | 格式:`名称:url:链接` 或 `名称:qr:二维码地址` | | 自定义页脚文案 | 留空显示默认版权信息,填写后替换页脚第一行 | ### 备案设置 | 配置项 | 说明 | |---|---| | 备案号 | ICP 备案号,如:`桂ICP备XXXXXXXX号` | | 公安备案号 | 公安备案号,自动链接至 beian.mps.gov.cn | ### 高级设置 | 配置项 | 说明 | |---|---| | 自定义 CSS | 原样输出到 `