网站架构分析报告
kaiwen.work Typecho 网站架构分析报告
创建时间:2026-04-24
用途:作为后续长期维护和建设的基础参考文档
项目路径:/Users/xuekaiwen/Documents/Github/kaiwen.work
1. 项目基本信息
| 项目 | 值 |
|---|---|
| 框架 | Typecho |
| 版本 | 1.3.0(见 var/Typecho/Common.php:171) |
| 架构模式 | Widget 组件模式 + MVC 思想 |
| 数据库类型 | SQLite(PDO_SQLite 适配器) |
| 数据库文件 | 配置于 config.inc.php,文件未入 Git(安全考虑) |
| 配置文件 | config.inc.php(未入 Git) |
2. 入口文件
| 入口 | 路径 | 作用 |
|---|---|---|
| 前台入口 | index.php | 加载配置 → 初始化 Widget → 触发 'begin' 钩子 → 路由分发 → 触发 'end' 钩子 |
| 后台入口 | admin/index.php | 后台仪表板 |
| 安装入口 | install.php | 首次部署使用 |
前台核心流程(index.php):
require config.inc.php
→ \Widget\Init::alloc()
→ \Typecho\Plugin::factory('index.php')->begin()
→ \Typecho\Router::dispatch()
→ \Typecho\Plugin::factory('index.php')->end()3. 目录职责总览
| 目录 | 性质 | 是否可改 | 说明 |
|---|---|---|---|
/var/Typecho/ | 核心框架 | ❌ 禁止修改 | Db / Router / Plugin / Widget / Http / I18n 等底层 |
/var/Widget/ | 业务 Widget | ❌ 禁止修改 | Contents / Comments / Metas / Options / Users 等业务逻辑 |
/var/Utils/ | 工具类 | ❌ 禁止修改 | Helper、HyperDown(Markdown)、AutoP、PasswordHash 等 |
/var/IXR/ | XML-RPC 库 | ❌ 禁止修改 | XML-RPC 协议实现 |
/admin/ | 后台页面 | ⚠️ 谨慎修改 | 官方后台,一般不动 |
/install/ | 安装脚本 | ⚠️ 基本不用 | 初始化完成后无需维护 |
/usr/plugins/ | 插件目录 | ✅ 主要扩展区 | 功能扩展放这里 |
/usr/themes/ | 主题目录 | ✅ 主要定制区 | 前端外观定制放这里 |
核心维护原则:所有改动只在 /usr/ 下进行;/var/ 和 /admin/ 升级时会被覆盖。
4. 核心框架(/var/Typecho/)关键类
| 类 | 文件 | 职责 |
|---|---|---|
Common | Common.php | 公用方法、版本、错误处理、自动加载 |
Widget | Widget.php | Widget 基类、工厂方法 alloc() / widget() |
Router | Router.php | URL 路由匹配与分发 |
Plugin | Plugin.php | 插件管理、钩子系统 |
Db | Db.php | 数据库抽象层 |
Request / Response | - | HTTP 请求/响应对象 |
Config | Config.php | 配置对象 |
Cookie / Date / I18n / Validate / Feed | - | 基础设施 |
数据库层支持:MySQL / PostgreSQL / SQLite,三种各有 PDO 和原生适配器。
5. 业务 Widget(/var/Widget/)关键类
- 数据基类(
/var/Widget/Base/):Contents、Comments、Metas、Options、Users - 内容相关(
/var/Widget/Contents/):Post/、Page/、Attachment/、Related/ - 元数据相关(
/var/Widget/Metas/):Category/、Tag/ - 评论相关(
/var/Widget/Comments/):Admin、Archive、Edit、Ping、Recent - 其他重要:
Archive(前台文章展示)、Options(全局选项)、User(当前用户)、Init(系统初始化)、Login/Logout/Register、Action(后台操作基类)、Upload、Backup、Stat、XmlRpc、Feed
6. 数据库表结构(前缀 typecho_)
| 表名 | 用途 |
|---|---|
contents | 文章、页面、附件(通过 type 字段区分) |
comments | 所有评论 |
metas | 分类和标签(通过 type 字段区分) |
relationships | contents 与 metas 的多对多关联 |
users | 用户账号 |
options | 系统配置、主题配置、插件配置(通过 name 前缀区分) |
fields | 自定义字段 |
SQL 定义见 install/SQLite.sql。
7. 主题系统(/usr/themes/)
当前已安装主题
| 主题 | 路径 | 特点 |
|---|---|---|
| classic-22 | usr/themes/classic-22/ | 现代化,支持浅/深/自定义色彩方案,响应式 |
| default | usr/themes/default/ | 经典传统样式,完整侧边栏配置 |
标准模板文件
theme/
├── index.php # 首页(文章列表)
├── post.php # 单篇文章
├── page.php # 独立页面
├── archive.php # 归档列表
├── search.php # 搜索结果
├── 404.php # 错误页
├── comments.php # 评论区块
├── header.php # 头部(通用)
├── footer.php # 底部(通用)
├── sidebar.php # 侧边栏(可选)
├── functions.php # 主题函数与配置
└── *.css / img/ # 静态资源主题开发要点
- 配置入口:在
functions.php中定义themeConfig(Typecho\Widget\Helper\Form $form),即可在后台"外观 > 设置外观"中看到配置项 模板写法:
- 引入模板片段:
$this->need('header.php'); - 遍历文章:
while ($this->next()) { ... } - 取全局配置:
Typecho\Widget::widget('Widget\Options')->title - 取文章字段:
$this->title、$this->content、$this->permalink、$this->date->format('Y-m-d')
- 引入模板片段:
8. 插件系统(/usr/plugins/)
当前插件
HelloWorld/(示例插件,仅含Plugin.php)
插件模板
<?php
namespace TypechoPlugin\YourPluginName;
use Typecho\Plugin\PluginInterface;
use Typecho\Widget\Helper\Form;
class Plugin implements PluginInterface
{
public static function activate() { /* 激活时执行,可注册钩子 */ }
public static function deactivate() { /* 禁用时执行 */ }
public static function config(Form $form) { /* 全局配置面板 */ }
public static function personalConfig(Form $form) { /* 个人配置面板 */ }
}钩子机制
- 注册:
\Typecho\Plugin::factory('Widget\Archive')->footer = __CLASS__ . '::methodName'; - 触发点分布在 Widget 和模板中(如
index.php中的begin/end) - 插件配置读取:
Typecho\Widget::widget('Widget\Options')->plugin('YourPluginName')->key
9. 敏感文件(未入 Git)
以下文件需要在部署时手工配置或备份:
config.inc.php(数据库连接、盐值)- SQLite 数据库文件(路径由
config.inc.php指定) usr/uploads/(用户上传的媒体文件,如果存在)
10. 后续维护规范
- 功能扩展 → 插件:在
usr/plugins/新建独立目录,不要改/var/下任何文件 外观/布局调整 → 主题:
- 小改动:直接在
classic-22或default上改 - 大改动:建议复制为新主题目录(如
kaiwen-custom/)再改,避免后续升级冲突
- 小改动:直接在
- 数据库操作:统一走
Typecho\Db和 Widget 抽象,不要在模板里写裸 SQL - 敏感信息:任何涉及密钥、密码、路径的内容不要入 Git
- 变更记录:每次维护在
.maintenance/目录追加记录文档(如02-xxx-change.md) - 升级 Typecho 核心:只需替换
/var/、/admin/、/install/三个目录 +index.php/install.php,/usr/保持不动
11. 常用 Widget 调用速查
// 全局配置
$options = Typecho\Widget::widget('Widget\Options');
echo $options->title, $options->description, $options->siteUrl;
// 当前用户
$user = Typecho\Widget::widget('Widget\User');
if ($user->hasLogin()) { echo $user->screenName; }
// 最近文章
Typecho\Widget::widget('Widget\Contents\Post\Recent')->to($posts);
while ($posts->next()) { echo $posts->title; }
// 分类树
Typecho\Widget::widget('Widget\Metas\Category\List')->listCategories();
// 插件配置
$cfg = Typecho\Widget::widget('Widget\Options')->plugin('PluginName');本文档将随项目维护同步更新。