从头开始创建和创建一个简单的Hexo主题
从头开始创建一个简单的博客主题。风格主要参考Hexo主题中的Noise主题。
在开始之前,你必须知道:
本文使用的模板引擎是ejs,使用的CSS预处理器是stylus。这也是hexo项目预装的render插件。如果你想使用其他模板或其他CSS预处理器,可以安装相应的render插件。例如,我的 Even 主题使用 Swig 和 SCSS。
目录结构
主题的目录结构以内置主题宽度为例:
.
├── languages 语言文件,用于国际化
├── layout 页面模板文件
├── scripts Hexo 脚本
└── source 主题资源文件,包括页面样式,脚本,字体等我们在文件夹里面新建一个mes,然后在里面 在deme- theme创建一个新的语言、脚本布局、❙、源文件夹。
创建布局模板
在布局中创建文件index.ejs。主页将使用此布局模板生成 HTML 文件。
layout/index.ejs:
Hello Word
编辑站点配置文件中的主题配置,使用我们刚刚创建的 现在我们需要向页面添加导航。由于导航不会只出现在首页,所以我们会在 这里使用了变量 中的内容并添加 。目录 其实我们需要导航菜单根据我们的需要来显示不同的项目。上面的写法不适合编辑。所以我们将导航菜单的配置添加到主题的配置文件中。在 所以我们可以在 当需要添加导航链接时,可以直接添加到配置文件中,例如添加Github的链接: 此外,还可以添加其他需要的配置,例如RSS 、评论等等。 接下来我们将完善首页模板,以显示文章列表。前面提到,Hexo提供了各种有用的变量,这里会用到变量 所以这里我们使用 从 由于首页在展示文章内容时使用了 Hexo提供了属性 至此我们已经完成了首页的页面结构,但是我们还没有添加样式,所以看起来很丑。我们将在 由于Hexo在创建新项目时安装了 在这个文件夹中的 此时我们会看到网站的首页是这样的: ❙ 我们的文章是存储在页面的 首页显示的文章数量可以通过页面配置文件中的字段 这里我们使用另一个辅助函数 由于这是文章模板,因此变量 其实结构和首页类似,只是内容不同该文章未显示。添加存档页面样式: 还记得我们一开始创建的 当此字段为空时,默认使用文件 目前我们需要主题根据所选语言自动调整上述内容。然后我们需要编辑 编辑后和以前相比确实没有什么变化,至少看起来是这样。现在我们添加中文文件: 然后我们将站点配置文件中的字段 如果你有耐心看完我的这么多废话,那么恭喜你,你应该对如何写Hexo主题有所了解了。其实说白了,Hexo就是将这些Markdown文件按照不同的布局模板,填写相关数据生成HTML页面,然后将 本文没有提及页面的JavaScript部分。其实和写CSS样式是一样的。在 本文所有代码均在主题-example 中。主题 - example
<%- partial('_partial/head') %>
<%- partial('_partial/header') %>
<%- body %>
Run hexo server --debug 以调试模式打开Hexo本地服务器预览,访问http://localhost:4000/。 添加页面导航
layout 中创建一个共享布局文件 layout.ejs,同时创建一个 head。保存 HTML 标头并创建文件 _partial/header.ejs 来编写页面的导航部分。 layout/layout.ejs:
<%- partial('_partial/head') %>
<%- partial('_partial/header') %>
<%- body %>
layout.ejs文件通过函数partial()包含其他文件请参阅模板 |Hexo详细了解。layout/_partial/head.ejs:
config site,它包含站点配置(即中的y‼_ml_ml_ml_y♸根目录配置)。此外,Hexo还提供了很多可以在模板中使用的变量。有关详细信息,请参阅变量 |Hexo。 layout/_partial/header.ejs: 你好世界布局自动继承目录布局并补充❀的内容。我们得到一个带有导航菜单的 Hello World 页面。 添加主题配置文件
thmem-demo下新建主题配置文件_config.yml,添加需要配置的字段。然后就可以通过变量theme获取配置文件中的配置。 theme-demo/_config.yml:menu:
Home: /
Archives: /archives中使用theme.menu进入菜单。将 header.ejs 编辑为: menu:
Home: /
Archives: /archives
Github: https://github.com/ahonn首页添加文章列表
page。 page根据不同的页面会有不同的属性。具体的属性和可以获得的数据可以在这里查看。 变量的posts属性来获取文章数据的集合。编辑文件index.ejs:page.posts页面获取一篇文章的数据,并获取文章标题、内容等数据填写在模板中。文章创建时间处理使用date()函数,这是Hexo提供的时间处理辅助函数。除非另有说明,本文使用的函数均为Hexo的效用函数。 文章摘录
post.content,即文章的全部内容。这样首页就会显示每篇文章的内容。我们并不是真的想在主页上显示那么多内容,我们只想显示文章的片段。 snippet来获取文章的片段,但这里需要在文章中添加标签。添加此标签后,post.excerpt 将收到该标签之前的内容。如果这样的标签不存在,则 post.excerpt 将为空。所以首页文章内容部分的post.content可以替换为post.excerpt。 添加页面样式
source文件中创建一个文件夹css来存储样式文件。hexo-renderer-stylus插件,所以我们不需要任何额外的步骤,只需将样式文件放入css夹紧的文件。Hexo生成页面时,会将源source中的所有文件复制到生成的公共文件中,然后将样式编译为css文件。 css中创建style.style,编写一些基本样式并导入所有样式‼所以最终编译后只会有一个文件style .css。创建_partial/header.styl和_partial/post.style来存储页面导航和文章样式,并在‼️: ‼️导入 这两个文件。 _partial/header.styl:.header {
margin-top: 2em
display: flex
align-items: baseline
justify-content: space-between
.blog-title .logo {
color: #AAA;
font-size: 2em;
font-family: "Comic Sans MS",cursive,LiSu,sans-serif;
text-decoration: none;
}
.menu {
margin: 0;
padding: 0;
.menu-item {
display: inline-block;
margin-right: 10px;
}
.menu-item-link {
color: #AAA;
text-decoration: none;
&:hover {
color: #368CCB;
}
}
}
}_partial/post.style:,对于我们需要的页面,除其他外, :这里我们使用另一个辅助函数 css ():layout/_partial/head.ejs
<%- css('css/style.css') %>
>source/_post/目录下。现在我们复制并粘贴原始的hello-world.md 10 次以上,然后显示网站的主页。你会发现首页只显示了10篇文章。 on_page来调整,但不可能将所有文章放在一页上,所以现在我们添加分页文章列表。new to .ejs...
<%- partial('_partial/paginator') %>
分页器,它可以帮助我们插入分页链接。 添加文章详情页详情页对应post .ejs ,新post.ejs: ‷ "YYYY-MM-DD") %>
page表示Data是文章数据,而不是首页的文章数据集合。 ? date(post.date, "YYYY-MM-DD") %>
<%- partial('_partial/paginator') %>css/_partial/archive.styl:.archive {
margin: 1em auto;
padding: 30px 50px;
background-color: #fff;
border: 1px solid #ddd;
box-shadow: 0 0 2px #ddd;
.post-archive {
list-style: none;
padding: 0;
.post-item {
margin: 5px 0;
.post-date {
display: inline-block;
margin-right: 10px;
color: #BABABA;
}
.post-title {
color: #368CCB;
text-decoration: none;
}
}
}
}
国际化
语言吗?是的,它是用来添加18世纪多种语言页面语言在页面配置文件中设置为语言。 languages/default.yml。现在让我们添加这个文件。我们将确定主题的默认语言为英语: Menu:
Home: Home
Archives: Archives
Github: Github
Paginator:
Prev: Prev
Next: Nextheader.ejs和paginator.ejs这两个文件:_partial/header.ejs.%_partial/header.ejs♾。 文件名相同)。当您再次访问该页面时,您会发现导航和分页部分的文字已变为中文。
_partial/paginator.ejs: <% if (page.total > 1){ %>
<% } %> languages/zh-CN.ymlMenu:
Home: 首页
Archives: 归档
Github: 交友
Paginator:
Prev: 上一页
Next: 下一页语言更改为❝❙zh-CN zh- CN.yml最终总结
source中的复制到生成的public中中间的文件夹该进程编译stylus/less/sass等需要编译的文件。 source/js中编写JavaScript脚本,然后将其粘贴到模板中。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网
