Hugo 主题美化(二)

​ 上次折腾朋友圈动态失败后,有点不甘心还是想整合进来,所以在翻阅 木木大佬 的博客时,发现大佬开源了 哔哔广场 这个项目,所以又开始了折腾。

一. 哔哔广场

项目地址

lmm214/memobbs: 一个纯 HTML、JS、CSS 造的静态页面,实现个人 Memos 前端登录发布、编辑等管理功能,集成广场模式、随机模式。当然,也支持嵌入到自己的博客中。

具体步骤

首先看项目介绍,发现这是一个纯静态的项目,那么意味着我们就可以把它直接放到 Hugo 的 static 目录里面,所以先可以把项目直接下载下来,然后放到 static 目录下。

如何集成到现有自己的主题,这时候你就需要新增一个布局,路径就是 themes/你的主题/layouts/_defaul 目录下面。可以基于现有的 baseof.html 来做改动,我是直接复制了它,然后把哔哔广场项目的 index.html 页面的代码,结合到我们现有的布局文件里,在这个基础上做了调整,名称为 bb.html,下面是具体代码。

点我查看具体代码
<!DOCTYPE html>
<html class="no-js" lang="{{ .Site.Language.Lang }}">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>{{ block "title" . }}{{ if not .IsHome }}{{ .Title }} - {{ end }}{{ .Site.Title }}{{ end }}</title>
  <script>(function(d,e){d[e]=d[e].replace("no-js","js");})(document.documentElement,"className");</script>
  <meta name="description" content="{{ if .IsHome }}{{ .Site.Params.description }}{{ else }}{{ .Params.Description }}{{ end }}">
  {{- if .Site.Params.opengraph }}
    {{ template "_internal/opengraph.html" . }}
  {{- end }}
  {{- if .Site.Params.schema }}
    {{ template "_internal/schema.html" . }}
  {{- end }}
  {{- if .Site.Params.twitter_cards }}
    {{ template "_internal/twitter_cards.html" . }}
  {{- end }}

  {{- $googleFontsLink := .Site.Params.googleFontsLink | default "https://fonts.googleapis.com/css?family=Open+Sans:400,400i,700" }}
  {{- if hasPrefix $googleFontsLink "https://fonts.googleapis.com/" }}
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  <link rel="dns-prefetch" href="//fonts.googleapis.com">
  <link rel="dns-prefetch" href="//fonts.gstatic.com">
  <link rel="stylesheet" {{ printf `href="%s"` $googleFontsLink | safeHTMLAttr }}>
  {{- end }}

  {{ $style := resources.Get "css/style.css" | resources.ExecuteAsTemplate "css/style.css" . -}}
  <link rel="stylesheet" href="{{ $style.RelPermalink }}">
  {{ range .Site.Params.customCSS -}}
  <link rel="stylesheet" href="{{ . | relURL }}">
  {{- end }}

  {{- with .OutputFormats.Get "rss" }}
  {{ printf `<link rel="%s" type="%s" href="%s" title="%s">` .Rel .MediaType.Type .RelPermalink $.Site.Title | safeHTML }}
  {{- end }}

  <link rel="shortcut icon" href="{{ "favicon.ico" | relURL }}">
  {{- $server := "" }}
  {{- if gt (int (index (split hugo.Version ".") 1)) "120" }}
    {{ $server = hugo.IsServer }}
  {{- else }}
    {{ $server = .Site.IsServer }}
  {{- end -}}
  {{- if not $server }}
    {{ template "_internal/google_analytics.html" . }}
  {{- end }}

  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta charset="UTF-8"/>
  <meta name="renderer" content="webkit"/>
  <meta name="force-rendering" content="webkit"/>
  <meta name="referrer" content="no-referrer">
  <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"/> 
  <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1">

  <meta name="mobile-web-app-capable" content="yes"/>
  <meta name="apple-touch-fullscreen" content="yes"/>
  <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/>
  <link rel="manifest" href="/manifest.json"/>
  <link rel="apple-touch-startup-image" href="/pwa/splash-2048x2732.png" media="(device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"/>
  <title>MemoBBS</title>
</head>

<link rel="stylesheet" href="/cdn/APlayer.min.css">
<link rel="stylesheet" href="/cdn/animate.min.css">
<link rel="stylesheet" href="/cdn/ArtalkLite.css">
<link rel="stylesheet" href="/grid.css">
<link rel="stylesheet" href="/memos.css">

