状态:草案,供维护者评审。日期:2026-10-16。 证据基础(下文用缩写引用):
- LI =
/tmp/typecho-docs-research/legacy-inventory.md(旧 DokuWiki 站盘点;§4 为 KEEP/REWRITE/DROP 判定,§5 为旧站缺口,§6 为用户真实问题)- PS =
/tmp/typecho-docs-research/product-surface.md(Typecho 1.3.0 产品面,代码修订v1.3.0-10-g56f4c6f)- IA =
/tmp/typecho-docs-research/ia-benchmark.md(12 个同类站点对标 + Docusaurus i18n 机制)- DU =
/tmp/typecho-docs-research/docusaurus-upgrade.md(Docusaurus 3.10.2,§5 为在 3.10.2 上重新验证的 i18n 行为)- 现有 = 本仓库
docs/中已有页面(main @a8230c2)
站点用途:Typecho 1.3 的官方文档,中文为主、英文同步,覆盖“安装运维 → 日常使用 → 主题开发 → 插件开发 → 核心开发”四层,取代 2009–2023 年的 DokuWiki 旧站。旧站只作为主题清单,正文全部按 1.3 代码重写;仅 LI §4 判定为 KEEP 且确认 1.3 仍正确的 16 页可沿用其内容要点。
| 受众 (Audience) | 代号 | 典型任务 | 主要入口 |
|---|---|---|---|
| 站长 / 写作者 (Site owner) | U | 写文章、管理页面、改个人设置 | guideSidebar · 撰写与管理 |
| 管理员 / 运维 (Admin) | A | 安装、升级、伪静态、HTTPS、备份、安全 | guideSidebar · 快速开始 / 部署与运维 |
| 主题开发者 (Theme dev) | TD | 写模板、主题设置、自定义字段 | devSidebar · 主题开发 + 参考 |
| 插件开发者 (Plugin dev) | PD | 钩子、配置面板、路由、数据库 | devSidebar · 插件开发 + 参考 |
| 核心开发者 (Core dev) | CD | 理解架构、提交 PR、写升级脚本 | devSidebar · 核心开发 / 参与贡献 |
本站明确不是:
- 第三方插件/主题的使用手册或目录(旧站 42 个第三方插件页全部 DROP,LI §4);
- 自动生成的完整 PHP API 文档(IA §4.4);
- XML-RPC/MetaWeblog 协议规范(只写后台开关与客户端接入,IA §4.4);
- 多版本文档:只写 1.3;1.3.0 之后 master 上未发布的改动(PS §6.3,如多文件上传 5e36a91)不写成功能;
- 社区论坛、新闻或博客(
blog: false)。
| 项 | 决定 | 依据 |
|---|---|---|
| 站点 / 插件实例 | 一个站点、一个 docs 插件实例、routeBasePath: '/' |
用户决定;IA §4.1 |
| 语言 | defaultLocale: 'zh-Hans' 在 /;en 在 /en/;locales: ['zh-Hans','en'],localeConfigs 设 label / htmlLang |
用户决定;IA §3.1;DU §5.5(i18n/en/ 目录已存在,translate 自动推断为 true,不可删除该目录) |
| 版本 | 无 versions.json;versions: { current: { label: '1.3', banner: 'none' } };i18n/en/.../current.json 的 version.label 由 write-translations 重新生成后改为 1.3 |
IA §3.6;DU §5.4 |
| 侧边栏 | guideSidebar(使用指南)、devSidebar(开发文档),在 sidebars.js 中显式声明,见 §2.3 |
IA §4.1 |
| 首页 | docs/intro.md 保持 slug: /,作为 guideSidebar 第一项 |
现有 docs/intro.md;DU §5.1 |
| 链接检查 | 保持 onBrokenLinks: 'throw';markdown.hooks.onBrokenMarkdownLinks 由 'warn' 改为 'throw';设 onBrokenAnchors: 'throw'(3.10.2 仍为顶层选项,DU §3) |
验收要求“零警告” |
| 编辑链接 | editUrl 保留;增加 editLocalizedFiles: true,英文已翻译页的“编辑此页”指向 i18n/en/... |
IA §3.5 |
| 旧站 URL | 不保留任何旧站路径、不做任何跳转,也不沿用旧站结构;新站自行决定 URL。现有 docusaurus.config.js 装有 @docusaurus/plugin-client-redirects(4 条:/contribute、/install、/upgrade、/faq),P0 删除该插件的 plugins 配置块及 package.json 依赖 |
维护者决定 |
| 清理 | 删除 docs/tutorial-extras/(脚手架示例)与 current.json 中的 tutorialSidebar 残留键;重写 docs/getting-started/faq.mdx 的模板文字 |
IA 附录 |
docs/
├── intro.md # slug: / 介绍
├── glossary.md # slug: /glossary 术语表(两个侧边栏共用)
├── guide/ # → /guide/... guideSidebar
│ ├── getting-started/ # 快速开始
│ ├── content/ # 撰写与管理
│ ├── settings/ # 系统设置
│ ├── extend/ # 外观与插件
│ ├── operations/ # 部署与运维
│ └── help/ # 常见问题与求助
└── develop/ # → /develop/... devSidebar
├── index.md # slug: /develop 开发概览
├── theme/ (含 recipes/) # 主题开发
├── plugin/ # 插件开发
├── reference/ # 参考
├── core/ # 核心开发
└── contributing/ # 参与贡献
i18n/en/docusaurus-plugin-content-docs/current/ # 与 docs/ 逐文件镜像(DU §5.2:仅存在于此的页面不会被收录)
- 每个子目录一个
_category_.json(label写中文,英文在current.json的sidebar.<sidebarId>.category.<中文 label>键)。 - 文件名一律英文 kebab-case;URL 由路径生成,不写
slug:(intro.md、glossary.md、develop/index.md及各目录index.md除外)。 - 图片放各目录
img/,与现有docs/getting-started/img/一致。
// sidebars.js(示意)
guideSidebar: ['intro', {type: 'autogenerated', dirName: 'guide'}, 'glossary'],
devSidebar: ['develop/index', {type: 'autogenerated', dirName: 'develop'}, {type: 'ref', id: 'glossary'}],glossary 在 devSidebar 用 type: 'ref',避免同一文档同属两个侧边栏导致上下页导航错乱。develop/index 需在 autogenerated 中排除(_category_ 或 sidebar_class_name 方式,P0 验证)。
| Navbar 位置 | 项 | 类型 |
|---|---|---|
| 左 | 使用指南 Guide | docSidebar → guideSidebar |
| 左 | 开发文档 Developer | docSidebar → devSidebar |
| 右 | 1.3 |
docsVersion(只显示,不做下拉) |
| 右 | 搜索 | 见 §2.4 |
| 右 | 语言 | localeDropdown,dropdownItemsAfter 加“帮助翻译 Help translate” → /develop/contributing/docs |
| 右 | 官网 Home / GitHub | 保留现有两项 |
当前未装搜索插件(DU §5.5)。v1 推荐 @easyops-cn/docusaurus-search-local:language: ['en','zh'],docsRouteBasePath: '/'(IA §3.7);与 3.10.2 及 React 19 的兼容性、是否按语言分索引均未验证,P0 先验证,不通过则 P0 不上搜索。Algolia DocSearch 作为后续选项(待定问题 OQ2)。
列说明:路径相对 docs/(省略 .md);受众见 §1。
根
| 路径 | 中文标题 | English | 内容 | 受众 |
|---|---|---|---|---|
intro |
介绍 | Introduction | Typecho 是什么、文档怎么读、两条侧边栏的分工、求助渠道(forum.typecho.org、GitHub Issues、Telegram t.me/typechodev,详见 getting-help);后台页脚“帮助文档”的落地页 |
全部 |
glossary |
术语表 | Glossary | 中英术语对照与定义,兼作翻译约束(§5.3) | 全部 |
快速开始 Getting Started(guide/getting-started/)
| 路径 | 中文标题 | English | 内容 | 受众 |
|---|---|---|---|---|
requirements |
环境要求 | Requirements | PHP ≥ 7.4;扩展 mbstring/json/Reflection + 任一数据库扩展;MySQL 5.5.3+ / SQLite 3.7.11+ / PostgreSQL 9.1+(仅 README 声明,代码不校验);usr/uploads 可写 |
U A |
installation |
安装 | Installation | 获取安装包(typecho.org/download、GitHub Releases)→ MySQL/PostgreSQL 先手动建库 → 上传 → Web 安装三步(?step=1/2/3)、dbNext 四种取值、MySQL socket、安装后丢失密码的处理 |
U A |
cli-install |
命令行与无人值守安装 | CLI & Unattended Install | php install.php + TYPECHO_SITE_URL、TYPECHO_DB_*、TYPECHO_USER_* 全部环境变量与默认值、退出码 |
A |
upgrade |
升级 | Upgrading | 备份 → 替换 admin/ var/ install/ index.php install.php → 后台升级;控制台首页的新版本提示条(“您当前使用的版本是 %s / 官方最新版本是 %s”,由 Widget\Ajax 检查)作为升级入口;MIN_VERSION = 1.1.0;1.1 站点建议经 1.2.1 中转(OQ1);>100 附件站点的升级死循环已知问题 |
A |
whats-new-1-3 |
1.3 新特性与变更 | What's New in 1.3 | 面向站长的 1.3 变化:修订版本、页面树、新上传器、classic-22、Ctrl/Cmd+S、IDN、高清头像、PHP 7.4 底线;改名/移除项 | U A |
撰写与管理 Writing & Managing(guide/content/)
| 路径 | 中文标题 | English | 内容 | 受众 |
|---|---|---|---|---|
admin-overview |
后台概览 | Admin Overview | 菜单地图(控制台/撰写/管理/设置)与每屏最低角色、隐藏页面、welcome.php |
U A |
posts |
撰写文章 | Writing Posts | Markdown 编辑器、草稿/自动保存(autoSave)、修订版本 revision、分类标签、允许评论/引用/聚合、附件插入 |
U |
pages |
独立页面 | Pages | 页面树(?parent=)、排序 order、自定义模板选择、页面 vs 文章 |
U |
categories-tags |
分类与标签 | Categories & Tags | 分类树、默认分类、标签管理、计数不准时的处理 | U A |
attachments |
附件与文件管理 | Attachments & Files | 上传、attachmentTypes(@image@ @media@ @doc@ @other@ + 自定义)、替换/删除、默认存放 usr/uploads/YYYY/MM/ |
U |
custom-fields |
自定义字段(编辑器侧) | Custom Fields in the Editor | 开头链到 develop/theme/custom-fields;在编辑器“自定义字段”面板添加字段,四种类型 str/int/float/json(字符/整数/小数/JSON 结构);主题预置字段的显示方式;后台面板“帮助文档”的落地页 |
U |
visibility |
可见性与密码保护 | Visibility & Password Protection | publish/hidden/private/waiting 状态、密码保护内容在列表/聚合/归档中的隐藏规则 |
U TD |
comments |
评论管理与审核 | Comments & Moderation | 通过/待审核/垃圾三态、批量操作、回复、编辑;评论/引用通告/Pingback 的区别 | A |
users |
用户、角色与注册 | Users, Roles & Registration | 五级角色(administrator…visitor);“角色 × 操作”权限分配表,固定锚点 {#permission-table}(后台“参考这里”的落地页);用户组下拉框只有 4 个组,visitor 不可手动分配;新增用户、开放注册 allowRegister、用户名或邮箱登录 |
A |
profile |
个人设置 | Profile | screenName/url/mail、改密码、头像来自 Gravatar(按邮箱,在 gravatar.com 修改)、个人写作偏好(markdown、xmlrpcMarkdown、autoSave、defaultAllow*)、插件个人配置 |
U |
feeds-xmlrpc |
订阅源与离线客户端 | Feeds & XML-RPC Clients | RSS 2.0/RSS 1.0/Atom 地址、feedFullText;allowXmlRpc 0/1/2 含义、MetaWeblog 客户端接入 |
U A |
系统设置 Settings(guide/settings/)
| 路径 | 中文标题 | English | 内容 | 受众 |
|---|---|---|---|---|
general |
基本设置 | General Settings | title siteUrl description keywords allowRegister allowXmlRpc lang timezone attachmentTypes;__TYPECHO_SITE_URL__ 隐藏站点地址 |
A |
discussion |
评论设置 | Discussion Settings | commentDateFormat(附常用 PHP date() 格式示例)、commentsShow[]/commentsPost[] 两组开关逐项说明、嵌套层数 2..7、分页与排序、头像分级、反垃圾与来源检查;不写 commentsUniqueIpInterval/StopWords/IpBlackList(无效字段) |
A |
reading |
阅读设置 | Reading Settings | postDateFormat(附常用 PHP date() 格式示例)、frontPage(recent/page:<cid>/file:)、frontArchive 与 archivePattern、pageSize、postsListSize、feedFullText |
A |
permalink |
永久链接 | Permalinks | rewrite 开关与 checkRewrite() 探测、4 种预设 + 自定义 postPattern、允许的占位符、pagePattern/categoryPattern;服务器规则链到运维页 |
A |
外观与插件 Themes & Plugins(guide/extend/)
| 路径 | 中文标题 | English | 内容 | 受众 |
|---|---|---|---|---|
themes |
安装与设置主题 | Installing & Configuring Themes | 上传到 usr/themes/、切换、主题设置页、在线编辑器及 __TYPECHO_THEME_WRITEABLE__;自带 default 与 classic-22 |
A |
plugins |
安装与配置插件 | Installing & Configuring Plugins | 上传到 usr/plugins/、启用/禁用/设置;插件导致 500 时的排查 |
A |
languages |
界面语言 | Admin Language & Language Packs | 语言包放 usr/langs(__TYPECHO_LANG_DIR__)、lang 选项切换 |
A |
finding-plugins |
寻找插件与主题 | Finding Plugins & Themes | 不存在仍在维护的插件/主题目录,不链任何目录;按需求类型(代码高亮、数学公式、站点地图、统计、评论通知、外部存储)给出 GitHub 搜索与 topic 链接,并引导到 forum.typecho.org 询问;提醒按 @since 与最近更新时间判断是否适配 1.3;不写第三方手册 |
U A |
部署与运维 Deployment & Operations(guide/operations/)
| 路径 | 中文标题 | English | 内容 | 受众 |
|---|---|---|---|---|
web-server |
Web 服务器配置 | Web Server Configuration | nginx(PHP-FPM + rewrite + pathinfo)、Apache(.htaccess/mod_rewrite)、Caddy 2 的当前写法 |
A |
https-proxy |
HTTPS、反向代理与 CDN | HTTPS, Reverse Proxy & CDN | __TYPECHO_SECURE__、__TYPECHO_IP_SOURCE__、__TYPECHO_SITE_URL__/__TYPECHO_DYNAMIC_SITE_URL__、__TYPECHO_COOKIE_OPTIONS__;混合内容与重定向循环 |
A |
containers |
容器与云主机部署 | Containers & Cloud Hosting | VPS/共享主机/容器三类环境;容器统一用官方镜像 joyqi/typecho(hub.docker.com/r/joyqi/typecho,描述 “Typecho Official Image”,维护者 Typecho Dev Team)。Docker Hub API 2026-10-16 实测:共 70 个标签,无 latest;1.3 正式版标签 1.3.0-php7.4 与 1.3.0-php8.2 各 7 个变体(无后缀、-alpine、-apache、-cli、-cli-alpine、-fpm、-fpm-alpine),推送于 2026-01-20;nightly-php7.4*、nightly-php8.2* 共 14 个,最近一次推送 2026-04-11(来自 master,含未发布改动,不建议生产使用);另有 1.2.1-*(2023-06-06)与 1.2.0-*(2022-03-31,含 php7.3/php8.0);平台 linux/amd64、linux/arm/v7、linux/arm64。环境变量 TYPECHO_INSTALL=1 自动安装、TIMEZONE、MEMORY_LIMIT、MAX_POST_BODY、TYPECHO_DB_*(逐项以镜像说明页核对);镜像说明页的 Supported tags 段仍列 php7.3/php8.0 nightly,与实际标签不符,以 API 为准;只读文件系统需挂载 usr/uploads 等目录。镜像的 Dockerfile 按 Hub 说明页在 github.com/typecho/Dockerfile 仓库;主仓库 tools/Dockerfile 是否参与构建该镜像 unverified(它基于 PHP 7.0,不满足 7.4 底线,不作为部署方式介绍) |
A |
config-file |
config.inc.php 与常量 | config.inc.php & Constants | 安装生成的内容;全部可选 __TYPECHO_*__ 常量(约 20 个)逐条说明与读取位置 |
A CD |
admin-dir |
自定义后台路径 | Custom Admin Path | 改 __TYPECHO_ADMIN_DIR__ 并重命名目录 |
A |
uploads-storage |
附件存储位置 | Upload Storage | __TYPECHO_UPLOAD_DIR__/__TYPECHO_UPLOAD_ROOT_DIR__/__TYPECHO_UPLOAD_URL__;需要对象存储时选插件(链开发页 Widget_Upload 钩子) |
A |
backup |
备份与恢复 | Backup & Restore | 后台“备份”导出 .dat、从上传或 usr/backups(__TYPECHO_BACKUP_DIR__)导入;文件层备份 |
A |
migration |
从其他博客迁移 | Migrating from Other Platforms | WordPress 导入(WordpressToTypecho 插件,需按 1.3 实测,见 OQ5);换服务器/换域名迁移 | A |
security |
安全加固 | Security Hardening | 文件权限、改后台路径、关闭在线主题编辑、SECURITY.md 漏洞报告渠道、及时升级 |
A |
debugging |
调试与排错 | Debugging & Troubleshooting | __TYPECHO_DEBUG__、看 PHP/服务器日志、“禁用插件 + 切回默认主题”排查流程、__TYPECHO_EXCEPTION_FILE__ |
A TD |
常见问题与求助 FAQ & Help(guide/help/)
| 路径 | 中文标题 | English | 内容 | 受众 |
|---|---|---|---|---|
faq |
常见问题 | FAQ | 链接全部 404 / 登录 404、No input file specified、405、升级或启用插件后 500、丢失管理员密码、分类计数不准;每条链到详细页 | U A |
getting-help |
获取帮助 | Getting Help | forum.typecho.org(后台页脚“支持论坛”)、GitHub Issues(“报告错误”)、Telegram t.me/typechodev;如何描述问题:步骤、错误信息 + Bug 模板 6 个环境字段(操作系统、Apache/Nginx、数据库、PHP、Typecho、浏览器版本) |
全部 |
根(develop/)
| 路径 | 中文标题 | English | 内容 | 受众 |
|---|---|---|---|---|
index |
开发概览 | Developer Overview | 四层扩展方式(主题/插件/核心)、本地开发环境(PHP 7.4+、__TYPECHO_DEBUG__、调试 $this 的技巧)、阅读路线 |
TD PD CD |
migrate-to-1-3 |
主题与插件迁移到 1.3 | Migrating Themes & Plugins to 1.3 | Widget_* → \Widget\*::alloc();选项改存 JSON;Plugin::__call 弃用;类型化属性可能破坏子类;archive.php 移除;comments() 无类型参数 |
TD PD |
i18n |
主题与插件国际化 | Internationalizing Themes & Plugins | _t/_e/_n、Helper::lang($domain) 加载 .mo、生成 .pot |
TD PD |
主题开发 Theme Development(develop/theme/)
| 路径 | 中文标题 | English | 内容 | 受众 |
|---|---|---|---|---|
index |
主题开发概览 | Theme Development Overview | 主题是什么、$this 即 Widget\Archive、本节阅读顺序 |
TD |
quick-start |
第一个主题 | Your First Theme | 以 classic-22 为蓝本逐文件讲解 index/header/footer/post/page/comments/404/functions |
TD |
anatomy |
主题结构与头部信息 | Theme Anatomy | 目录要求(含 index.php)、头注释 @package/@author/@version/@link/@since、截图规则、__TYPECHO_ROOT_DIR__ 守卫、themeUrl() 加载资源 |
TD |
template-hierarchy |
模板层级 | Template Hierarchy | render() 的 6 级查找顺序,<type>/<slug>.php 覆盖,single.php/archive.php 回退,index.php 必需 |
TD |
context |
页面上下文与 is() | Context & is() |
is($type, $slug),含 single/archive/index/feed 伪类型 |
TD |
functions-php |
functions.php 回调 | functions.php Callbacks |
themeInit、themeConfig、themeConfigHandle、themeFields、themePostFields、themePageFields、threadedComments、singlePing 的调用时机与签名 |
TD |
custom-templates |
自定义模板 | Custom Templates | @package custom 页面模板、file: 首页、分类专属模板、themeInit 中改 pageSize |
TD |
theme-options |
主题设置 | Theme Options | themeConfig(Form $form) 建表单、存为 theme:<name>、模板中 $this->options->xxx 读取 |
TD |
custom-fields |
模板中的自定义字段 | Custom Fields in Templates | $this->fields->name 读取/判断;themeFields/themePostFields/themePageFields 预置字段 |
TD |
comments |
评论模板 | Comments Template | comments()/pings() 分开列出、listComments() 选项键、threadedComments 回调、reply()/cancelReply()、remember() |
TD |
widgets |
在模板中调用 Widget | Using Widgets in Templates | ::alloc() 取最新文章/评论/分类/页面/归档/统计、调用某分类文章、参数字符串 |
TD |
header |
头部输出 header() | header() Output |
header() 可屏蔽的键(description … atom)、headerOptions 过滤器 |
TD |
releasing |
发布主题 | Releasing a Theme | 打包、截图、@since 兼容声明;没有官方目录可提交:在 GitHub 发布仓库与 Release 压缩包、加 topic 便于搜索(topic 名写作时按 GitHub 实际使用核对)、到 forum.typecho.org 发帖 |
TD |
主题技巧 Theme Recipes(develop/theme/recipes/)
| 路径 | 中文标题 | English | 内容 | 受众 |
|---|---|---|---|---|
page-title |
自定义页面标题 | Custom Page Titles | archiveTitle($defines, $before, $end) 拼 <title> |
TD |
breadcrumbs |
面包屑导航 | Breadcrumbs | is() + archiveTitle() 组合 |
TD |
related-posts |
相关文章 | Related Posts | related($limit = 5, $type = null) |
TD |
category-description |
分类描述 | Category Description | 输出分类描述与提示 | TD |
tag-cloud |
标签云 | Tag Cloud | \Widget\Metas\Tag\Cloud::alloc() 参数(同时注明旧名 Widget_Metas_Tag_Cloud) |
TD |
error-pages |
404 与错误页 | 404 & Error Pages | 主题 404.php;__TYPECHO_EXCEPTION_FILE__ 自定义错误页 |
TD A |
插件开发 Plugin Development(develop/plugin/)
| 路径 | 中文标题 | English | 内容 | 受众 |
|---|---|---|---|---|
index |
插件开发概览 | Plugin Development Overview | 插件能做什么、钩子与扩展点总览、阅读顺序 | PD |
hello-world |
第一个插件 | Your First Plugin | 逐行讲解 usr/plugins/HelloWorld/Plugin.php(admin/menu.php:navBar、配置项 word) |
PD |
structure |
插件结构与生命周期 | Plugin Structure & Lifecycle | 两种布局与 \TypechoPlugin\<Name>\Plugin 命名、头注释与 @since 检查、PluginInterface 的 activate/deactivate/config/personalConfig、激活/停用时发生什么 |
PD |
hooks |
使用钩子 | Using Hooks | Typecho\Plugin::factory() 注册、_N 权重、句柄命名(Widget\Base\Contents → Widget_Abstract_Contents)、call/filter/trigger 语义、call<Method> 与 ___<prop> 动态钩子 |
PD |
settings |
插件配置 | Plugin Settings | config(Form)/personalConfig(Form)、configHandle/personalConfigHandle、存储键 plugin:<Name>/_plugin:<Name>、读取 Options::alloc()->plugin() |
PD |
routes-actions |
路由、Action 与后台面板 | Routes, Actions & Admin Panels | Helper::addRoute/removeRoute、addAction + Widget\ActionInterface、addMenu、addPanel → admin/extending.php?panel= |
PD |
database |
数据库操作 | Working with the Database | Typecho\Db::get()、select/insert/update/delete、Db\Query 链式方法、table. 前缀、建表时兼容三种数据库 |
PD |
http-async |
HTTP 请求与异步任务 | HTTP Requests & Async Tasks | Typecho\Http\Client 出站请求;Helper::requestService() + Widget_Service:<method>;__TYPECHO_SERVICE_URL__ |
PD |
patterns |
常见插件模式 | Common Plugin Patterns | 内容过滤(contentEx/excerptEx)、评论反垃圾(Widget_Feedback:comment)、外部附件存储(Widget_Upload 的 uploadHandle 等)、编辑器替换(richEditor)、登录事件 |
PD |
releasing |
发布插件 | Releasing a Plugin | 目录结构、@since、语言包;没有官方目录可提交:在 GitHub 发布仓库与 Release 压缩包、加 topic 便于搜索(topic 名写作时按 GitHub 实际使用核对)、到 forum.typecho.org 发帖 |
PD |
参考 Reference(develop/reference/)
| 路径 | 中文标题 | English | 内容 | 受众 |
|---|---|---|---|---|
hooks |
钩子列表 | Hook Reference | 122 个(句柄, 钩子)对 + 3 个动态族,按句柄分组,列类型(call/filter/trigger/deprecated magic)、参数、调用位置 | PD |
archive |
Widget\Archive | Widget\Archive |
模板 $this 的全部公开方法、getter/setter、魔术属性 |
TD |
row-widgets |
内容、评论、分类与用户对象 | Row Widgets | Widget\Base\Contents/Comments/Metas/Users 的方法与 ___* 属性 |
TD PD |
list-widgets |
列表类 Widget | List Widgets | Contents\Post\Recent、Comments\Recent、Metas\Category\Rows、Contents\Page\Rows、Contents\Post\Date、Metas\Tag\Cloud、Stat;listCategories/listPages 选项键 |
TD |
options |
$this->options | Widget\Options |
方法(siteUrl()、themeUrl()、plugin() …)与魔术属性 |
TD PD |
option-names |
选项名一览 | Option Names | table.options 中全部默认选项名、类型、所属设置页、默认值 |
TD PD CD |
form-elements |
表单元素 | Form Elements | Checkbox Fake Hidden Number Password Radio Select Submit Text Textarea Url、addRule() |
TD PD |
helper |
Utils\Helper | Utils\Helper |
路由/Action/菜单/面板/选项/杂项全部静态方法签名 | PD |
routes-actions |
默认路由与 Action | Default Routes & Actions | 27 条默认路由、占位符类型 string char digital alpha alphaslash split、23 个核心 Action |
PD CD |
database-schema |
数据表结构 | Database Schema | 7 张表(含 1.3 的 fields)字段字典;contents.type/status 取值;comments.type/status 取值 |
PD CD |
class-aliases |
旧类名对照表 | Legacy Class Aliases | 自动加载映射规则 + Init.php 21 条显式别名;旧代码写法 ↔ 1.3 写法 |
TD PD |
核心开发 Core Development(develop/core/)
| 路径 | 中文标题 | English | 内容 | 受众 |
|---|---|---|---|---|
architecture |
目录结构与命名空间 | Architecture & Namespaces | index.php/install.php/admin//var/Typecho/var/Widget/var/Utils/var/IXR/usr//tools/ 各自职责 |
CD |
request-lifecycle |
请求生命周期 | Request Lifecycle | Common::init() → Widget\Init 9 步 → index.php:begin → Router::dispatch() → end;后台页不走路由 |
CD PD |
router |
路由 | Router | 路由表结构、Router\Parser 规则语法、Router::url()、ParamsDelegateInterface |
CD PD |
widget |
Widget 组件模型 | The Widget Layer | widget()/alloc()/allocWithAlias()、实例池、push/next/have/to、___prop 与 __call、基类接口与 1.3 新 trait |
CD TD PD |
permissions |
权限模型 | Permission Model | 角色数值与 User::pass() 判定、后台菜单最低角色、在代码中做权限检查 |
CD PD |
request-response |
Request、Response 与常用工具 | Request, Response & Common Helpers | Typecho\Request/Response/Widget 级响应方法(goBack、throwJson 等)、Typecho\Common 常用静态方法 |
CD PD |
upgrade-scripts |
编写升级脚本 | Writing Upgrade Scripts | Utils\Upgrade::v<x_y_z>() 反射机制、MIN_VERSION、v1_3_0 示例、分批迁移注意点 |
CD |
build |
开发环境与前端构建 | Dev Environment & Asset Build | tools/ 的 npm 脚本与 Makefile 目标、admin/src → admin/js、admin/css、生成 messages.pot |
CD |
coding-style |
编码规范 | Coding Style | PHP 7.4 底线、命名空间与类型声明、无 Composer、保留旧别名、admin/*.php 是模板 |
CD |
参与贡献 Contributing(develop/contributing/)
| 路径 | 中文标题 | English | 内容 | 受众 |
|---|---|---|---|---|
index |
贡献代码 | Contributing Code | 行为准则(CODE_OF_CONDUCT.md)、Fork/PR 流程、CI 仅 php -l(7.4–8.2)、fix/* 自动合入 dev、发布流程、SECURITY.md |
CD |
docs |
贡献文档与翻译文档 | Contributing to the Docs | 本站写作规范、前置元数据规则、英文翻译流程(即 §5) | 全部 |
translate-typecho |
翻译 Typecho 界面 | Translating Typecho | typecho/languages 仓库、Poedit + messages.pot、提交 PR |
译者 |
| 区域 | 页数 |
|---|---|
使用指南 guide(intro + guide/**) |
1 + 5 + 11 + 4 + 4 + 10 + 2 = 37 |
| 开发文档 develop(不含参考) | 3 + 13 + 6 + 10 + 9 + 3 = 44 |
| 参考 reference | 11 |
| 术语表 glossary | 1 |
| 合计 | 93 |
术语表是机翻约束(§5.3)。后台中文标签以 1.3 源码/语言包为准,标 ⚠ 的需在 P0 核对。
| 中文 | English | 说明 |
|---|---|---|
| 文章 | post | contents.type = post |
| 独立页面 | page | 后台菜单“独立页面”;可成树 |
| 附件 / 文件 | attachment | 后台菜单叫“文件” |
| 草稿 | draft | post_draft / page_draft |
| 修订版本 | revision | 1.3 新类型 |
| 分类 / 标签 | category / tag | 统称 metas,不译作“元数据” |
| 评论 / 引用通告 / Pingback | comment / trackback / pingback | Pingback 不译 |
| 控制台 | dashboard | 后台首页 |
| 永久链接 | permalink | |
| 地址重写(伪静态) | URL rewriting | 首次出现时括注“伪静态” |
| 主题 / 模板 | theme / template | 模板 = 主题中的单个 PHP 文件 |
| 自定义字段 | custom field | |
| 插件 | plugin | |
| 钩子 / 句柄 | hook / handle | 句柄 = factory() 的参数 |
| Widget | widget | 不译,保持英文 |
| Action | action | /action/<name>,不译 |
| 路由 | route | |
| 面板 | panel | addPanel |
| 管理员 / 编辑 / 贡献者 / 关注者 / 访问者 ⚠ | administrator / editor / contributor / subscriber / visitor | 角色 |
| 站点地址 | site URL | siteUrl |
| 语言包 | language pack | usr/langs |
规则:Typecho 源码链接或指向的选题都是必交内容;URL 可以变,内容不能缺。
依据:/tmp/typecho-docs-research/code-doc-links.md(源码 @ 56f4c6f)。源码里 docs.typecho.org 共 18 处命中(6 行文本 + 12 个 .mo),连同其他文档指向共推出 25 个选题:COVERED 17、PARTIAL 8、MISSING 0。
后台内的 12 个帮助入口(其中 E1–E3 直接从后台链到 docs.typecho.org)
| # | 界面 | 用户看到的文字 | 证据 | 新站落地页 | 状态 |
|---|---|---|---|---|---|
| E1 | 所有后台页页脚(登录/注册页除外) | “帮助文档” | admin/copyright.php:8 |
intro(/) |
已覆盖 |
| E2 | 撰写文章/页面 → 自定义字段面板 | “使用方法参见 帮助文档” | admin/custom-fields.php:69 |
guide/content/custom-fields |
本次补齐(字段类型) |
| E3 | 管理 → 用户 → 用户组 | “具体的权限分配表请参考这里” | var/Widget/Users/Edit.php:160 |
guide/content/users#permission-table |
本次补齐(矩阵 + 锚点) |
| E4 | 所有后台页页脚 | “支持论坛” | admin/copyright.php:9 |
guide/help/getting-help |
本次补齐(论坛) |
| E5 | 所有后台页页脚 | “报告错误” | admin/copyright.php:10 |
guide/help/getting-help |
已覆盖 |
| E6 | 所有后台页页脚 | “资源下载” | admin/copyright.php:11 |
guide/getting-started/installation |
本次补齐(获取安装包) |
| E7 | 控制台首页(有新版本时) | “您当前使用的版本是 %s / 官方最新版本是 %s” | var/Widget/Ajax.php:68、admin/index.php:136-140 |
guide/getting-started/upgrade |
本次补齐(提示条) |
| E8 | 设置 → 评论 → 评论日期格式 | “具体写法请参考 PHP 日期格式写法” | var/Widget/Options/Discussion.php:132 |
guide/settings/discussion |
本次补齐(commentDateFormat) |
| E9 | 设置 → 阅读 → 文章日期格式 | “请参考 PHP 日期格式写法” | var/Widget/Options/Reading.php:108 |
guide/settings/reading |
已覆盖 |
| E10 | 设置 → 永久链接(重写检测失败) | “重写功能检测失败 … 手动创建一个.htaccess文件” | var/Widget/Options/Permalink.php:217-230 |
guide/settings/permalink → guide/operations/web-server |
已覆盖 |
| E11 | 安装第 2 步(无法写配置 / 库不存在) | “手动创建 config.inc.php …”“请手动创建后重试” | install.php:1086/1096/1109 |
guide/getting-started/installation、guide/operations/config-file |
已覆盖 |
| E12 | 备份 → 恢复 | “将备份文件手动上传至服务器的 %s 目录下” | admin/backup.php:57 |
guide/operations/backup |
已覆盖 |
9 项必补内容(已写入 §3 对应页面的“内容”列)
- 1.
guide/content/users:“角色 × 操作”权限分配表,固定锚点{#permission-table};注明下拉框只有 4 个组、visitor 不可手动分配(E3)。 - 2.
guide/content/custom-fields:字段类型str/int/float/json;开头链到develop/theme/custom-fields(E2)。 - 3.
guide/help/getting-help(intro同步列出求助渠道):只列 forum.typecho.org、GitHub Issues、Telegramt.me/typechodev三个渠道;Bug 模板的 6 个环境字段(E4、E5)。 - 4.
guide/getting-started/installation:获取安装包(typecho.org/download、GitHub Releases);MySQL/PostgreSQL 先建库(E6、E11)。 - 5.
guide/getting-started/upgrade:控制台新版本提示条(E7)。 - 6.
guide/settings/discussion:commentDateFormat与 PHP 日期格式示例(E8)。 - 7.
guide/settings/reading:postDateFormat的 PHP 日期格式示例(E9)。 - 8.
guide/content/profile:头像来自 Gravatar;xmlrpcMarkdown。 - 9.
develop/contributing/index:行为准则CODE_OF_CONDUCT.md。
不需要新增页面(MISSING = 0,页数仍为 93)。后台与 CONTRIBUTING.md 里的链接必须在 typecho 主仓库改到新站 URL,列入 OQ6。
| # | 缺口 | 新页 | # | 缺口 | 新页 |
|---|---|---|---|---|---|
| 1 | 最新环境要求 | requirements |
10 | 用户、角色与注册 | users、core/permissions |
| 2 | CLI 安装 | cli-install |
11 | 1.3 主题 API | develop/theme/*、migrate-to-1-3 |
| 3 | 容器与现代主机 | containers |
12 | 1.3 插件开发 | develop/plugin/*、reference/hooks |
| 4 | HTTPS / 代理 / CDN | https-proxy |
13 | 站长侧语言包 | extend/languages |
| 5 | 常量参考 | config-file |
14 | 1.2 → 1.3 升级说明 | whats-new-1-3、migrate-to-1-3 |
| 6 | 内置备份 | backup |
15 | 调试排错 | operations/debugging |
| 7 | 后台逐屏指南 | guide/content/*、guide/settings/* |
16 | 安全加固 | security |
| 8 | 永久链接端到端 | permalink + web-server |
17 | XML-RPC 客户端 | feeds-xmlrpc |
| 9 | 评论审核与反垃圾 | comments、discussion |
18 | 英文文档 | §5 全站 /en/ |
| 旧说法 | 1.3 事实 | 纠正位置 |
|---|---|---|
| PHP 5.1+ | PHP 7.4+(PS §1.1) | requirements |
| Caddy v1、GoDaddy、nginx 0.7 / php5.ini / chmod 644 | Caddy 2、PHP-FPM 现行写法 | web-server、faq |
$this->comments("comment") |
comments() 无类型参数,引用用 pings()(PS §3.5) |
develop/theme/comments |
Typecho_API::factory、./widget 目录、render() |
\Widget\* + alloc()/widget()(PS §5.6) |
core/widget |
includes/Route.php |
var/Typecho/Router.php |
core/router |
| Zend 下划线命名 | 命名空间 + 类型声明 | coding-style |
@dependence 构建号 |
@since 版本号(PS §4.1) |
plugin/structure |
| 备份靠 Export/TeDbBak 插件 | 内置 Widget\Backup |
backup |
| 升级只需替换文件 | 还需替换 install/,先备份,1.1 需经 1.2.1 |
upgrade |
| 步骤 | 做什么 | 产物 |
|---|---|---|
| 1 | 中文页合入 main(中文永远是源) | docs/**.md(x) |
| 2 | 以术语表为约束生成英文机翻稿,代码块、标识符、选项名、钩子名原样保留 | i18n/en/docusaurus-plugin-content-docs/current/<同路径>,front matter 带 translation: machine |
| 3 | 人工校对:术语、代码一致性、链接;完成后删除 translation: machine |
同上 |
| 4 | JSON 文案:pnpm write-translations --locale en,翻译 current.json(含 version.label: "1.3" 与每个分类标签)、code.json(含 3.10.2 新增 5 个键,DU §5.4)、navbar.json |
i18n/en/*.json |
| 优先级 | 开发文档(develop + reference)先,使用指南后 | IA §4.5 理由 1–3 |
| 模板 | 每页机翻都用 scripts/translation-prompt.md(试点分支 feat/en-pilot @ ce73259,尚未合入 main)填入源路径、source_commit 和正文;模板必须带完整术语表(§5.3)和 §5.2 的全部规则 |
scripts/translation-prompt.md |
- 译文文件会整体替换源文件的 front matter(DU §5.1)。必须逐字复制源文件的
slug、sidebar_position、sidebar_label、id(如有),只翻译title/description/sidebar_label的值。漏掉slug: /会让英文首页变成/en/intro,在onBrokenLinks: 'throw'下直接构建失败。 - 新增键:
translation: machine(机翻未校对);source_commit: <sha>(翻译时中文源文件的最后一次提交,用于过期检测,§5.5)。 - 不允许只存在于
i18n/en/的页面(DU §5.2:不会被收录);英文需要的新页必须先有中文源文件。 - 相对链接与锚点保持与中文一致(例外见第 5 条);自定义标题锚点用
{#english-id}固定,避免中英锚点不一致触发onBrokenAnchors。 - 链接目标页还没有英文版时,相对
.md链接在onBrokenMarkdownLinks: 'throw'下会构建失败,改用路由路径(如/develop/contributing);目标页有英文版后改回相对.md链接。 - 只含一个页面的分类会被渲染成指向该页的链接,标签直接取中文
_category_.json,不经过current.json,英文侧边栏会一直显示中文(试点中develop/contributing即如此)。这类分类的唯一页面要尽早翻译(可在译文中设sidebar_label),或给分类补第二个页面。
docs/glossary.md(§3.4 词条)是唯一译名来源:机翻提示词必须附带整张表;校对时按表检查;新术语先进表再用。代码标识符(Widget\Archive、commentsRequireUrl、Widget_Archive:handle 等)永远不翻译。
| 项 | 做法(DU §5.3 已在 3.10.2 上端到端验证) |
|---|---|
| swizzle | pnpm docusaurus swizzle @docusaurus/theme-classic DocItem/Content --wrap --danger(不在安全列表,必须 --danger;升级 Docusaurus 时需复查) |
| 判定 | useDocusaurusContext().i18n.currentLocale !== defaultLocale 且 useDoc().metadata.source 不以 @site/i18n/en/ 开头 → 显示“未翻译,正在显示中文原文”;useDoc().frontMatter.translation === 'machine' → 显示“机器翻译,待校对” |
| 依赖 | package.json 增加直接依赖 "@docusaurus/plugin-content-docs": "3.10.2"(pnpm 严格模式下否则无法解析 @docusaurus/plugin-content-docs/client) |
| 文案 | 横幅文字放 code.json,链接到 /en/develop/contributing/docs |
- 脚本
scripts/i18n-status.mjs(P0 交付):遍历docs/**,对每页输出missing/machine/reviewed/stale。stale=git log <source_commit>..HEAD -- docs/<path>非空。 - 输出 Markdown 表(每页一行),CI 在 PR 中打印;覆盖率 = reviewed 页数 / 总页数,另报 machine 页数。
- PR 模板勾选项:“改动了中文正文 → 已同步英文 / 已在 PR 中说明英文过期”。
- v1 不在页面上显示“过期”横幅(OQ7)。
| 不做 | 理由 |
|---|---|
多版本 / versions.json / 版本下拉 |
用户决定只写 1.3;新增功能用“1.3 新增”标注(IA §3.6) |
| 1.3.0 之后 master 未发布改动 | PS §6.3;只在 upgrade 中以“已知问题”提及 4c97a37 |
| 自动生成 PHP API 文档 | 维护成本高;手工整理参考页(IA §4.4) |
| XML-RPC / MetaWeblog 协议文档 | 受众窄;只写后台开关与客户端接入 |
| 第三方插件/主题手册与目录 | LI §4 DROP 42 页;社区插件目录已无人维护,发现方式只用 GitHub 搜索/topic 与论坛(见 finding-plugins) |
| 旧 PaaS(ACE/BAE/GAE/SAE)安装 | 平台已关停 |
| 中英以外的语言、Crowdin/Lunaria | 规模不足,Git 策略足够(IA §4.4) |
| 页面级“翻译过期”横幅 | 需构建期注入 git 数据;v1 只出报告(OQ7) |
future.v4 / @docusaurus/faster |
与 IA 无关,另开 PR 测试(DU §5.5) |
修改 typecho 主仓库(CONTRIBUTING.md 链接、CODING_STYLE.md、tools/Dockerfile) |
不在本仓库;列为后续 issue(OQ6) |
| 阶段 | 交付内容 | 页数 |
|---|---|---|
| P0 骨架 | 配置:locales 加 en、localeConfigs、versions.current.label: '1.3'、两套侧边栏、navbar(docSidebar×2、docsVersion、localeDropdown)、链接检查改 throw、editLocalizedFiles;删除 tutorial-extras/;目录与 _category_.json;迁移现有 intro、installation、upgrade、backup、contributing 到新路径;develop/index、glossary(§3.4 词条)、guide/help/faq(替换模板文字);按 §2.1 删除旧站跳转插件及其依赖;横幅 swizzle + 依赖;scripts/i18n-status.mjs;搜索插件验证;以上页面的英文稿;部署 |
8 |
| P1 安装与运维 | guide/getting-started/*、guide/operations/*、guide/help/* 其余页(LI §6 Q1–Q11 全部有答案) |
+13 |
| P2 后台使用 | guide/content/*、guide/settings/*、guide/extend/* |
+19 |
| P3 主题开发 | develop/theme/**、migrate-to-1-3、i18n;参考 archive、row-widgets、list-widgets、options、option-names、form-elements、class-aliases;同步出英文机翻稿 |
+28 |
| P4 插件开发 | develop/plugin/*;参考 hooks、helper、routes-actions、database-schema;英文机翻稿 |
+14 |
| P5 核心与贡献 | develop/core/*、develop/contributing/docs、translate-typecho;英文机翻稿 |
+11 |
| P6 英文校对 | develop + reference 全部人工校对,然后 guide;按 i18n-status 报告推进 |
0 |
页数核对:8 + 13 + 19 + 28 + 14 + 11 = 93(develop/contributing/index 由现有 contributing.mdx 在 P0 迁移)。
每个阶段通用
| 检查 | 通过条件 |
|---|---|
| 构建 | pnpm build 退出码 0,输出中匹配 `warn |
| 链接 | onBrokenLinks、onBrokenAnchors、markdown.hooks.onBrokenMarkdownLinks 均为 'throw' 且构建通过 |
| 内容来源 | 页面上每个代码标识符、选项名、钩子、常量和路径,都要在 /Users/joyqi/Work/typecho @ 56f4c6f(v1.3.0-10)核对过;与 v1.3.0 标签不一致之处(PS §6.3)不得写成 1.3 功能 |
| 源码必交内容 | §4.1 中本阶段涉及的帮助入口都有落地页,对应的必补内容已写进正文 |
| 术语 | 中英文都符合术语表;新术语已入表 |
| 英文覆盖 | i18n-status 报告逐页列出;本阶段新页在 /en/ 至少为 machine 状态(P1/P2 允许 missing,但必须显示“未翻译”横幅) |
| 写作口径 | 页面只陈述产品事实:不写测试状态与验证过程(“实测”“未验证”、测试环境、测试日期等),不提旧文档站或页面的旧版本;已知问题直接写成关于产品的陈述(“1.3.0 中……”)。测试记录只写进 /tmp/typecho-docs-research/ 下的报告 |
分阶段专项
| 阶段 | 专项检查 |
|---|---|
| P0 | / 与 /en/ 均 200;/en/ 首页标题为英文(证明 slug: / 已复制);§2.1 所述跳转插件已从 docusaurus.config.js 与 package.json 中移除;横幅只出现在回退页与机翻页;navbar 显示 1.3;git grep tutorial-extras 为空 |
| P1 | E4–E7、E11、E12 的落地内容齐全;containers 用 joyqi/typecho:1.3.0-php8.2-apache 实际启动一次并完成安装,写作当天重新调用 Docker Hub API 更新标签与日期;cli-install 中的环境变量在真实 PHP 7.4 与 8.x 上执行一次 php install.php 验证;web-server 的 nginx/Apache/Caddy 2 配置各实测一次永久链接可用 |
| P2 | /guide/content/users#permission-table 锚点存在(构建时 onBrokenAnchors 校验);E2、E3、E8、E9、E10 的落地内容齐全;每个设置页的字段名与 Options/*.php 的 from() 列表逐一对照,无多无漏(排除三项无效字段) |
| P3 | quick-start 的步骤能从空目录做出可在后台启用的主题;KEEP 页代码片段在 classic-22 下运行 |
| P4 | reference/hooks 行数 = 122 + 3 个动态族,用 PS §4.4 的 grep 方法重跑结果一致;hello-world 与 usr/plugins/HelloWorld/Plugin.php 一致 |
| P5 | contributing/index 含行为准则;coding-style 与 typecho 仓库 CLAUDE.md 无冲突;贡献流程与 .github/workflows/* 一致 |
| P6 | develop + reference 的 reviewed 覆盖率 100%;guide 达到 OQ4 中约定的比例 |
| # | 问题 | 选项 | 推荐 |
|---|---|---|---|
| OQ1 | 1.1 站点直接升级 1.3 会漏掉 comments.agent/comments.url 两个列变更(PS §1.7) |
A. 文档要求 1.1 → 1.2.1 → 1.3;B. 先请核心恢复迁移再写;C. 两者都做 | C:文档先写 A,同时在 typecho 仓库提 issue,修复后改文档 |
| OQ2 | 搜索方案 | A. 本地搜索插件;B. Algolia DocSearch;C. v1 不上搜索 | A,P0 验证 3.10.2/React 19 兼容与中文分词;不行则 C,并申请 B |
| OQ3 | 机翻工具与校对人 | A. LLM + 术语表,维护者校对;B. 只人工;C. 招募社区译者 | A,开发文档由熟悉代码的维护者先校对 |
| OQ4 | 使用指南英文的完成目标 | A. 与开发文档同标准(100% reviewed);B. 允许长期 machine;C. 只翻 getting-started + operations | B:先 machine 全覆盖,校对按访问量排序 |
| OQ5 | WordPress 迁移 | A. 实测 WordpressToTypecho 在 1.3 下可用后写教程;B. 只外链并提示风险;C. 暂不写 | A,P1 实测,失败则退回 B |
| OQ6 | 是否给 typecho 主仓库提 PR:(1) 把 admin/copyright.php:8、admin/custom-fields.php:69、var/Widget/Users/Edit.php:160 三处源码链接和 CONTRIBUTING.md:25/29/35 改成新站 URL(E2 → /guide/content/custom-fields,E3 → /guide/content/users#permission-table);(2) 在 typecho/languages 按 https 源串重新生成 .mo(现有语言包仍是 http://,两条带链接的提示匹配不到译文,在其他语言界面中回退成中文);(3) 删除 admin/editor-js.php:86 的死字符串“Markdown语法帮助”,或接上帮助按钮并指向 guide/content/posts;(4) 补 CODING_STYLE.md(或指向 coding-style);(5) 删除过时的 tools/Dockerfile;(6) 清理三项无效评论选项 |
A. 是,P5 后统一提;B. 否 | A |
| OQ7 | 翻译过期是否在页面上提示 | A. 只出 CI 报告;B. 构建期注入数据显示横幅 | A(v1),B 留给 v2 |
| OQ8 | URL 前缀 /guide/…、/develop/… 是否接受(较长,但与侧边栏一一对应) |
A. 接受;B. 使用指南去掉 /guide 前缀放根下 |
A:两棵树边界清晰,URL 即可看出所属侧边栏 |