这是一套为「资源分享 + 技术博客」混合站点设计的 Hexo 主题。和常见主题最大的区别是:
它把文章和网盘资源当成两种一等公民,而不是让资源去硬凑文章的排版。

这套主题解决什么问题

现成的 Hexo 主题大多假设你的内容都是文字。但资源分享站点需要的东西完全不同:

需求 普通主题 Echo 主题
版本 / 平台 / 大小 / 语言 手动写进正文 结构化字段,自动渲染表格
多个网盘链接 一长串裸链接 卡片式列表 + 复制提取码
按类型筛选资源 用分类勉强凑 独立的资源库与筛选条
文章与资源混在一起 只能混着 首页 / 文章 / 资源库三个入口

核心设计原则只有一句话:资源就是带有 resource 字段的文章。你不用学第二套写法,
只要在 front-matter 里加一段配置,同一篇文章就会自动进入资源库。

三个内容入口

主题把内容分成三条互不干扰的流:

  1. 首页 / —— 顶部大图 + 资源分类入口 + 最新发布(文章与资源混排)
  2. 文章 /articles/ —— 只收录普通文章,不出现资源帖
  3. 资源库 /resources/ —— 只收录资源帖,可按影视 / 游戏 / MOD / 汉化筛选

判断规则非常简单:

1
2
resource.enable === true   →  资源帖,进资源库
resource.enable 不存在/为假 → 普通文章,进文章页

所以你不会遇到「同一篇内容在两个列表里重复出现」的问题。

目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
themes/echo/
├── _config.yml # 主题配置(所有开关都在这里)
├── layout/ # EJS 模板
│ ├── layout.ejs # 全站骨架
│ ├── index.ejs # 首页
│ ├── article-index.ejs # 文章列表页
│ ├── resource-index.ejs # 资源库列表页
│ ├── post.ejs # 文章 / 资源详情页(两者共用)
│ ├── page.ejs # 独立页面
│ ├── archive.ejs # 归档
│ ├── category.ejs # 分类
│ ├── tag.ejs # 标签
│ ├── _partial/ # 可复用组件(导航、卡片、分页…)
│ └── _rail/ # 左右侧栏的各个小组件
├── scripts/ # 生成器与模板辅助函数
│ ├── helper.js # 所有 echo_* helper(图标、日期、配色派生…)
│ ├── resource.js # 资源库与搜索索引生成器
│ ├── articles.js # 文章列表生成器
│ └── category.js # 分类页生成器
└── source/ # 静态资源
├── css/echo.css # 全站样式
├── js/echo.js # 交互脚本
└── images/ # 主题自带图片

各部分职责

_config.yml 是你唯一需要经常改的文件。配色、宽度、导航菜单、侧栏组件开关
全在这里,每个配置项都带中文注释。

layout/ 决定页面长什么样。_partial/ 放的是被多个页面复用的片段,
比如 post-card.ejs(文章卡片)、pagination.ejs(分页);
_rail/ 放的是侧栏小组件,比如 profile.ejs、calendar.ejs。
注意资源详情页和文章详情页共用 post.ejs —— 靠 front-matter 里
有没有 resource.enable 来决定渲染成哪种形态。

scripts/ 是 Hexo 的扩展点。resource.js 负责把带 resource 字段的文章
聚合成 /resources/ 下面的各个页面,同时输出 search.json 供站内搜索使用。
helper.js 集中定义所有模板可调用的 echo_* 函数,改它会影响全部模板。

source/ 是纯静态资源,构建时会原样复制到 public/。

内容与主题的边界

一个容易被搞混的点:文章内容放在站点根目录的 source/_posts/,而不是主题里。

1
2
3
4
5
6
7
F:\Echo\
├── source/ # ← 你的内容在这里
│ ├── _posts/ # 文章与资源帖(Markdown)
│ ├── about/ # 独立页面
│ └── images/covers/ # 封面图
├── themes/echo/ # ← 主题(可以整个替换/分享)
└── _config.yml # 站点配置

这样做的好处是:主题可以打包分享给别人,内容完全跟着你自己走。

下一篇

下一篇讲安装与启用,以及站点配置 _config.yml 里每一项的含义。