<script type="text/javascript">
// [Safari only] gesturestart event: multi finger gestures touching 
document.addEventListener('gesturestart', function(event) {
  event.preventDefault();
});
</script>

<script type="text/javascript">
  var memosJson = {
    url : "/memos.json"
  }
  var memosMyList = [
    {
      "creatorName" : "neweix",
      "website" : "https://neweix.com",
      "link" : "https://memos.neweix.com",
      "creatorId" : "1",
      "avatar" : "https://neweix.com/img/avatar.png",
    }
  ]
</script>

<body class="body">
  <div class="container container--outer">
    {{ block "header" . }}{{ partial "header.html" . }}{{ end }}
    <div class="menu__overlay"></div> <!-- 添加一个覆盖层 -->
    <div class="container pt-4 content-container">
      <div id="memos"></div>
      <div id="memo-list"></div>
    </div>
    {{ block "footer" . }}{{ partial "footer.html" . }}{{ end }}
  </div>
  <script async defer src="{{ "js/menu.js" | relURL }}"></script>
</body>

<script src="/cdn/twikoo.min.js"></script>
<script src="/cdn/ArtalkLite.js"></script>
<script src="/cdn/marked.min.js"></script>
<script src="/cdn/APlayer.min.js"></script>
<script>
var meting_api='https://api.injahow.cn/meting/?server=:server&type=:type&id=:id&auth=:auth&r=:r';
</script>
<script src="/cdn/Meting.min.js"></script>
<script src="/cdn/lozad.min.js"></script>
<script src="/memos.js"></script>

<style>
  .container.pt-4.content-container {
    transform: scaleY(1); /* 将0.8改成你想要的缩放比例 */
    transform: scaleX(0.98); /* 将0.8改成你想要的缩放比例 */
    transform-origin: center; /* 确保缩放从中心开始 */
  }
</style>

</html>

新建一个 Markdwon 文件,我的路径是 content 下面,名称为 bb.md。这个就是单独展示动态页面时需要用到的,在这个里面我们需要特别指定我们的布局为 bb, 下面是具体代码。

+++
title = '小声哔哔'
Layout = 'bb'
+++

在 Hugo 配置文件里面把需要展示的页面做一个配置,我把页面叫做随机哔哔(random bibi)😅。

[menu]
  [[menu.main]]
    name = "random posts"
    url = "/posts/"
    weight = 1
  [[menu.main]]
    name = "random books"
    url = "/books/"
    weight = 2
  [[menu.main]]
    name = "random bibi"
    url = "/bb/"
    weight = 3
  [[menu.main]]
    name = "random friends"
    url = "/cc/"
    weight = 4

这样基本上算是把哔哔广场集成到现有的主题里面了,由于哔哔广场是基于 memos 来的,所以需要先部署一个 memos 项目,把自己部署的 memos 的地址和 Token 配置到博客里面,这样就可以在博客页面发表动态了。

二. 友链朋友圈

项目地址

willow-god/Friend-Circle-Lite: 🐱一个精简版,无后端,且仅利用github action运行的精简版友链朋友圈程序,兼容fc的json格式信息,同时支持推送友圈更新,支持他人订阅个人站点并在更新时发送邮箱推送。

具体步骤

  • 直接参考项目已经给出的步骤,大佬步骤写的十分详细。
  • 和之前动态一样,自定义一个页面布局,把友圈动态页面嵌入进去就好了。
  • 配置菜单,查看结果,下面页面是截图自木木大佬的博客。

三. 总结

​ 两个项目虽然都顺利集成到博客里面,但是看着总感觉很奇怪,所以最终还是把这两块从博客里面移除了。享受的还是折腾的这个过程,挺有意思的。在折腾过程中学习了一些前端的基础知识,自己学着如何调整页面,把新增的页面嵌入进来。一开始页面嵌入的时候,由于 CSS 文件定义中,有一些重复的样式,导致页面布局有点混乱。自己也是一点一点的排查处理,主要是靠着 GPT ,让它帮忙重新定义一些样式,让页面看着和谐一些,最终效果还是挺满意的。

​ 后面应该不会去折腾博客的美化了,简单点挺好的,更多的是记录一些想法和读书的感悟。

四. 参考资料

更新于
评论一下 ...