首页 > 其他分享 >玩转开源 |Hugo 的使用实践

玩转开源 |Hugo 的使用实践

时间:2023-11-27 10:12:26浏览次数:45  
标签:hugo 标签 Hugo 开源 book 文档 玩转 docs

Hugo 是一个能够以出色速度构建静态网页的工具,它为我们提供了极具灵活性的平台,可以塑造成符合个人需求的网页。在上一篇博文中已经介绍了 Hugo 的基本搭建步骤,那如何使用 Hugo 搭建符合自己需求的主题页面?不妨还是以 Hugo-book主题作为 基础,一起探索如何将它塑造成我们需要的网页。

自定义导航

在构建信息网页时,导航不仅仅是简单的链接集合,更是用户与网站互动的主要纽带。它承担着引导用户在网站内部浏览的任务,促使他们迅速、准确地找到所需内容。

在默认搭建中,左侧的导航是根据文档自动生成的。这样虽然便捷,但它可能无法完全契合网站内容的层次结构或信息重要性。因此,实际场景上往往需要针对网站的内容对导航进行定制,以确保用户能轻松地找到他们感兴趣的信息,并以最简单直观的方式进行导航和浏览。

Hugo 中提供了方便的导航自定义功能。用户可以自主添加、编辑和删除导航菜单项,调整它们的顺序和层级关系,以最适合网站内容和用户浏览习惯的方式呈现导航。

配置方式如下:

  1. hugo.toml 中添加 参数配置 [params], 配置菜单目录;params
    BookMenuBundle = '/menu'
  2. content文件夹 下新建 menu文件夹,并新建 index.md;并在 conten/menu/index.md 文件中配置上菜单相关配置。
+++
headless= true
+++
- [**快速**搭建]({{ < relref "/docs/hello" >}})
- [玩转Hugo]({{ < relref "/docs/world" >}})
  1. 这里顺便提下 修改站点的标题,设置 hugo.tomltitle。title = 'Hugo 的基本使用'

请在此添加图片描述

图 1,hugo 自定义导航示例

多语言的支持

Hugo 的一个常见的用途就是搭建 GitHub page,来介绍开源项目,做为其产品文档页面;开源项目涉及的参与者可能来自不同国家和语言背景,同样的对于开源软件的使用方也是如此,因此支持多语言是一个关键需求。可能先前有关注到 i18n 命名的文件夹,其实多少就能猜到 Hugo 能够支持到多语言文本管理。

i18n 是“国际化”的简称,其中的数字18代表了中间的18个字母("internationalization")。这种命名术语一般用在设计和开发多语言软件或产品的过程中(搞过国际化研发的估计非常熟悉),代表其能够支持不同的语言和区域文化,以便在全球范围内更广泛地使用。

配置方式如下:

  1. hugo.toml 中首先加入多语言的相关配置;
# 默认语言选择
defaultContentLanguage = 'zh' 

# 多语言配置
[languages] 
  [languages.en] # 英语
    title = 'Hugo Basic Usage' # 站点标题
    languageName = 'English'
    contentDir = 'content.en' # 文档目录
    weight = 2
  
  # 中文
  [languages.zh]
    title = 'Hugo 的基本使用'
    languageName = '中文'
    weight = 1
    contentDir = 'content.zh'
  1. 将原来文件夹改为 content.zh 另外再新建一个文件夹 content.en用来存放英文版文档;菜单同理操作;
  2. hugo-book主题中还可以把 hugo.tomlBookTranslatedOnly 设置为 true,这样的话对于没有多语言版本的文档 不会提示语言切换;
[params]
BookMenuBundle = '/menu'
BookTranslatedOnly = true

请在此添加图片描述

图 2,hugo 多语言示例

PS:为什么多语言项目中总是 'zh'、'en'这种缩写?其实多语言领域有着很多标准,比如 RFC5646(文末附上链接);里面还有提到粤语的标签'zh-yue'等等规范,感兴趣的可以多了解些。

自定义布局扩展

Hugo-book 最大的扩展性之一是其针对布局的强大扩展能力。尽管参数调整提供了方便的方法,但实际需求千差万别。把所有的个性功能都作为参数提供显然是一项不切实际的任务。因此,更为便捷的布局扩展成为了必然。

在路径"hugo-book-9\layouts\partials\docs\inject"下,你会发现9个空的HTML文件。这些文件提供了一个自由扩展文档主题的场地,让你通过HTML的方式进行自定义。

可以根据特定需求,在特定页面的布局位置添加自定义的内容或功能。通过直接编辑HTML文件,能更精细地调整文档主题,呈现更个性化、更符合需求的页面样式。这种灵活的布局扩展方式赋予了用户更大的自由度,使他们能够更灵活地定制和拓展 Hugo-book 主题。这些文件名也能清晰地指明了它们在网页布局中的位置。

  • layouts/partials/docs/inject/head.html:在标签闭合之前。
  • layouts/partials/docs/inject/body.html:在标签闭合之前。
  • layouts/partials/docs/inject/footer.html:在页面 footer 内容后。
  • layouts/partials/docs/inject/menu-before.html:在菜单
  • layouts/partials/docs/inject/menu-after.html:在菜单
  • layouts/partials/docs/inject/content-before.html:在页面内容之前。
  • layouts/partials/docs/inject/content-after.html:在页面内容之后。
  • ...

