Featured image of post 建站日志(装修篇)

建站日志(装修篇)

没想到这种内容还有水第二篇的时候,讲讲站点装修吧。

TL;DR

你将会看到如下功能的更新:

  1. 样式微调与页面美化,包括字数统计、链接双栏显示、引用块颜色修改、浏览量统计、页脚修改等。
  2. 增加QQ音乐外链样式
  3. 基于waline和vercel的评论系统

1. 样式微调与页面美化

我完全不懂前端,这部分内容基本都是抄的/照猫画虎,记录的价值在于留一些索引、痕迹方便日后查找。

1.1 字数统计

底部字数统计抄了B1ain的博客,但实际用起来发现有点问题,报错信息是:

1
hugo-stack-site  | ERROR Rebuild failed: render: failed to render pages: render of "/404" failed: ".../themes/stack/layouts/404.html:...": execute of template failed at <partialCached "footer/footer" .>: error calling partialCached: ".../themes/stack/layouts/partials/footer/footer.html:...": execute of template failed at <div ($scratch.Get "total") 1000.0>: error calling div: can’t apply the operator to the values

我对这个不熟,只能看到报错内容是出自 div 函数的用法不对,即下面这段:

1
{{ div ($scratch.Get "total") 1000.0 }}

先单独测试了下($scratch.Get “total”)和 div(math.Div的alias)都能正常工作,这个语句在语法上看不出什么问题,那就有一个很直接的猜测:变量类型不对。

div 这个函数是出自hugo的function,于是查了下hugo function的文档,

发现 div 函数的入参是多个Number。

1
2
3
{{ range (where .Site.Pages "Kind" "page" )}}
    {{$scratch.Add "total" .WordCount}}
{{ end }}

这里面page.Page对象的.WordCount方法理应返回一个int;理论上没啥问题,但既然报错了,就改一下试试。

没找到hugo里查看变量类型的方法或函数,不过找到了强制类型转换(从string到int)的函数:int。放进去,解决了。

最终在 footer.html 里的内容:

1
2
3
4
5
6
7
8
<!-- Add total page and word count time -->
<section class="totalcount">
    {{$scratch := newScratch}}
    {{ range (where .Site.Pages "Kind" "page" )}}
        {{$scratch.Add "total" .WordCount}}
    {{ end }}
    发表了{{ len (where .Site.RegularPages "Section" "post") }}篇文章,总计{{div (int ($scratch.Get "total")) 1000.0 | lang.FormatNumber 2 }}k字
</section>

因为这玩意儿太DSL了没啥复盘的价值,所以列几个猜测:

  1. 可能是现在用的主题里有一些特殊设置/我用法不对(这是最有可能的);
  2. 可能hugo版本更新后这里有一点修改(修改math.Div这种基础的功能很蠢,几乎不可能)。

1.2 浏览量统计

浏览量从这儿抄的:莱特雷的博客

不过这个浏览量功能有点问题,比如我自己重复看也算次数。后续有时间精力再仔细修改。

1.3 链接双栏展示

双栏抄了失迹的博客

感谢失迹大佬,很多地方都参考了失迹的博客内容。

1.4 引用块颜色修改

让DeepSeek帮忙研究,最后研究出来应该改 <proj>/themes/stack/assets/scss/variables.scss 文件。改动的内容主要是(仅放了被修改的内容):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
/*
*   Card style
*/
:root {
    --card-separator-color: rgba(218, 218, 218, 0.812);
}

/* 省略一些内容 */

/*
*   Article content style
*/
:root {
    --blockquote-background-color: rgb(150, 150, 150);
    &[data-scheme="dark"] {
        --blockquote-background-color: rgb(95, 95, 95);
    }
}

1.5 页脚美化

我自己琢磨能行,照猫画虎的。在页脚的copyright这一行加上了协议;并且给页脚加了个“motto”,以便我方法加粗。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<footer class="site-footer">
    <section class="copyright">
        ...
        {{ with .Site.Params.footer.license }}
             · {{ . | safeHTML }} · 转载请注明出处
        {{ end }}
    </section>
    
    <section class="motto">
        {{ with .Site.Params.footer.motto }}
            {{ . | safeHTML }} <br/>
        {{ end }}
    </section>

使用的时候在 hugo.yaml 里加俩参数:

1
2
3
4
params:
    footer:
        motto: 不要消解那无慰藉的忠诚  # self-defined
        license:  <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/" target="_blank">CC BY-NC-SA 4.0</a>  # self-defined

2. QQ音乐外链

我不喜欢网易云音乐,大约17年时因为某位前女友的缘故,短暂的用了一年多网易云音乐(充了两年VIP/黑胶),后来也没再用过了。

不喜欢的原因有二:

  1. (最大的原因)缺歌,尤其是2018年前后,欧美歌下架了一堆、周杰伦的歌全数下架,受损最严重的一个歌单有超过半数的歌曲是灰的。
  2. 没读过几本书的文艺装逼犯太多,我自认也是半个文艺装逼男,所以觉得其他同类都是煞笔,同类水火不容。

此外绝大多数时间我都在用apple music和QQ音乐,前者国区也挺缺歌的,尤其是anisong,所以我最近几年一直在用QQ音乐。

言归正传,这个地方很简单,我是直接模仿着 bilibili 的shortcode写的,新建 <proj>/themes/stack/layouts/shortcodes/qqmusic.html 文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
{{ $songid := (.Get 0) }}
{{ $width := default "330" (.Get 1) }}
{{ $height := default "110" (.Get 2) }}

<div class="music-wrapper">
    <iframe src="https://i.y.qq.com/n2/m/outchain/player/index.html?songid={{ $songid | safeURL }}"
            frameborder="no"
            border="0"
            marginwidth="0"
            marginheight="0"
            width="{{ $width }}"
            height="{{ $height }}"
    >
    </iframe>
</div>

在正文中使用的方式(这里的songid要生成QQ音乐的分享链接,然后在分享链接里能看到,转义斜杠自行删去):

1
{{\< qqmusic "songid" "330" "110"\>}}

3. 基于waline和vercel的评论

这没啥可说的,直接按waline官方教程做吧。我本来不想用vercel,想自己部署,但转念一想今晚还有事,不能无止境的摸鱼。对于vercel、leancloud,我的心里只有感激。

除了这个教程内容外,我做的主要调整是加了个文章反应(reactions),也就是最下方的“本文对你有帮助吗?”,这里的表情包来自walinejs/emojis仓库,非常感谢。

对客户端的stack模板做了一些调整,抄的失迹的博客。这篇博客里还有很多内容我没抄,一部分是个人审美,一部分之后有时间再折腾。

Others

我还加了个TODO页面,那就更没什么可说的了。

衷心希望这是我的倒数第二篇装修笔记(最后一篇计划在一年后),不要在细枝末节上花太多时间,专心搞搞内容才是正事。

Licensed under CC BY-NC-SA 4.0
最后更新于 Oct 23, 2025 17:36 UTC+8