## DevFolio For Typecho

专为独立开发者、技术博主、开源作者打造的 Typecho 极简响应式主题。
Content-First · Minimalist · Extensible
✨ 特性
🎨 视觉设计
| 特性 | 说明 |
|---|---|
| 暗黑模式 | 支持浅色 / 深色 / 跟随系统三种模式,localStorage 持久化偏好 |
| 响应式布局 | 移动端 / 平板 / 桌面三端适配,断点 640px / 1024px / 1280px |
| 毛玻璃导航 | sticky 定位 + backdrop-filter: blur(12px) 毛玻璃效果 |
| 设计令牌 | CSS 自定义属性驱动的色彩体系,后台可配置主色、内容宽度、圆角 |
| 代码高亮 | 集成 highlight.js 11.9,支持 4 种主题(Default / GitHub Dark / Atom One Dark / Monokai) |
| Mac 风格代码块 | 红黄绿三色圆点标题栏 + 语言标签 + 文件名 + 复制按钮 + 行高亮 |
📝 内容增强
| 特性 | 说明 |
|---|---|
| 卡片式首页 | 文章以卡片网格展示,自动提取正文首张图片为缩略图 |
| 阅读时间 | 基于中文 500 字/分钟 + 代码行加权计算的阅读时间估算 |
| 字数统计 | 精确的中英文混合字数统计,文章列表中展示 |
| 内容过时警告 | 修改时间超过 1 年的文章自动显示黄色警告横幅 |
| 自动 TOC 目录 | 根据 h2/h3/h4 标题自动生成桌面端左侧悬浮目录,IntersectionObserver 滚动高亮 |
| 移动端 TOC | 底部浮动目录按钮 + 右侧滑出面板 |
| 文章版权声明 | 底部自定义版权信息,支持 {title} {author} {url} {year} {date} 变量替换 |
| 图片灯箱 | 点击文章内图片全屏预览,ESC 或点击背景关闭 |
🔧 交互体验
| 特性 | 说明 |
|---|---|
| 汉堡菜单 | 移动端导航菜单切换,aria-expanded 无障碍支持 |
| 图片懒加载 | 原生 loading="lazy" + IntersectionObserver 降级方案 |
| 搜索快捷键 | Ctrl+K / Cmd+K 快速聚焦搜索框 |
| 外链安全跳转 | 外部链接弹窗确认,支持域名白名单 |
| 灯箱无阻塞 | pointer-events: none 确保未激活时不影响页面点击 |
🔒 安全与合规
| 特性 | 说明 |
|---|---|
| ICP 备案 | 页脚显示 ICP 备案号,后台可配置 |
| 公安备案 | 页脚显示公安备案号 + 图标,后台可配置 |
| 附件下载确认 | 独立跳转页 go.php,倒计时 5 秒,防止恶意下载直链 |
| 输出安全 | Typecho 内置转义机制自动处理所有用户输入 |
📊 统计与评论
| 特性 | 说明 |
|---|---|
| 建站时间 | 页脚展示「已运行 X 天」,后台设置站点成立日期 |
| 累计访客 | sessionStorage 去重计数,异步 fetch 递增 |
| 三种评论系统 | Typecho 原生 / Twikoo / Waline 一键切换 |
| RSS / JSON Feed | 页脚 RSS 和 JSON Feed 订阅链接 |
🛠 可扩展性
| 特性 | 说明 |
|---|---|
| 自定义 CSS | 后台文本框注入覆盖样式,无需修改源码 |
| 统计代码 | GA4 / 百度统计代码注入 |
| Logo + Favicon | 后台设置站点 Logo 和 Favicon URL |
| GitHub 链接 | 导航栏 GitHub 图标按钮 |
| 自定义字段 | cover_image / live_url / repo_url / tech_stack |
| 作品展示模板 | 独立页面模板,网格卡片展示项目 |
| 智能网址识别 | 编辑器粘贴纯 URL 自动识别为链接标题 |
🖼 效果预览
首页卡片布局
┌─────────────────────────────────────────────────┐
│ ┌──────────┐ ┌────────────────────────────────┐ │
│ │ │ │ 📅 2024-01-15 · ⏱ 5 分钟 · 1200 字│ │
│ │ 缩略图 │ │ │ │
│ │ │ │ 文章标题 │ │
│ │ │ │ │ │
│ └──────────┘ │ 摘要文本 摘要文本 摘要文本... │ │
│ │ → 阅读全文 │ │
│ └────────────────────────────────┘ │
└─────────────────────────────────────────────────┘文章详情页
┌──────┐ ┌─────────────────────────────┐
│ 文章 │ │ │
│ 目录 │ │ 文章标题 │
│ ∇ │ │ 📅 日期 · ⏱ 阅读时间 · 字数 │
│ │ │ │
│ │ │ 正文内容... │
│ │ │ │
│ │ │ ┌────────────────────┐ │
│ │ │ │ 版权声明 │ │
│ │ │ └────────────────────┘ │
│ │ │ ← 上一篇 | 下一篇 → │
│ │ │ 💬 评论区域 │
└──────┘ └─────────────────────────────┘🚀 快速开始
环境要求
| 依赖 | 最低版本 |
|---|---|
| Typecho | ≥ 1.3.0 |
| PHP | ≥ 7.4 |
安装步骤
- 下载主题压缩包,解压后得到
DevFolio文件夹 - 将
DevFolio文件夹上传到 Typecho 的/usr/themes/目录 - 将
go.php上传到 Typecho 根目录(附件下载确认功能需要) - 登录 Typecho 后台,进入 控制台 → 外观
- 找到 DevFolio 主题,点击 启用
- 进入 控制台 → 外观 → 设置外观,配置主题选项
⚙ 主题设置
启用主题后,在「设置外观」页面可配置以下选项:
🎨 外观
| 设置项 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| 站点 Logo URL | 文本 | 留空显示站点标题文字 | 空 |
| Favicon URL | 文本 | 浏览器标签页图标 | 空 |
| GitHub 主页链接 | URL | 导航栏 GitHub 图标 | 空 |
| 外观风格 | 选择 | 自动 / 浅色 / 深色 | 自动 |
💬 评论
| 设置项 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| 评论系统 | 选择 | Typecho 原生 / Twikoo / Waline | 原生 |
| Twikoo EnvId | 文本 | 选择 Twikoo 时必填 | 空 |
| Waline 服务端地址 | URL | 选择 Waline 时必填 | 空 |
📋 备案
| 设置项 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| ICP 备案号 | 文本 | 例:京ICP备12345678号 | 空 |
| 公安备案号 | 文本 | 例:京公网安备 12345678901234号 | 空 |
| 公安备案图标 | 文本 | 图标 URL,留空使用默认 | 空 |
📊 统计
| 设置项 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| 站点建立时间 | 文本 | 格式 YYYY-MM-DD | 空 |
📝 内容
| 设置项 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| 文章底部版权信息 | 文本 | 支持变量替换 | 空 |
| 代码高亮 | 选择 | 启用 highlight.js | 关闭 |
| 代码高亮主题 | 选择 | Default / GitHub Dark / Atom One Dark / Monokai | Default |
| 智能网址识别 | 选择 | 粘贴纯 URL 自动识别标题 | 关闭 |
🔒 安全
| 设置项 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| 外链跳转提示 | 选择 | 弹窗确认外部链接 | 关闭 |
| 外链白名单 | 多行文本 | 每行一个域名 | 空 |
| 附件下载确认 | 选择 | 下载确认页 go.php | 关闭 |
🔧 自定义
| 设置项 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| 自定义 CSS | 多行文本 | 无需修改源码 | 空 |
| 统计代码 | 多行文本 | GA4 / 百度统计 | 空 |
🏷 版权信息变量
在「文章底部版权信息」中,支持以下变量:
| 变量 | 替换为 | 示例 |
|---|---|---|
{title} | 文章标题 | DevFolio 主题发布 |
{author} | 文章作者 | Wzu |
{url} | 文章链接 | https://blog.wzu.me/xxx.html |
{year} | 发布年份 | 2024 |
{date} | 发布日期 | 2024-01-15 |
示例配置:
本文「{title}」由 {author} 原创发布,采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
原文链接:{url}📂 自定义字段
DevFolio 提供 4 个文章级自定义字段:
| 字段名 | 用途 | 示例值 |
|---|---|---|
cover_image | 作品封面图 URL | https://img.example.com/cover.png |
live_url | 在线演示地址 | https://demo.example.com |
repo_url | 源码仓库地址 | https://github.com/user/repo |
tech_stack | 技术栈标签 | Vue,Typecho,Tailwind CSS |
在文章编辑页面底部的「自定义字段」区域添加即可。
提示:首页卡片缩略图自动从正文第一张图片提取,无需手动设置 cover_image。📄 页面模板
作品展示 (page-showcase.php)
创建独立页面时选择模板「作品展示」,将以网格卡片布局展示所有已发布文章及其自定义字段:
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 封面图 │ │ 封面图 │ │ 封面图 │
│ Hover │ │ Hover │ │ Hover │
│ [演示] │ │ [演示] │ │ [演示] │
│ [源码] │ │ [源码] │ │ [源码] │
│─────── │ │─────── │ │─────── │
│ 项目名称 │ │ 项目名称 │ │ 项目名称 │
│ Vue PHP │ │ React Go │ │ Flutter │
└──────────┘ └──────────┘ └──────────┘每张卡片 hover 时显示「在线演示」和「查看源码」按钮(需设置对应自定义字段)。
📁 文件结构
DevFolio/
├── 🖼 screenshot.png # 主题缩略图(需自行提供)
├── 📄 style.css # 主题元信息注释(Theme Name/Author/Version/Requires)
├── 📄 functions.php # 主题设置面板 + 自定义字段注册 + 工具函数
│
├── 📄 index.php # 首页 / 归档列表模板
├── 📄 post.php # 文章详情页模板
├── 📄 page.php # 普通页面模板
├── 📄 page-showcase.php # 作品展示自定义页面模板
├── 📄 search.php # 搜索页模板
├── 📄 404.php # 404 错误页模板
│
├── 📂 parts/
│ ├── header.php # 页头(SEO Meta + 导航栏 + CSS加载)
│ ├── footer.php # 页脚(备案 + 统计 + JS加载)
│ └── comments.php # 评论区(原生评论系统)
│
├── 📂 components/
│ ├── post-card.php # 首页文章卡片(缩略图 + 摘要)
│ ├── post-meta.php # 文章元信息(日期/阅读时间/字数/分类)
│ ├── pagination.php # 分页导航
│ ├── toc.php # 文章目录容器
│ └── showcase-card.php # 作品展示卡片
│
└── 📂 assets/
├── 📂 css/
│ └── main.css # 主样式表
└── 📂 js/
└── theme.js # 主题脚本(暗黑模式/TOC/代码增强/灯箱/搜索/懒加载/高亮/外链/访客/URL识别)❓ 常见问题
启用主题后页面 500 错误
检查以下几点:
- 确认 Typecho 版本 ≥ 1.3.0,主题使用经典模板 API(
$this->need()、$this->options等) - 确认 PHP 版本 ≥ 7.4
- 检查
functions.php中是否有 PHP 语法错误 - 查看 Typecho 的
var/Typecho/目录是否完整
启用主题后点击无反应 / 鼠标变放大镜
灯箱遮罩层 .lightbox-overlay 使用 position: fixed; inset: 0 覆盖整个页面。确保 CSS 中包含 pointer-events: none(默认状态)和 pointer-events: auto(激活状态),否则透明遮罩会拦截所有点击。
首页显示 Fatal error: Cannot redeclare function
devfolio_extract_thumb() 函数被多次声明。确保 components/post-card.php 中使用 function_exists() 守卫:
if (!function_exists('devfolio_extract_thumb')) {
function devfolio_extract_thumb($content) { ... }
}CSS/JS 资源 404 或路径错误
主题使用 $this->options->themeUrl 生成资源路径,依赖于 Typecho 后台设置的 站点地址。如果路径不正确:
- 进入 控制台 → 设置 → 基本,检查「站点地址」是否正确
- 确认主题文件夹名称为
DevFolio(区分大小写)
如何启用代码高亮
- 后台 设置外观 → 代码高亮 → 选择「启用」
- 选择喜欢的主题(Default / GitHub Dark / Atom One Dark / Monokai)
- 代码高亮由 CDN 加载 highlight.js 11.9,需要网络连接
外链跳转提示如何配置
- 后台 设置外观 → 外链跳转提示 → 选择「启用」
在「外链白名单」中填写不需要提示的域名,每行一个,例如:
blog.wzu.me github.com typecho.org
导航菜单如何自定义
在 Typecho 后台 管理 → 独立页面 中创建的页面会自动出现在导航栏中。页面顺序由创建顺序决定。如需自定义排序或添加外部链接,可创建独立页面并设置「顺序」字段。
📝 更新日志
v1.0.0 (2024-06)
- 🎉 首个正式版本发布
- ✨ 支持 Typecho ≥ 1.3.0(经典模板 API)
- ✨ 卡片式首页布局,自动提取缩略图
- ✨ 左侧悬浮 TOC 文章目录
- ✨ 暗黑模式支持(浅色/深色/跟随系统)
- ✨ Mac 风格代码块增强(标题栏 + 复制 + 行高亮)
- ✨ highlight.js 代码语法高亮
- ✨ 图片灯箱(点击放大)
- ✨ 外链安全跳转提示 + 白名单
- ✨ 附件下载确认页
go.php - ✨ 文章底部版权信息(变量替换)
- ✨ 页脚备案信息(ICP + 公安)
- ✨ 建站时间 + 累计访客统计
- ✨ 三种评论系统支持(原生/Twikoo/Waline)
- ✨ 作品展示自定义页面模板
- ✨ 智能网址识别
- ✨ Logo + Favicon 自定义
- ✨ 响应式设计(移动端/平板/桌面)
- ✨ SEO 优化(OGP / Twitter Card / Schema.org)
- ✨ 阅读时间 + 字数统计
- ✨ 内容过时警告
- ✨ 搜索快捷键
Ctrl+K - ✨ 后台
themeConfig()配置面板 - ✨
window.DevFolioJS 配置桥接
📄 许可
本主题基于 GPL 2.0 协议发布,可自由使用、修改和分发。
🔗 链接
- 作者博客:blog.wzu.me
- Typecho 官网:typecho.org
- Typecho 主题开发文档:docs.typecho.org/themes