# logr **Repository Path**: xwjsss/logr ## Basic Information - **Project Name**: logr - **Description**: Typecho logr theme - **Primary Language**: PHP - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-16 - **Last Updated**: 2026-10-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Logr 时间线 > Typecho 阅读器风格时间线主题 · v1.0.2 · 作者 Mr.xie · [主题官网](https://023.ink) ![Logr 时间线预览](screenshot.png) Logr 时间线把「代码编辑器 + RSS 阅读器」的布局搬到了博客前台:红绿灯顶栏、左侧活动栏(导航)、资源管理器式边栏(站长卡片 / 站点统计 / 最新动态),中间是一条带蛇形连线的卡片时间线。浅暗双主题、可自定义主色调,从首页卡片、文章弹窗、评论区域到移动端适配都保持同一套视觉语言。 功能覆盖:置顶文章、滚动加载 / 无限下拉、AI 摘要、微语(说说)、友链、数据统计、归档、搜索、评论验证码、访问统计、音乐播放器、后台 8 标签设置面板与一键在线更新。 --- ## 目录 1. [特性一览](#一特性一览) 2. [运行环境](#二运行环境) 3. [安装](#三安装) 4. [启用后必做:创建四个独立页面](#四启用后必做创建四个独立页面) 5. [主题设置逐项说明](#五主题设置逐项说明) 6. [功能详解](#六功能详解) 7. [备份、导入导出与在线更新](#七备份导入导出与在线更新) 8. [主题占用的数据库资源](#八主题占用的数据库资源) 9. [安全与隐私提示](#九安全与隐私提示) 10. [常见问题](#十常见问题) 11. [目录结构](#十一目录结构) --- ## 一、特性一览 **布局与视觉** - 顶栏(站名 / 图片 LOGO、站点副标题、日志与分类计数)、活动栏、可收起边栏、时间线主区、页脚五段式结构 - 浅 / 暗双主题一键切换,浏览器记忆选择;`--accent` 主色调实时生效 - 时间线蛇形连线(SVG 实时绘制)、悬停时卡片指向分类筛选条的绿色虚线 - 卡片水印、今日 NEW 徽标、置顶标记、作者头像、阅读 / 评论数、分类标签 **内容能力** - 文章置顶(文章编辑页单选,首页与分类列表生效) - 卡片摘要长度可调,AI 摘要优先展示,无摘要时回落正文截取 - 封面图:优先读自定义字段 `thumb`,其次取正文第一张图片 - 文章弹窗预览 + 分页 / 无限下拉,分类筛选条与站内搜索 - 归档页(按年—月—周三级折叠 + 标签归档双视图)、微语页、友链页、数据统计页 **互动与运营** - 算术图形验证码(登录用户免验、答案一次性)、评论区网址开关、提交后无刷新局部刷新 - 评论两级展示 + 表情兼容、最深 7 层回复 - 独立访客统计(IP + UA 签名按天去重)、阅读量趋势、标签排行、分类分布 - 网易云音乐播放器(进度 / 音量 / 三种播放模式 / 播放列表) - 设置备份恢复、JSON 导入导出、版本检测与在线更新 --- ## 二、运行环境 | 项目 | 要求 | | --- | --- | | Typecho | 1.2 及以上(命名空间版核心,依赖 `themeConfig`、`themePostFields`、`themeInit` 钩子;本文的行为描述在 1.3.0 上逐条核对过) | | PHP | 7.4 及以上(核心与主题均使用 7.4 语法,无 8.x 专属特性) | | 建议开启 | `mbstring`(摘要与截断更准确,缺失时自动降级为字节截断);`session`(评论验证码必需) | | 出站请求 | `allow_url_fopen = On`(AI 摘要走 PHP 流;音乐封面在流不可用时自动回退 cURL) | | AI 摘要 | 任一 OpenAI 兼容的 `chat/completions` 接口 | | 在线更新 | `ZipArchive` 扩展 + 主题目录可写 | | 友链列表 | 需要额外安装 **LcLinks** 插件(未安装时友链页只显示申请说明) | --- ## 三、安装 1. 将 `logr` 文件夹上传到站点 `usr/themes/` 下,得到 `usr/themes/logr/`。 2. 后台 **控制台 → 外观 → 可用主题**,找到「Logr 时间线」并 **启用**。 3. 点击 **设置外观** 进入分标签的设置面板(详见[第五节](#五主题设置逐项说明))。 4. 建议授予主题目录写权限(`755` 或对应属主),用于自动导出 `logrSetting.json` 与在线更新。 > 主题设置全部存放在数据库 `options` 表的 `theme:logr` 行里,**换主题不会丢**;`logrSetting.json` 只是它的本地镜像副本。 --- ## 四、启用后必做:创建四个独立页面 归档、微语、友链、数据统计四个页面由「自定义模板」提供。后台 **控制台 → 页面 → 新增页面**,填写标题并在 **自定义模板** 下拉中选中对应项后 **发布**: | 模板文件 | 下拉中显示为 | 建议标题 | slug 建议 | 说明 | | --- | --- | --- | --- | --- | | `archives.php` | 归档 | 归档 | `archives` | 年—月—周三级时间线 + 标签归档双视图 | | `memos.php` | 微语 | 微语 | `memos` | 说说流,登录后可在页面直接发布 | | `links.php` | 友链 | 友链 | `links` | 申请要求 + 本站信息,装了 LcLinks 才输出友链网格 | | `stats.php` | 数据统计 | 统计 | `stats` | 14 天阅读 / 访客趋势、标签排行、分类分布 | 要点: - **必须发布**,草稿与私密页在边栏与导航里找不到。 - 页面 **正文会作为顶部引言显示**,留空则不显示;统计页正文不参与渲染。 - Typecho 用文件头部注释的 `@package custom` 识别模板,下拉里的文字取注释首行(所以四个文件的 `@package` / 首行请勿改动)。 - 活动栏会自动追加这四个页面,**通常不需要手动配导航**;`nav_list` 的写法见[导航](#导航与图标库)。 - 兼容旧入口:访问 `/?view=stats` 会自动跳转到统计页 permalink。 --- ## 五、主题设置逐项说明 设置面板共 **8 个功能标签 + 1 个「主题说明」**(后者放主题信息、备份恢复、版本检测)。以下按标签列出全部字段。 ### 5.1 头部与边栏 | 字段 | 控件 | 默认值 | 说明 | | --- | --- | --- | --- | | `logotype` | 单选 | `1` 文字 | `1` 顶栏显示站名,`0` 显示 `logoimg` 图片 | | `logoimg` | 文本 | 主题内 `images/logo.png` | 仅在图片模式使用,建议 96×32px | | `favicon` | 文本 | 主题内 `images/favicon.png` | 浏览器标签图标 | | `master_tags` | 文本 | 空 | 站长标签,用 `,` `,` `、` 分隔,**最多取前 4 个** | | `master_bio` | 文本 | 空 | 站长一句话介绍,界面按 15 字截断显示 | | `appearance_color` | 文本 + 取色器 | `#10b981` | 主题色,自动生成 `--accent` / `--accent-soft` | | `default_theme` | 单选 | `light` | 首次访问的默认配色(用户仍可手动切换并记忆) | | `show_wires` | 单选 | `1` | 时间线蛇形连线 | | `show_search` | 单选 | `1` | 列表页搜索框 | | `show_hover_wire` | 单选 | `1` | 悬停卡片时指向分类条的虚线 | ### 5.2 文章与列表 | 字段 | 控件 | 默认值 | 说明 | | --- | --- | --- | --- | | `show_today_badge` | 单选 | `1` | 当天文章显示「今日 NEW」徽标 | | `excerpt_len` | 文本 | `120` | 卡片摘要长度,建议 40–300(不强制校验) | | `is_show_cover` | 单选 | `0` | **详情页**是否显示封面图(列表卡片始终显示) | | `is_allow_comment_url` | 单选 | `0` | 评论是否允许填写个人网址 | | `comment_captcha_enable` | 单选 | `1` | 算术验证码,登录用户自动免验 | | `card_readmore_target` | 单选 | `_self` | 弹窗内「阅读全文」的打开方式 | | `modal_width` | 文本 | `720` | 弹窗最大宽度,自动收敛到 560–960 px | | `modal_height` | 文本 | `88` | 弹窗最大高度,自动收敛到 60–92(vh) | ### 5.3 AI 设置 | 字段 | 控件 | 默认值 | 说明 | | --- | --- | --- | --- | | `ai_summary_enable` | 单选 | `0` | **总开关,默认关闭** | | `ai_summary_cache` | 单选 | `1` | 生成结果按文章缓存,重复请求直接复用 | | `ai_api_base` | 文本 | `https://api.openai.com/v1` | 可填根地址(自动补 `/chat/completions`)或完整地址 | | `ai_api_key` | 密码框 | 空 | 明文保存、界面不回显,见[安全提示](#九安全与隐私提示) | | `ai_model` | 文本 | `gpt-4o-mini` | 如 `deepseek-chat`、`qwen-plus`、`THUDM/GLM-4-32B-0414` | | `ai_summary_prompt` | 多行文本 | 内置中文指令 | 支持 `{title}`、`{content}`;正文自动截取前 3000 字;缺少 `{content}` 时主题会自动追加标题与正文 | | `ai_clear_cache` | 按钮行 | — | 「清空 AI 摘要缓存」入口(需编辑及以上权限) | ### 5.4 音乐管理 | 字段 | 控件 | 默认值 | 说明 | | --- | --- | --- | --- | | `music_enable` | 复选框 | 勾选 | 右下角音乐按钮:勾选显示、取消勾选隐藏(复选框保存后值为数组,主题按「数组非空」判定开启) | | `music_playlist` | 多行文本 | 内置 30 首示例 | 每行 `歌曲名\|网易云歌曲ID`,可追加第三段手动指定封面:`歌名\|ID\|https://.../cover.jpg` | 歌曲 ID 就是网易云歌曲链接里 `/song?id=` 后面的数字。播放列表为空时按钮与面板都不渲染,所以 **清空列表同样等于关闭播放器**。 ### 5.5 导航设置 单字段 `nav_list`,每行一条,支持两种写法: ``` 首页|icon-home 归档|icon-book 友链|https://example.com/friends|icon-friends ``` - `名称|图标`:链接由主题按名称自动解析(见下)。 - `名称|链接|图标`:第二段含 `://` 或以 `/` 开头时视为链接,否则视为图标;链接以 `http(s)://` 开头的绝对地址会在新标签打开。 - 自动解析顺序:首页/主页 → 站点地址 → 模板名匹配(归档 / 友链 / 微语 / 统计)→ 按标题或 slug 匹配的独立页面 → 按名称或 slug 匹配的分类 → 回落首页。 - 未写进 `nav_list` 的归档 / 友链 / 微语 / 统计页面会被 **自动追加**(按 URL 去重)。 - 图标代码不在内置库中时回退为 `icon-nav`。 - 该标签页下方是内置图标库,点击任意图标即可复制 `icon-xxx`。 ### 5.6 友链管理(`links_` 前缀) `links_subtitle` 副标题 · `links_intro` 引言 · `links_requirements_title` 申请要求标题 · `links_badge` 警示徽章文字 · `links_req_title` / `links_req_content` 左卡标题与内容 · `links_info_title` / `links_info_content` 右卡标题与内容。 `links_req_content` 的解析规则:以 `1.` `2、` 这类编号开头的行成为条目小标题,紧随其后的行是该条目的正文。 ``` 1. 建站时间不低于一年 我不确定你是否是一时兴起,还是长远打算。 2. 半年以上未更新 不确定你是否没时间呢,还是准备随时跑路。 ``` `links_info_content` 建议写成 `键=值` 每行一条(名称 / 链接 / 头像 / 描述 / RSS),这只是给申请人看的纯文本。 ### 5.7 关于设置(`about_` 前缀) `about_title` 弹窗标题,`about_s1_title` / `about_s1_content` … `about_s4_title` / `about_s4_content` 四个栏目。某栏目标题与内容都留空则跳过该栏目;四个栏目全空时,弹窗正文改为显示站点副标题。内容里的换行会保留(`nl2br`),不解析 HTML。 ### 5.8 底部设置 | 字段 | 说明 | | --- | --- | | `beian_icp` | ICP 备案号,自动链接到 beian.miit.gov.cn | | `beian_police` | 公安备案号,自动带上号码链接到全国互联网安全管理服务平台查询页 | | `footer_info` | 附加信息,允许 `` 与 `
` | 页脚固定输出 `© 年份 站名 · Powered by Typecho · Theme Logr时间线`。 --- ## 六、功能详解 ### 置顶文章 文章编辑页底部有「文章置顶」单选(`不置顶` / `置顶`)。勾选置顶后,主题在 **首页与分类列表** 把该文章排到最前,卡片右上出现「置顶」角标。实现方式是给 `table.fields` 里 `name = logr_top` 的记录同时写 `int_value = 1`,查询时 LEFT JOIN 后按 `int_value DESC, created DESC` 排序;取消置顶会 **删除** 该字段记录,避免排序残留。归档、搜索、标签等列表不应用置顶排序。 ### 封面图 优先级:自定义字段 `thumb` → 正文第一张图片(HTML `` 或 Markdown `![]()`)。 `thumb` 需在 **文章编辑页 → 自定义字段** 手动添加:名称 `thumb`,类型字符串,值为图片完整 URL。列表卡片的封面始终按此规则显示;详情页是否显示由 `is_show_cover` 控制(默认关闭)。 ### AI 摘要 - 后端只使用 PHP 流请求(无 cURL 依赖),`temperature 0.3`、`max_tokens 800`、超时 120 秒,开启 TLS 证书校验。 - 前端 `IntersectionObserver` 逐张懒生成(同一时刻只发一个请求,间隔约 2.5 秒),请求地址 `/?logr_ai=gen&gid=文章ID&_=`,令牌取自 `` 里的 `meta[name=csrf-token]` 或 `window.CSRF_TOKEN`。 - 结果写入 `options` 表 `logr_ai` 行的 `sum_`;关闭缓存则每次重新生成。 - 生成失败会记录 10 分钟冷却,避免反复打接口;全局限流为 **开启缓存 2 秒 / 关闭缓存 10 秒**,被限流时返回「生成中,请稍后再试」,前端会自动重试。 - 「清空 AI 摘要缓存」按钮只接受编辑及以上权限。 - **注意**:`gen` 接口不要求登录(依赖令牌 + 限流防滥用),但任何访客浏览首页都可能消耗你的 API 额度,不用时请保持 `ai_summary_enable = 0`。 ### 微语(说说) 数据表 `{前缀}logr_twitter`(`id / content / author / date / ip / top`)在首次读写时自动 `CREATE TABLE IF NOT EXISTS`,无需手工建表。 - 发布框仅对 **登录用户** 显示;内容 ≤ 500 字;图片为外链,**仅接受 `.png`**,最多 9 张,并拦截 `localhost`、私有网段等内网地址。 - 非编辑权限用户限速:同一用户 30 秒 / 条,同一 IP 60 秒 / 条。 - 删除:编辑及以上权限,或本人发布的条目。 - 每页 12 条,`?page=N` 翻页;表里的 `top` 字段为置顶预留,当前版本界面未提供置顶入口,排序按时间倒序。 - 正文按白名单清洗(保留段落、链接、粗斜体、代码、引用、列表、标题等),剥掉 `on*` 事件、`style`、`id` 与 `javascript:` 链接。 ### 友链与 LcLinks `links.php` 检测 LcLinks 插件,存在则捕获其 `\TypechoPlugin\LcLinks\links('mixed')` 的输出作为友链网格;**未安装该插件时,友链列表区域不渲染**,页面只保留「申请要求」和「本站信息」两张说明卡。插件抛错时错误信息追加写入主题目录 `_lc_err.log`(排障用,可删除)。 ### 音乐播放器 播放列表解析要求第二段必须是纯数字歌曲 ID(不合法的行直接忽略)。封面由前端按需请求 `/?logr_music=cover&id=`,服务端抓取网易云 `api/song/detail`(流优先、cURL 兜底),可在第三段手动指定封面 URL 覆盖。播放本身依赖网易云的可播性,版权受限歌曲可能无法播放。 ### 统计与访问数据 - **独立访客**:按天把 `md5(IP|UA)` 前 12 位存入 `options` 表 `logr_uv`,同日去重、每天上限 5000 个签名;仅保留最近 60 天,清理在有人访问统计页时触发。 - **阅读量**:沿用 Typecho 的 `contents.views`,访客首次打开某篇文章才 +1(已登录用户不计数,靠 10 年期 Cookie `__logr_post_views` 记录最近 200 篇)。 - **统计页**:近 14 天「文章阅读量 + 独立访客」双列 SVG 柱状图、标签 Top 15、一级分类分布。 - 边栏统计卡与最新动态(最新文章 / 最新评论)为请求内静态缓存,同一次请求内数据一致。 ### 评论 算术验证码在服务端生成并写入会话,提交时校验并立即作废(刷新页面会换题)。验证码问题直接渲染在页面上,点「换一题」由前端替换,不额外发请求。评论提交走 Typecho 原生 `Widget_Feedback`,成功后前端请求 `?logr_comments=1` 只取评论列表片段,实现无刷新更新。展示为两级结构:根评论下把所有子孙评论扁平展开,回复按钮在第 7 层后不再出现;带个人网址的评论链接加 `rel="nofollow"`。 ### 分页与无限下拉 分页沿用 Typecho 原生 `*_page` 路由(首页 / 分类 / 标签 / 搜索 / 日期均可翻页),页码窗口为当前页 ±3。无限下拉不是独立接口,而是前端读取分页块里 `title="Next Page"` 的链接并合并卡片——如果你改动了 `logr_pager_html()` 或深度定制了分页样式,请保留该 `title` 属性,否则下拉加载会失效。 ### 导航与图标库 内置约 38 个 SVG 图标(`home`、`book`、`link`、`memos`、`stats`、`search`、`eye`、`github`、`wechat`、`qq` 等),设置页「导航设置」标签内可点击复制代码;`logr_icon_svg()` 同时接受 `icon-xxx` 与 `iconfont icon-xxx` 写法。 ### 主题色与暗色模式 `` 决定初始配色,切换按钮把选择存进浏览器本地存储;主色通过 `:root { --accent }` 注入,连线、按钮、徽标颜色随其自动派生(含 12% / 18% 透明度变体)。 --- ## 七、备份、导入导出与在线更新 设置页「主题说明」标签提供三个面板: **备份选项** | 操作 | 行为 | | --- | --- | | 备份 | 把当前设置复制到 `options` 表 `theme:logrbf` 行,并刷新 `logrSetting.json` | | 恢复 | 从 `theme:logrbf` 合并回当前设置(合并而非整体覆盖) | | 删除备份 | 删除 `theme:logrbf` | | 导出 JSON | 写出 `logrSetting.json` | | 导入 JSON | 读取 `logrSetting.json` 覆盖当前设置 | 保存设置时主题按 **数组增量合并** 写入 `theme:logr`,因此某次保存里为空的字段(典型如 API Key)不会被抹掉。 **版本检测**:读取 Gitee 仓库 `https://gitee.com/xwjsss/logr-theme` 的 `master` 分支里 `index.php` 头部 `@version`(结果缓存到主题根目录 `logr-update-check.json`,成功缓存 6 小时、失败只缓存 30 分钟),用 `version_compare` 与本地版本比较。版本号以 `index.php` 头部的 `@version` 为准——`logr_theme_version()` 读它,用于「主题信息」显示、版本比较与更新请求的 UA。另有一处独立常量 `LOGR_TP_VERSION`(`functions.php` 开头)只参与 CSS/JS 的 `?v=` 缓存串,不随 `@version` 变化,两者需一并对齐。 **在线更新**(对齐 LcCitrus 的升级机制):先整目录备份到 `backup/theme-*.zip` → 下载仓库 `master` 分支压缩包并解析(主题文件在仓库根目录,压缩包包一层 `<仓库名>-<分支名>/`,只取该顶层目录下的条目,路径穿越条目直接拒绝)→ 校验包内 `index.php` 版本与仓库声明一致 → 解压到 `.upgrade-stage-*` 临时目录确认文件齐全 → 再统一覆盖回主题目录 → 覆盖后重新读取 `index.php` 校验版本。任一步失败自动用升级前的备份整目录回滚;成功升级的备份只留最近 3 份、超过 7 天自动清理。需要 `ZipArchive` 扩展与目录写权限;`logrSetting.json`(不在仓库里)与 `backup/`、`logr-update-check.json` 等运行时产物不会被触碰,即使误提交进仓库也会跳过覆盖。 **手动更新**同样安全:直接覆盖主题目录即可,设置、置顶、封面都存数据库,不受影响。 --- ## 八、主题占用的数据库资源 主题不修改 Typecho 任何表结构,新增内容如下。 | 位置 | 名称 | 用途 | | --- | --- | --- | | `options.name` | `theme:logr` | Typecho 原生主题设置(JSON) | | `options.name` | `theme:logrbf` | 设置备份副本 | | `options.name` | `logr_uv` | 按天独立访客签名 | | `options.name` | `logr_ai` | AI 摘要缓存(`sum_*`)、失败冷却(`fail_*`)、最近调用时间 | | `options.name` | `logr_wy_rate` | 微语发布频率记录 | | 新建表 | `{前缀}logr_twitter` | 微语内容,首次使用自动创建 | | `fields.name` | `logr_top` | 文章置顶标记(`str_value='1'` 且 `int_value=1`) | | `fields.name` | `thumb` | 文章封面 URL(主题只读,由用户手动添加) | | 会话 | `$_SESSION['logr_captcha']` | 验证码答案 | | Cookie | `__logr_post_views` | 已计数的文章 ID 列表 | 卸载主题时,如需彻底清理,可删除上述 `options` 行、`logr_twitter` 表以及两个自定义字段记录。 --- ## 九、安全与隐私提示 - **API Key 是明文存储的**:`ai_api_key` 会进入数据库 `theme:logr`,并镜像写入主题目录的 `logrSetting.json`。`logrSetting.json` 已在主题 `.gitignore` 中——请勿把它提交到仓库或随主题包分发;给 Key 设置消费上限、域名白名单,并定期轮换。 - `/?logr_ai=gen` 与 `/?logr_music=cover` 是公开接口(前者带令牌与全局限流,后者无鉴权,只代理网易云歌曲信息)。若不希望访客消耗 AI 额度,关闭 `ai_summary_enable`。 - 在线更新会用远端 zip 直接覆盖主题目录。请使用可信源或自备镜像,重要更新前先在「主题说明」里做一次备份。 - 微语图片地址会经过内网地址与危险协议拦截,`links_info_content`、`footer_info` 属于站长自有内容,请勿填入不可信 HTML。 - 主题会写入统计用途的 Cookie(`__logr_post_views`)与按天访客签名。如你的站点需要隐私合规声明,请把这两项纳入说明。 - 前台输出统一走 `logr_e()` 转义;自定义改造时请保持这一约定,不要直接 `echo` 用户输入。 --- ## 十、常见问题 **导航栏里没有归档 / 友链 / 微语 / 统计?** 对应页面必须处于「已发布」状态且已选中自定义模板。也可以直接在 `nav_list` 里用 `名称|链接|图标` 手写。 **AI 摘要一直是「生成中」或干脆不出现?** 依次检查:`ai_summary_enable` 是否开启 → `ai_api_key` / `ai_model` / `ai_api_base` 是否填对 → 服务器 `allow_url_fopen` 是否开启、能否访问该接口 → 该文章是否触发失败冷却(10 分钟)或全局限流(2 / 10 秒)。接口本身要求返回 `choices[0].message.content`。 **卡片或详情页看不到封面?** 详情页封面默认关闭(`is_show_cover = 0`);`thumb` 字段名要完全小写一致、类型为字符串;正文首图规则只认 `` 与 Markdown 图片语法。 **友链页空空如也?** 友链列表来自 LcLinks 插件,未安装 / 未启用时只有两张说明卡。请先安装插件并在其面板里录入友链。 **音乐按钮不见了?** 两种原因:设置里取消了「启用音乐播放器」,或播放列表为空(列表为空时按钮与面板都不渲染)。旧版本里勾选该复选框反而会让按钮消失——复选框保存后是数组,而模板用 `=== '1'` 比较;现在按「数组非空即开启」判定,勾上与取消都能正确生效。 **评论总提示验证码错误?** PHP 会话不可写会导致校验失败(检查 `session.save_path` 权限)。验证码是一次性的,刷新页面后需要按新题目重新作答;登录用户不需要验证码。 **翻页能点但没有无限下拉 / 下拉只加载一次?** 无限下拉依赖 `title="Next Page"` 的链接;若你定制过分页 HTML 或改了路由(`*_page`),请一并保留。 **点了在线更新但提示失败?** 缺 `ZipArchive` 或主题目录不可写是最常见原因;失败时升级包临时文件会留在 `backup/.upgrade-*.zip` 与 `.upgrade-stage-*` 目录,可手动删除后改用覆盖式手动更新;升级前的整目录备份 `backup/theme-*.zip` 保留着,可用来回滚。 **统计页数字看着不动?** 统计在单次请求内是缓存的;访客计数按天去重,同一人同一天只算一次。阅读量只统计未登录访客且每人每篇一次。 --- ## 十一、目录结构 ``` logr/ ├── index.php 首页与列表(头部注释是版本号与主题简介的权威来源) ├── RELEASE.md 维护者的发布检查清单(Git 提交 + zip 分发包两条链路) ├── header.php 顶栏 / 活动栏 / 边栏 / 与主题色注入 ├── footer.php 页脚、浮动按钮、音乐面板、关于与 RSS 弹窗、文章弹窗 ├── post.php 文章详情 + 评论区 + 无刷新评论片段接口 ├── page.php 普通独立页面 ├── archives.php 模板「归档」 ├── memos.php 模板「微语」 ├── links.php 模板「友链」(依赖 LcLinks 插件) ├── stats.php 模板「数据统计」 ├── 404.php 错误页 ├── functions.php 设置面板、钩子注册、全部功能实现 ├── logrSetting.json 设置自动导出的本地镜像(已 gitignore,勿分发) ├── screenshot.png 主题预览图 ├── css/style.css 全部样式 ├── js/app.js 连线绘制、弹窗、无限下拉、AI 队列、播放器、评论区 └── images/ logo、favicon 等静态图 ``` --- 主题信息、更新检测与备份恢复都在 **控制台 → 外观 → 设置外观 → 主题说明** 标签内。问题反馈与最新版本:[https://023.ink](https://023.ink)。 参与维护时,改动合并后要按 [RELEASE.md](RELEASE.md) 的检查清单发布:Git 仓库与站点根目录的 `logr-typecho.zip` 分发包是两条独立链路,只提交不重打包会让用户下到的仍是旧版本。 本主题包内未附带独立 LICENSE 文件;二次分发或商用前请先与作者确认授权。