【Hugo】冰箱装修记录

3457字

和css的战斗永无止境!

cactus初始主题:git传送门

本仓库地址:git传送门

为什么选择cactus

我的hugo主要做什么

我使用博客的经历,从当年的百度空间、不老歌到后来的wordpress,自始至终,最主要的用途就是拿来放我的同人小说。而最近从wp转到hugo,一是不想再因为换一个平台就重新再发一次,二是我怎么也搞不明白wp的分类显示顺序竟然是乱的,强迫症忍不下去。

基于这个目的,我对主题的要求是满足能够舒适便捷地阅读5000字以上小说,并且能兼顾信息量的展现与简洁。

目录与返回顶部集成

移动端目录和导航栏

界面兼顾了简洁与信息量

然后在小球飞鱼发现了这个主题,又看了主题开发者的文档与demo站,好的,就是你了!

  

装修大原则

1. 做好本地备份 如果是像我一样重新装修的朋友,请务必先备份自己最近、没有问题的hugo文件。或者在备份上先装修,确定没有问题了再正式推送到git上部署。

2. 善用localhost与浏览器的开发者工具

第1步:推倒重来

我这方面非常简单粗暴,直接把主题代码down下来,把config搬出来,打开localhost看看,没什么问题,可以继续了。

第2步:修改config

总之先把站点的基本信息改了,先让我有个“这就是我的赛博老窝了”的归属与快乐!

  

第3步:确定内容分类和主页信息

content的规划

我对自己博客内容规划如下

确定主页结构

由此我也确定了,上面的二级分类以页面归档形式呈现,而三级分类就是我们常用的分类categories了。这些都是要在主页上展现的,此外还有最近发布的文章。

因为我的content文件夹下有两个文件夹都是放文章的,为了让主页中显示的最近文章能包含这两个文件夹的内容,所以我首先把config表中的mainsection改为了“content”。

然后把index中定义mainposts部分的代码,修改如下:

1{{ $mainPosts := (sort ( where site.RegularPages "section" "!=" site.Params.mainSections ) "Date" "desc") }}

里面的mainsection就是我们在config中定义的“content“文件夹。where的筛选条件,我则是照搬了下文第5步里统计全站文章数的代码。

修改标签云

cactus主题的初始主页为站点信息、标签云和最近文章,我第一步是把标签云由展示tag改为展示categories。因为hugo默认支持的分类方式就是categories和tag,这一步还是挺顺利的。

相关代码在layouts/index.html中,从41行开始,只改了几个关键字和style中的样式。

 1    <span class="h1"><a href="{{ .Site.Params.mainSection | absURL }}">{{ .Site.Params.mainSectionTitle | default "" }}</a></span>
 2    {{ if (and (and (isset .Site.Params "tagsoverview") (eq .Site.Params.tagsOverview true)) (gt (len .Site.Taxonomies.tags) 0)) }}
 3    <span class="h1">Category</span>
 4    <span class="article-category--list">
 5      {{ $AllRegularPagesCount := len .Site.RegularPages }}
 6      {{ range $elem := .Site.Taxonomies.categories.Alphabetical }}
 7      ·<a style="font-size: 0.9rem;" href="{{ $elem.Page.Permalink }}">
 8       {{- .Page.Title -}}&ensp;
 9      </a>
10      {{ end }}
11    </span>

  

第4步:目录和导航栏

固定目录的显示

在使用的过程中我发现,初始的cactus主题的文章页是默认折叠目录与导航栏的。这样虽然可以让人更容易沉浸入阅读,但使用时却不太方便,需要返回到页面顶部才有可能打开目录。于是我根据开发者工具找到了文章页的导航条代码,经过几番折腾,才明白原来因为外面包裹着一个id为目录的span,原理我不懂,总之去掉就好了!

剩下的就是在scss/partial/post/action_desktop.scss里,修改了一下电脑端关于导航条显示与屏幕显示宽度的适配。

第5步:添加文章数与字数统计

修改全站文章数量统计的筛选代码

这部分完全是参考了塔塔的做法,因为我的content分类方法也是通过直接在content下创建新的writings文件夹。

字数统计增加对中文的识别

全站的文章数量统计搞定了,但是却出现了另一个新的问题,就是统计的字数不对。百思不得其解的我只好上help组求助,在塔塔的帮助下解决了问题,原来是初始的cactus里少了对中文的识别。把下面这句添加到config配置表的开头就可以了,如果有朋友遇上类似的问题可以参考这个思路排查问题。

1hasCJKLanguage = true

  

第6步:在list显示tag

引入代码

初始的主题里,list页只显示年份、发布时间和文章标题 ,但对于我来说还少了个比较关键的tag作为内容信息的提示。

先在layouts里找到list的相关代码,然后在post-item的有序列表模块里添加tag的代码。这段也不是我写的,我是直接从artile页的代码里搬来的。

1{{ if gt .Params.tags 0 }}
2<div class="list-tag">
3{{ range $index, $value := .Params.tags }}
4{{ if gt $index 0 }} {{ print "" }} {{ end }}
5<a class="tag-link" href="{{ "/tags/" | relLangURL }}{{ $value | urlize }}" rel="tag">{{ $value }}</a>
6{{ end }}
7</div>
8{{ end }}