最简单的应用是在菜单末尾添加友情链接,这个步骤十分简单,相信能够轻松完成。

结合 Hugo 框架本身的一些参数,可以实现一些更多样性的功能。这里以多语言场景演示个例子,在菜单开始处加上一个切换文档语言的功能。将以下代码,复制到 menu-before.html 就可以轻松实现这个需求。示例中涉及到 Hugo模板语法,受限于本文篇幅与重点暂且不详细说明了,后续有机会再另行解读。

{{ $translations := dict }}
{{ range .Site.Home.AllTranslations }}
  {{ $translations = merge $translations (dict .Language.Lang .) }}
{{ end }}


<ul class="book-languages">
  <li>
    <input type="checkbox" id="languages" class="toggle">
    <label for="languages" class="flex justify-between">
      <a role="button" class="flex align-center">
         <img src="{{ "svg/translate.svg" | relURL }}" 
              class="book-icon" alt="Languages" />
          {{ $.Site.Language.LanguageName }}
      </a>
    </label>

    <ul>
      {{ range .Site.Languages }}{{ with index $translations .Lang }}
      <li>
        <a href="{{ .Permalink }}">
            {{ .Language.LanguageName }}
        </a>
      </li>
      {{ end }}{{ end }}
      
    </ul>
  </li>
</ul>

要使样式更美观,可以通过在 hugo-book-9\assets\_custom.scss 中的 .book-languages 下添加一个新样式 .book-icon,并将 ul 标签的样式设定为 padding-inline-start: 1.5em;。文件 _custom.scss 也是 hugo-book 主题为用户提供的一个专门用于自定义扩展样式的地方。

.book-languages {
  	.book-icon {
	    height: 1em;
	    width: 1em;
	    margin-inline-end:.5em
	}

  	ul {
  		padding-inline-start : 1.5em;
  	}
}

请在此添加图片描述

图 3,hugo 自定义布局扩展示例

这里想多表达一点布局扩展提供了极大的灵活性和功能性。它的实用性绝不仅限于示例中添加简单功能,更是涉及到各种典型场景。

举例来说,可以在 <head> 标签中嵌入网站流量统计代码。这种统计工具能够帮助我们了解访问者的行为、趋势和偏好,为优化网站内容和改进用户体验提供有价值的数据支持。

而在商业化场景下,可能会考虑在特定布局处嵌入广告模块。这种广告模块可以是图片、文本链接或者多媒体广告,用于推广产品、服务或者其他相关内容。通过灵活的布局扩展,能够精确地在需要展示广告的位置插入广告模块,从而提升广告的曝光度和点击率,达到商业推广的目的。

通过合理的布局扩展在网页中嵌入各种实用模块,增强网站的交互性、实用性和吸引力,为用户带来更好的访问体验,同时实现商业化目标。

文档语法扩展

Hugo 主题不仅支持 Markdown 本身的语法,还提供了一些独特的语法特性,比如以 Hugo-book 主题为例,它有着丰富的功能和标签支持。其中,columns 标签是一个非常实用的特性,能够轻松实现文档描述内容的多列布局,为用户呈现更为丰富和易读的页面。

这个功能非常适合在文档中展示多个相关内容或步骤,使得阅读更加清晰、有条理。columns 标签允许我们按照需求定义多个列,每一列可以包含不同的内容、文本、图片等,这样就能在同一页内展示多个相关联的信息,提升了信息传达的效率和清晰度。

当然也需要值得注意的是在多列布局中插入图片可能会导致文档在不同设备上的效果难以控制,特别是在响应式布局中。如果要考虑不同设备上的显示差异,建议需要避免在多列布局中直接插入图片;图片的大小和比例可能会影响布局的整体效果,特别是在移动设备上,可能会出现显示不完整或者排版混乱的情况。

Hugo-book 主题中多列布局示例:

{{ < columns >}}
### 数组索引(Index)

索引是用于标识数组中特定元素位置的数字。通常从0开始,依次递增。
<--->
### 数组元素(Element)

数组中的每个存储位置称为一个元素,并且它们都是相同类型的数据。
<--->
### 数组长度(Length)

数组的长度是指它能够容纳的元素数量。在创建数组时,通常会定义其长度。
{{ < /columns >}}

以上代码效果如下:

请在此添加图片描述

图 4,hugo-book 多列布局(columns)示例

Hugo-book主题还有提供许多有趣且实用的扩展标签,如 Hints、Expand、Details 等等。这些标签可以为文档的呈现增添更多互动性和多样性,让内容更生动有趣。

举例来说,Hints 标签可以用于突出显示提示信息,为读者提供更多背景或者补充说明。Expand 标签则能够展开折叠内容,让文档更加紧凑和易读。而 Details 标签则提供了一种交互式的方式,让用户点击展开或者折叠内容,对于详细内容的呈现十分有用。

