需求

有时候首页只想放一些关于编程的文章,日记一类不希望被放在首页上直接被看到,但是又想通过写文章记录下来。

最后实现了在文章.md文件开头添加notshow配置项,当notshow = true时首页不显示。

实现方法

在网上搜索看到这个:
【Hexo】 设置首页隐藏指定文章

这篇文章作者使用的是next主题,我用的是fluid,并没有他文章里所写的index.swig文件。但是在同路径下有index.ejs。虽然没有学过ejs但是可以看出来两个文件应该是相同的作用,即生成index.html文件。

作者使用的方法是for循环里添加一个if判断,我去查看了ejs的文档,其中第一个示例就是关于if:

1
2
3
<% if (user) { %>
<h2><%= user.name %></h2>
<% } %>

因此,打开fluid的文件index.ejs,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<%
if (theme.index.slogan.enable) {
page.subtitle = theme.index.slogan.text || config.subtitle || ''
}
page.banner_img = theme.index.banner_img
page.banner_img_height = theme.index.banner_img_height
page.banner_mask_alpha = theme.index.banner_mask_alpha
%>

<% page.posts.each(function (post) { %>
<div class="row mx-auto index-card">
<% var post_url = url_for(post.path), cover = post.cover || theme.post.default_cover %>
<% if(cover) { %>
<div class="col-12 col-md-4 m-auto index-img">
<a href="<%= post_url %>" target="<%- theme.index.post_url_target %>">
<img src="<%= url_for(cover) %>" alt="<%= post.title %>">
</a>
</div>
<% } %>
<article class="col-12 col-md-<%= cover ? '8' : '12' %> mx-auto index-info">
<h1 class="index-header">
<% if (theme.index.post_sticky && theme.index.post_sticky.enable && post.sticky > 0) { %>
<i class="index-pin <%= theme.index.post_sticky && theme.index.post_sticky.icon %>" title="Pin on top"></i>
<% } %>
<a href="<%= post_url %>" target="<%- theme.index.post_url_target %>">
<%= post.title %>
</a>
</h1>

<a class="index-excerpt" href="<%= post_url %>" target="<%- theme.index.post_url_target %>">
<div>
<% var excerpt = post.description || post.excerpt || (theme.index.auto_excerpt.enable && post.content) %>
<%- escape_html(strip_html(excerpt).substring(0, 200).trim()).replace(/\n/g, ' ') %>
</div>
</a>

<div class="index-btm post-metas">
<% if(theme.index.post_meta.date ) { %>
<div class="post-meta mr-3">
<i class="iconfont icon-date"></i>
<time datetime="<%= full_date(post.date, 'YYYY-MM-DD HH:mm') %>" pubdate>
<%- date(post.date, config.date_format) %>
</time>
</div>
<% } %>
<% if(theme.index.post_meta.category && post.categories.length > 0) { %>
<div class="post-meta mr-3 d-flex align-items-center">
<i class="iconfont icon-category"></i>
<%- partial('_partials/category-chains', { categories: post.categories, limit: 1 }) %>
</div>
<% } %>
<% if(theme.index.post_meta.tag && post.tags.length > 0) { %>
<div class="post-meta">
<i class="iconfont icon-tags"></i>
<% post.tags.each(function(tag){ %>
<a href="<%= url_for(tag.path) %>">#<%- tag.name %></a>
<% }) %>
</div>
<% } %>
</div>
</article>
</div>
<% }) %>

<%- partial('_partials/paginator') %>

猜测从这里开始进入每篇文章的循环:

1
<% page.posts.each(function (post) { %>

因此把

1
<% if(post.notshow != true) { %>

放在下面,如果在文章开头写了notshow = true,那么文章将不会被加入到首页文章列表。

最后在下面补上大括号结束

1
<% } %>

修改后文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<%
if (theme.index.slogan.enable) {
page.subtitle = theme.index.slogan.text || config.subtitle || ''
}
page.banner_img = theme.index.banner_img
page.banner_img_height = theme.index.banner_img_height
page.banner_mask_alpha = theme.index.banner_mask_alpha
%>

<% page.posts.each(function (post) { %>
<% if(post.notshow != true) { %>
<div class="row mx-auto index-card">
<% var post_url = url_for(post.path), cover = post.cover || theme.post.default_cover %>
<% if(cover) { %>
<div class="col-12 col-md-4 m-auto index-img">
<a href="<%= post_url %>" target="<%- theme.index.post_url_target %>">
<img src="<%= url_for(cover) %>" alt="<%= post.title %>">
</a>
</div>
<% } %>
<article class="col-12 col-md-<%= cover ? '8' : '12' %> mx-auto index-info">
<h1 class="index-header">
<% if (theme.index.post_sticky && theme.index.post_sticky.enable && post.sticky > 0) { %>
<i class="index-pin <%= theme.index.post_sticky && theme.index.post_sticky.icon %>" title="Pin on top"></i>
<% } %>
<a href="<%= post_url %>" target="<%- theme.index.post_url_target %>">
<%= post.title %>
</a>
</h1>

<a class="index-excerpt" href="<%= post_url %>" target="<%- theme.index.post_url_target %>">
<div>
<% var excerpt = post.description || post.excerpt || (theme.index.auto_excerpt.enable && post.content) %>
<%- escape_html(strip_html(excerpt).substring(0, 200).trim()).replace(/\n/g, ' ') %>
</div>
</a>

<div class="index-btm post-metas">
<% if(theme.index.post_meta.date ) { %>
<div class="post-meta mr-3">
<i class="iconfont icon-date"></i>
<time datetime="<%= full_date(post.date, 'YYYY-MM-DD HH:mm') %>" pubdate>
<%- date(post.date, config.date_format) %>
</time>
</div>
<% } %>
<% if(theme.index.post_meta.category && post.categories.length > 0) { %>
<div class="post-meta mr-3 d-flex align-items-center">
<i class="iconfont icon-category"></i>
<%- partial('_partials/category-chains', { categories: post.categories, limit: 1 }) %>
</div>
<% } %>
<% if(theme.index.post_meta.tag && post.tags.length > 0) { %>
<div class="post-meta">
<i class="iconfont icon-tags"></i>
<% post.tags.each(function(tag){ %>
<a href="<%= url_for(tag.path) %>">#<%- tag.name %></a>
<% }) %>
</div>
<% } %>
</div>
</article>
</div>
<% } %>
<% }) %>

<%- partial('_partials/paginator') %>