通过定义引入css

然后上面这段div我定义为了list-tag,接下来就是在article的scss文件里自定义它的样式。

 1.list-tag {
 2  position: absolute;
 3  right: 10%;
 4  display: inline;
 5  
 6
 7	.tag-link {
 8	&:before {
 9	  content: "#";
10	  @include underline(10px, $color-link);
11	}
12	font-size: .75em;
13	padding: .1em .5em;
14	border-radius: 2px;
15	background-color: #6c95cfbe;
16	color: azure;
17	}
18}
19

适配移动端

这方面其实做了很多尝试,我的git上传记录里有一大堆的诸如“test-list tag样式调整”,因此就不一一列举了(主要还是懒得翻代码……)。

该段代码位于scss/partial/article.scss,141-158行

 1@media screen and (min-width: 600px) {
 2  .list-tag {
 3    display: inline-block;
 4    position: absolute;
 5    right: 0em;  
 6  }
 7}  
 8
 9@media screen and (max-width: 599px) {
10  .list-tag {
11    display: block;
12    height: .5em;
13    margin-bottom: 2em;
14    margin-left: .4em;
15    clear: left;
16  }
17}

  

第7步:引入Umami的流量统计

参考文档

1. 搭建 umami 收集个人网站统计数据

2. 使用Railway服务搭建umami网页数据统计分析系统

如果是和我一样不熟悉命令行操作的朋友,务必看第二篇参考文档,注意其中一个变量是PGHOST即可。

不记入localhost

引入umami后遇到的第一个问题是,localhost的访问也会被纳入统计。我当然是不想要这样的“虚假繁荣”(呸)。于是继续翻看官方文档和google是否有能抄的代码……结果是失败了。后来我求助询问了塔塔,她直接把代码复制下来给我了(感谢!

相关代码在layouts/partials/head.html中,在umami的组件外包裹了一个if条件。

1{{ if not .Site.IsServer }}
2<script async defer data-website-id="填自己的" src="填自己的"></script>
3{{- end -}}

  

第8步:添加至google搜索

虽然同担多地狱,但是同人女依然希望被同担找到。所以我还是把博客添加到了google搜索中。不过我提供的fork仓库里删掉了这部分代码,如果有同样需要的朋友可以参考下列文档,按步骤进行添加即可。

让google和百度搜索到你的博客

  

第9步:文章页引入description

接下来就是动工文章页了,作为摘要的description方便展示小说的背景等概要情况,对我来说比较重要。因为cactus初始没有相关代码,所以我是从stack主题里搬来的。

在single页的html里添加如下代码:

1{{ with .Params.description }}
2<h4 class="article-description">
3  <a style="color: #535151 ;"></a>
4  {{ . }}
5</h4>
6{{ end }}

然后在article的scss中引入“article-description”的css样式。

  

第10步:引入twikoo评论功能

最后来到“可以没人用但我不能没有的评论功能”了!

为什么选择twikoo

评论系统我最初使用过waline,因为有管理后台,界面也好看。但后来又了解到了twikoo,twikoo最大的特点就是前端和后台是集成在一起的,于是我决定——就它了!

通过cdn引入

cactus初始是不支持twikoo的,所以这里我折腾了很久。因为最开始对CDN引入是一窍不通。先是跟着步骤更仔细的waline引入教程,加上我的“奇思妙想”,但是倒腾了两个小时依然没有成功。

于是我先是询问塔塔是如何在自己博客实现CDN引入,然后在等待的过程中自己用开发者工具在页面查看,并决定再次照搬代码,直接在comments.html里覆盖原来的评论功能代码。依然失败……抱着死马当活马医的心态,我复制了其他博客教程里的CDN路径,这次出现了!……原来是CDN路径不对啊。

waline成功后我就直接把waline替换为twikoo了。相关代码如下:

 1  <div class="blog-post-comments">
 2    <h2 class="title is-5"> 评论</h2>
 3    <div id="tcomment"></div>  
 4
 5    <script src="https://unpkg.com/twikoo@1.6.7/dist/twikoo.all.min.js"></script>
 6    <script>
 7    twikoo.init({
 8      envId: '',  //这里填Vercel的部署页
 9      el: '#tcomment',
10      // region: '',
11      // path: 'window.location.pathname', // 用于区分不同文章的自定义 js 路径,如果您的文章路径不是 location.pathname,需传此参数
12      // lang: 'zh-CN', // 用于手动设定评论区语言,支持的语言列表 https://github.com/imaegoo/twikoo/blob/dev/src/js/utils/i18n/index.js
13    })
14    </script>
15  </div>

vercel被墙

最后因为vercel被DNS污染,所以我又购买了个域名,用来安放它。

  

其它:根据个人喜好修改css

其余的css修改,可以通过开发者工具找到相应的css代码所在,再多尝试修改即可。

最后,非常感谢许多出了相关功能、流程以及亲自提供思路与代码的朋友们!有任何疑问也可以随时评论留言,我会在能力范围之内提供帮助。

评论