【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除

背景

上篇 blog
【Ubuntu】【Hugo】首页板块配置:list 模板(RSS 订阅)
分析了 RSS 订阅的定义,以及 RSS 文件的格式内容,下面继续分析

搭建私人博客

上篇 blog 分析了 Hugo 生成的 RSS 文件格式内容

在这里插入图片描述

其中分析了 <channel> 元素的内容,下面继续看 <item> 里面的元素

  • <item> 作为单篇文章和条目
元素 必须 说明
<title> 文章标题
<link> 文章完整 URL
<pubDate> 发布时间(格式严格)
<guid> 全局唯一 ID,用于判断是否为新文章,即使标题或链接变了也能识别到
<description> 摘要

RSS 可以通过自动化工具很轻松地转发到邮件上,即使现在很多人用社交媒体,但 RSS 仍是创作者和重度读者的重要工具

OK,继续看下一部分

在这里插入图片描述

这里表示的是有条件地渲染页面内容,并决定是否为标题添加锚点链接

  • 当检测到页面有内容 .Content 时,就渲染一个 <div class="post-content"> 的容器,避免在没有内容的页面输出空的 <div>,这里 .Content 是 Hugo 变量,表示经过 Markdown 渲染后的 HTML 内容
  • 这里会尝试从页面的 front matter 或站点配置 hugo.toml 中读取 disableAnchoredHeadings 参数,如果没设置,或设为 false,就默认使用锚点功能

锚点功能是现代博客常见的功能,比如把鼠标悬停在标题上时,会出现一个 # 符号,点击就能获取该标题的直达链接,比如渲染后的 HTML 像这样

<h2 id="what-is-rss">
  什么是 RSS?
  <a href="#what-is-rss" class="anchor">🔗</a>
</h2>

用户点击 🔗 后,浏览器地址栏会变成 yoursite.com/post/#what-is-rss,此时可以拷贝下来复制给别人,别人访问这个链接,页面就会自动滚动到该标题位置,这就大大地方便了长文分享和文档导航

在这里插入图片描述

这个功能在 single.html 里面也有(之前介绍过),这里 list.html 也照搬了

在这里插入图片描述

OK,接着分析

在这里插入图片描述

这里表示根据当前页面类型(是否首页),来准备要显示的文章列表,并进行分页处理,同时在首页顶部可选地显示个人信息卡片

首先是第一行,集合默认页面

{{- $pages := union .RegularPages .Sections }}
  • union A B:表示把两个列表 A 和 B 合并成一个,并去重
  • .RegularPages:当前上下文中的普通页面内容
  • .Sections:当前上下文中的子分区页面,比如 /docs/ 目录下可能还有 /docs/guide//docs/api/

这行只在非首页的情况下生效,因为后面首页下会给 $page 另一种定义,比如在 /categories/tech/ 分类页,页面会列出该分类下的所有文章 + 子分类

接下来是首页内容,重新定义 $pages

{{- if .IsHome }}
{{- $pages = where site.RegularPages "Type" "in" site.Params.mainSections }}
{{- $pages = where $pages "Params.hiddenInHomeList" "!=" "true"  }}
{{- end }}

如果发现当前是网站首页 /

  • site.RegularPages:表示全站所有普通文章(不包括分类页,标签页等)
  • where ... "Type" "in" site.Params.mainSections只保留那些内容类型在 mainSections 列表中的文章,这里的 Type 是文章的上一级文件目录名,而 mainSections 可以在 hugo.toml 中进行配置,比如
params:
  mainSections: ["posts", "articles", "blog"]

这样 Hugo 就知道那些目录下的文章应该出现在首页

OK,接下来第二行继续对首页内容进行过滤

$pages = where $pages "Params.hiddenInHomeList" "!=" "true"

排除掉那些在 front matter 中设置了 hiddenInHomeList = true 的文章,比如某些文章开头写了

+++
title: "草稿:内部笔记"
hiddenInHomeList: true
+++

这篇文章就不会出现在首页列表中(但仍可以通过直接链接访问),最终 $pages 就是首页应该展示的文章列表(来自指定分区 + 未隐藏属性)


OK,本篇先到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!更多内容见下篇 blog
【Ubuntu】【Hugo】首页板块配置:list 模板(三)

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