虽然在此不一一进行演示,但有兴趣的朋友可以通过官方网站查看相关的使用语法和示例:Hugo-book 官方Demo

探索完以上内容,在 《搭建 Hugo 管理 Markdown 文档》 文章之初给出的 Demo效果 已经能够完成。

Hugo + Markdown 的结合使得文档更生动、更易读、更具交互性。在实际应用中,通过这些特性,我们能够创造出更具吸引力和实用性的文档,提升用户体验,更好地传递信息和知识。

本篇就且先落笔于此,欢迎点赞、推荐、关注,如果大伙儿喜欢 后续有机会咱们进一步玩转 Hugo。

相关文献

标签:hugo,标签,Hugo,开源,book,文档,玩转,docs
From: https://www.cnblogs.com/jzhlin/p/hogo_2.html

相关文章

  • 一个基于.NET Core开源、跨平台的仓储管理系统
    前言今天给大家推荐一个基于.NETCore开源、跨平台的仓储管理系统,数据库支持MSSQL/MySQL:ZEQP.WMS。仓储管理系统介绍仓储管理系统(WarehouseManagementSystem,WMS)是一种用于管理和控制仓库操作的软件系统,它可以帮助企业实现对仓库内物品的跟踪、存储、拣选、包装和发运等全过程......
  • 三个月写了个短信平台,开源出来!
    1初心大家好,我是勇哥。花了三个月的时间,我手写了个短信平台服务platform-sms,今天开源出来Beta版本。写这个开源项目的初心其实很简单:"帮助初中级研发工程师入门架构设计,提升他们的技术认知"。2018年,作为架构师,我参与一个短信平台的重构。发送短信的场景包括还款业务、CRM......
  • Spin 基于rust 开发的开源运行基于webassembly serverless 工具
    spin是基于rust开发的,可以用来开发以及运行基于webassemblyserverless服务的工具包含的特性提供了周边扩展 默认wasm只提供了基本类型的支持,wasm提供了不少扩展可以方便的支持不同语言的调用(比如网络,数据库访问)提供了快速应该开发的cli提供了服务部署的能力 包含了本......
  • 三个月写了个短信平台,开源出来!
    1初心大家好,我是勇哥。花了三个月的时间,我手写了个短信平台服务platform-sms,今天开源出来Beta版本。写这个开源项目的初心其实很简单:"帮助初中级研发工程师入门架构设计,提升他们的技术认知"。2018年,作为架构师,我参与一个短信平台的重构。发送短信的场景包括还款业务、CRM、......
  • 【开源】基于JavaWeb的快乐贩卖馆管理系统 毕业设计
    一、摘要1.1项目介绍基于JAVA+Vue+SpringBoot+MySQL的快乐贩卖馆管理系统,包含了视频模块、视频收藏模块、视频打分模块、视频交友模块、视频购物车模块和视频订单模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础......
  • Go语言开源跨平台GUI框架Fyne小教程|数据绑定篇
    入门数据绑定是在Fyne工具包v2.0.0版本中引入的的一个强大功能。通过使用数据绑定,我们可以避免手动管理许多标准对象,如标签、按钮和列表等,的数据内容。Fyne内置绑定支持许多基本数据类型(如Int、String、Float等),还有列表(如StringList、BoolList)以及Map和Struct绑定。这些类型中的每......
  • 【开源】基于JavaWeb的智慧家政系统 毕业设计
    一、摘要1.1项目介绍基于微信小程序+JAVA+Vue+SpringBoot+MySQL的智慧家政系统,包含了地址管理模、订单管理、家政分类管理、家政服务管理、用户反馈管理模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,基于微......
  • 开源小说站源码php+付费阅读小说网站系统源码附全自动采集和搭建教程
    随着互联网的普及,网络小说已成为现代人生活不可或缺的一部分。与此同时,越来越多的人开始关注小说网站源码的开发,希望通过开发自己的小说网站来满足读者的需求。本文将从小说网站源码的设计、开发、运维等方面进行探讨,以帮助读者更好地了解小说网站源码的相关知识。源码:xsymz.icu......
  • XRender - 开源之路
    XRender-开源之路思翊呀唱、跳、rap、code XRender 是由阿里飞猪内部孵化出的开源产品,目前在GitHub上有4.2kstar;本篇文章不会对XRender的用法进行赘述;我们的目的在于让更多人了解到XRender在这一年内发生了哪些变化,并让XRender能够帮助更多的前......
  • 表单考勤签到作业周期打卡打分评价评分小程序开源版开发
    表单考勤签到作业周期打卡打分评价评分小程序开源版开发表单打卡评分表单签到功能:学生可以通过扫描二维或输入签到码进行签到,方便教师进行考勤管理。考勤功能:可以记录学生的出勤情况,并自动生成出勤率和缺勤次数等统计数据,帮助教师及时掌握课堂出勤情况。作业提交功能:学生可以通过......