Series / 系列
Hexo 博客工程化
- 01 如何使用 GitHub + Hexo 快速搭建个人网站
- 02 Hexo命令行参数详解:除了--tags和--categories还可以使用哪些?
- 03 Hexo中--tags和--categories的区别详解
- 04 Hexo 中 hexo generate 之前都需要使用 hexo clean 命令吗?
- 05 为什么导航栏跳转没有反应
- 06 从本地部署到自动部署:Hexo博客GitHub Action配置实践
- 07 Hexo博客评论系统方案对比
- 08 hexo博客的updated字段
- 09 Hexo主题优化:简化category和tag页面实现
Hexo主题优化:简化category和tag页面实现
优化背景
最近在维护个人Hexo博客时,发现主题中的category.ejs和tag.ejs文件实现较为复杂,代码冗余度较高。这两个文件包含了大量重复代码,只是在页面标题和描述上有所不同。
同时,我注意到官方的hexo-theme-landscape主题在实现这两个页面时非常简洁,每个文件只有一行代码。这引起了我的兴趣,决定参考其实现方式来优化自己的主题。
优化目标
- 简化代码结构:减少代码冗余,提高代码可读性
- 提高可维护性:将通用逻辑集中到一个模板中,后续修改只需更新一个文件
- 保持原有功能:确保优化后所有原有功能都能正常工作
- 遵循最佳实践:参考官方主题的实现方式,采用更合理的代码组织方式
优化方案
参考hexo-theme-landscape主题的实现方式,我采用了以下方案:
- 创建通用模板:在
themes/sido-meet/layout/partial/目录下创建archive.ejs模板文件,包含所有列表页面的通用结构 - 修改category.ejs:使用
<%- partial('partial/archive', { ... }) %>引用通用模板,并传递相应参数 - 修改tag.ejs:与category.ejs类似,使用通用模板并传递相应参数
- 清理冗余文件:删除不必要的文件,保持代码结构整洁
实现步骤
1. 创建通用模板
在themes/sido-meet/layout/partial/目录下创建archive.ejs模板文件,包含以下内容:
1 | <div class="blog-container"> |
2. 修改category.ejs
将themes/sido-meet/layout/category.ejs文件修改为:
1 | <%- partial('partial/header') %> |
3. 修改tag.ejs
将themes/sido-meet/layout/tag.ejs文件修改为:
1 | <%- partial('partial/header') %> |
4. 配置版本控制
修改.gitignore文件,添加规则只追踪themes/sido-meet主题:
1 | # Themes |
优化成果
1. 代码简化
- category.ejs:从64行减少到6行,减少了90.6%的代码
- tag.ejs:从64行减少到6行,减少了90.6%的代码
- 总代码量:减少了134行代码,提高了代码可读性
2. 可维护性提升
- 集中管理:所有列表页面的通用逻辑都集中在
archive.ejs模板中 - 易于修改:后续修改只需更新
archive.ejs文件,无需修改多个文件 - 一致性:确保了category和tag页面的显示效果完全一致
3. 功能保持
虽然代码简化了,但所有原有功能都得到了保留:
- 页面标题和描述
- 文章列表显示
- 侧边栏分类
- 最近文章
- 文章排序功能
4. 代码组织更合理
- 遵循最佳实践:参考官方主题的实现方式
- 命名规范:使用
archive.ejs作为通用模板名称,与官方主题保持一致 - 结构清晰:模板文件职责明确,代码组织更合理
技术细节
参数传递
在使用通用模板时,通过传递参数来实现动态内容:
1 | <%- partial('partial/archive', { |
模板渲染
通用模板使用传递的参数来渲染页面内容:
1 | <h1 class="blog-title"><%= page_title %></h1> |
版本控制
通过修改.gitignore文件,确保只有sido-meet主题会被版本控制系统追踪,避免其他主题文件污染仓库。
结论
通过参考hexo-theme-landscape主题的实现方式,我成功优化了自己主题中的category和tag页面实现。这次优化不仅简化了代码结构,提高了可维护性,还保持了所有原有功能。
这种通过创建通用模板来实现代码复用的方式,是一种很好的实践,值得在其他类似场景中推广使用。它不仅可以减少代码冗余,还可以提高代码的一致性和可维护性。
通过这次优化,我对Hexo主题的代码组织方式有了更深入的理解,也为后续的主题维护和开发打下了更好的基础。
Share / 分享
评论