add tags and categories
This commit is contained in:
6
content/archives/index.html
Normal file
6
content/archives/index.html
Normal file
@ -0,0 +1,6 @@
|
||||
---
|
||||
title: "Archives"
|
||||
date: 2023-04-20
|
||||
draft: false
|
||||
layout: archives
|
||||
---
|
22
hugo.toml
22
hugo.toml
@ -2,6 +2,10 @@ baseURL = 'https://example.org/'
|
||||
languageCode = 'en-us'
|
||||
title = 'Chirpy'
|
||||
|
||||
[taxonomies]
|
||||
category = "categories"
|
||||
tag = "tags"
|
||||
|
||||
[module]
|
||||
[[module.imports]]
|
||||
path = "github.com/gohugoio/hugo-mod-bootstrap-scss/v5"
|
||||
@ -18,6 +22,24 @@ path = "github.com/gohugoio/hugo-mod-bootstrap-scss/v5"
|
||||
weight = 20
|
||||
pre = "fa-solid fa-house"
|
||||
|
||||
[[menu.main]]
|
||||
name = "Categories"
|
||||
url = "/categories/"
|
||||
weight = 30
|
||||
pre = "fa-solid fa-house"
|
||||
|
||||
[[menu.main]]
|
||||
name = "Tags"
|
||||
url = "/tags/"
|
||||
weight = 40
|
||||
pre = "fa-solid fa-house"
|
||||
|
||||
[[menu.main]]
|
||||
name = "Archives"
|
||||
url = "/archives/"
|
||||
weight = 50
|
||||
pre = "fa-solid fa-house"
|
||||
|
||||
[params]
|
||||
theme_version = "5.2.0"
|
||||
toc = true
|
||||
|
41
layouts/_default/archives.html
Normal file
41
layouts/_default/archives.html
Normal file
@ -0,0 +1,41 @@
|
||||
{{ define "main" }}
|
||||
{{ $lang := .Site.Language.Lang }}
|
||||
{{ $df_strftime_m := i18n "df.archives.strftime" | default "/ %m" }}
|
||||
{{ $df_dayjs_m := i18n "df.archives.dayjs" | default "/ MM" }}
|
||||
<article class="px-1">
|
||||
<h1 class="dynamic-title">
|
||||
{{ i18n "tabs.archives" }}
|
||||
</h1>
|
||||
<div class="content">
|
||||
<div id="archives" class="pl-xl-3">
|
||||
{{ $pages := where .Site.RegularPages "Type" "post" }}
|
||||
{{ $last_year := "" }}
|
||||
{{ $pages_count := len $pages }}
|
||||
|
||||
{{ range $index, $page := $pages }}
|
||||
{{ $cur_year := .Date.Format "2006" }}
|
||||
|
||||
{{ if ne $cur_year $last_year }}
|
||||
{{ if ne $last_year "" }}</ul>{{ end }}
|
||||
|
||||
<time class="year lead d-block">{{ $cur_year }}</time>
|
||||
<ul class="list-unstyled">
|
||||
|
||||
{{ $last_year = $cur_year }}
|
||||
{{ end }}
|
||||
|
||||
<li>
|
||||
{{ $ts := .Date.Format "2006-01-02T15:04:05Z07:00" }}
|
||||
<span class="date day" data-ts="{{ .Date.Unix }}" data-df="DD"> {{ .Date.Format "02" }}</span>
|
||||
<span class="date month small text-muted ms-1" data-ts="{{ .Date.Unix }}" data-df="{{ $df_dayjs_m }}">
|
||||
{{ .Date.Format $df_strftime_m }}
|
||||
</span>
|
||||
<a href="{{ .RelPermalink }}">{{ .Title }}</a>
|
||||
</li>
|
||||
|
||||
{{ if eq (add $index 1) $pages_count }}</ul>{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
{{ end }}
|
@ -123,8 +123,15 @@
|
||||
<div class="post-meta mb-3">
|
||||
<i class="far fa-folder-open fa-fw me-1"></i>
|
||||
{{ range $i, $category := . }}
|
||||
<a href="{{ "/categories/" | relLangURL }}{{ $category | urlize }}/">{{ $category }}</a>
|
||||
{{ if not (eq $i (sub (len $) 1)) }},{{ end }}
|
||||
{{ if eq $i 0 }}
|
||||
<!-- 主分类 -->
|
||||
<a href="{{ "/categories/" | relLangURL }}{{ $category | urlize }}/">{{ $category }}</a>
|
||||
{{ else }}
|
||||
<!-- 子分类:确保链接包含主分类路径 -->
|
||||
{{ $parentCategory := index $.Params.categories 0 }}
|
||||
<a href="{{ "/categories/" | relLangURL }}{{ $parentCategory | urlize }}/{{ $category | urlize }}/">{{ $category }}</a>
|
||||
{{ end }}
|
||||
{{ if not (eq $i (sub (len .) 1)) }},{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
{{ end }}
|
||||
|
@ -17,28 +17,7 @@
|
||||
content="width=device-width, user-scalable=no initial-scale=1, shrink-to-fit=no, viewport-fit=cover"
|
||||
>
|
||||
|
||||
{{ template "_internal/opengraph.html" }}
|
||||
{{ template "_internal/twitter_cards.html" }}
|
||||
{{ template "_internal/schema.html" }}
|
||||
|
||||
<!-- Setup Open Graph image -->
|
||||
{{ if .Params.image }}
|
||||
{{ $src := .Params.image }}
|
||||
{{ $imgUrl := "" }}
|
||||
|
||||
{{ if not (findRE "://" $src) }}
|
||||
{{ $imgUrl = absURL $src }}
|
||||
{{ $oldUrl := $src | absURL }}
|
||||
{{ $newUrl := $imgUrl }}
|
||||
<!-- Hugo doesn't have direct string replacement in templates,
|
||||
so we'd need to handle this differently or use a custom function -->
|
||||
{{ end }}
|
||||
{{ else if site.Params.social_preview_image }}
|
||||
{{ $imgUrl := site.Params.social_preview_image | absURL }}
|
||||
<meta property="og:image" content="{{ $imgUrl }}" />
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta property="twitter:image" content="{{ $imgUrl }}" />
|
||||
{{ end }}
|
||||
|
||||
<title>
|
||||
{{ if ne .Kind "home" }}
|
||||
|
@ -32,7 +32,7 @@
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
{{ if or $is_home (eq .Type "post") (eq .Layout "archives") (eq .Layout "category") (eq .Layout "tag") }}
|
||||
{{ if or $is_home (eq .Type "post") (eq .Layout "archives") (eq .Type "categories") (eq .Type "tags") }}
|
||||
{{ $locale := strings.TrimSuffix (path.Ext .Lang) .Lang }}
|
||||
|
||||
{{ with $data.dayjs.js.common }}
|
||||
@ -76,7 +76,7 @@
|
||||
{{ $js = "post" }}
|
||||
{{ else if eq .Layout "page" }}
|
||||
{{ $js = "page" }}
|
||||
{{ else if or (eq .Layout "archives") (eq .Layout "category") (eq .Layout "tag") }}
|
||||
{{ else if or (eq .Layout "archives") (eq .Type "categories") (eq .Type "tags") }}
|
||||
{{ $js = "misc" }}
|
||||
{{ end }}
|
||||
|
||||
|
@ -124,7 +124,15 @@
|
||||
<i class="far fa-folder-open fa-fw me-1"></i>
|
||||
{{ $len := len . }}
|
||||
{{ range $i, $category := . }}
|
||||
<a href="{{ "/categories/" | relLangURL }}{{ $category | urlize }}/">{{ $category }}</a>{{ if not (eq $i (sub $len 1)) }},{{ end }}
|
||||
{{ if eq $i 0 }}
|
||||
<!-- 主分类 -->
|
||||
<a href="{{ "/categories/" | relLangURL }}{{ $category | urlize }}/">{{ $category }}</a>
|
||||
{{ else }}
|
||||
<!-- 子分类:确保链接包含主分类路径 -->
|
||||
{{ $parentCategory := index $.Params.categories 0 }}
|
||||
<a href="{{ "/categories/" | relLangURL }}{{ $parentCategory | urlize }}/{{ $category | urlize }}/">{{ $category }}</a>
|
||||
{{ end }}
|
||||
{{ if not (eq $i (sub $len 1)) }},{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
{{ end }}
|
||||
|
19
layouts/taxonomy/category.html
Normal file
19
layouts/taxonomy/category.html
Normal file
@ -0,0 +1,19 @@
|
||||
{{ define "main" }}
|
||||
<div id="page-category">
|
||||
<h1 class="ps-lg-2">
|
||||
<i class="far fa-folder-open fa-fw text-muted"></i>
|
||||
{{ .Title }}
|
||||
<span class="lead text-muted ps-2">{{ len .Pages }}</span>
|
||||
</h1>
|
||||
|
||||
<ul class="content ps-0">
|
||||
{{ range .Pages }}
|
||||
<li class="d-flex justify-content-between px-md-3">
|
||||
<a href="{{ .RelPermalink }}">{{ .Title }}</a>
|
||||
<span class="dash flex-grow-1"></span>
|
||||
<span class="text-muted small text-nowrap">{{ .Date | time.Format ":date_medium" }}</span>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
{{ end }}
|
114
layouts/taxonomy/category.terms.html
Normal file
114
layouts/taxonomy/category.terms.html
Normal file
@ -0,0 +1,114 @@
|
||||
|
||||
{{ define "main" }}
|
||||
<article class="px-1">
|
||||
<h1 class="dynamic-title">
|
||||
{{ i18n "tabs.categories" }}
|
||||
</h1>
|
||||
<div class="content">
|
||||
<div class="container">
|
||||
{{ $categories := .Site.Taxonomies.categories }}
|
||||
|
||||
<!-- 首先收集所有唯一的父分类 -->
|
||||
{{ $parentCategories := slice }}
|
||||
{{ range $name, $taxonomy := $categories }}
|
||||
{{ range $taxonomy.Pages }}
|
||||
{{ if gt (len .Params.categories) 0 }}
|
||||
{{ $parentCategories = $parentCategories | append (index .Params.categories 0) }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ $parentCategories = $parentCategories | uniq | sort }}
|
||||
|
||||
<!-- 然后为每个父分类创建卡片 -->
|
||||
{{ range $parentCategories }}
|
||||
{{ $parentName := . }}
|
||||
{{ $subcategories := slice }}
|
||||
{{ $parentPages := slice }}
|
||||
|
||||
<!-- 收集与此父分类相关的所有页面和子分类 -->
|
||||
{{ range $name, $taxonomy := $categories }}
|
||||
{{ range $taxonomy.Pages }}
|
||||
{{ if gt (len .Params.categories) 0 }}
|
||||
{{ if eq (index .Params.categories 0) $parentName }}
|
||||
{{ $parentPages = $parentPages | append . }}
|
||||
{{ if gt (len .Params.categories) 1 }}
|
||||
{{ $subcategories = $subcategories | append (index .Params.categories 1) }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ $subcategories = $subcategories | uniq | sort }}
|
||||
|
||||
<div class="card categories mb-3">
|
||||
<div class="card-header d-flex justify-content-between hide-border-bottom">
|
||||
<span class="ms-2">
|
||||
<i class="far fa-folder{{ if gt (len $subcategories) 0 }}-open{{ end }} fa-fw"></i>
|
||||
<a href="{{ "/categories/" | relURL }}{{ $parentName | urlize }}" class="mx-2">{{ $parentName }}</a>
|
||||
<span class="text-muted small font-weight-light">
|
||||
{{ if gt (len $subcategories) 0 }}
|
||||
{{ len $subcategories }}
|
||||
{{ if gt (len $subcategories) 1 }}
|
||||
subcategories,
|
||||
{{ else }}
|
||||
subcategory,
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ len $parentPages }}
|
||||
{{ if gt (len $parentPages) 1 }}
|
||||
posts
|
||||
{{ else }}
|
||||
post
|
||||
{{ end }}
|
||||
</span>
|
||||
</span>
|
||||
|
||||
{{ if gt (len $subcategories) 0 }}
|
||||
<a href="#sub-{{ $parentName | anchorize }}" data-bs-toggle="collapse" aria-expanded="true">
|
||||
<i class="fas fa-fw fa-angle-down"></i>
|
||||
</a>
|
||||
{{ else }}
|
||||
<span class="disabled">
|
||||
<i class="fas fa-fw fa-angle-right"></i>
|
||||
</span>
|
||||
{{ end }}
|
||||
</div>
|
||||
|
||||
{{ if gt (len $subcategories) 0 }}
|
||||
<div id="sub-{{ $parentName | anchorize }}" class="collapse show">
|
||||
<ul class="list-group list-group-flush">
|
||||
{{ range $subcategories }}
|
||||
{{ $subCategoryName := . }}
|
||||
|
||||
<!-- 查找子分类的文章 -->
|
||||
{{ $subPages := slice }}
|
||||
{{ range $parentPages }}
|
||||
{{ if gt (len .Params.categories) 1 }}
|
||||
{{ if eq (index .Params.categories 1) $subCategoryName }}
|
||||
{{ $subPages = $subPages | append . }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
<li class="list-group-item">
|
||||
<i class="far fa-folder fa-fw"></i>
|
||||
<a href="{{ "/categories/" | relURL }}{{ $subCategoryName | urlize }}" class="mx-2">{{ $subCategoryName }}</a>
|
||||
<span class="text-muted small font-weight-light">
|
||||
{{ len $subPages }}
|
||||
{{ if gt (len $subPages) 1 }}
|
||||
posts
|
||||
{{ else }}
|
||||
post
|
||||
{{ end }}
|
||||
</span>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
{{ end }}
|
20
layouts/taxonomy/tag.html
Normal file
20
layouts/taxonomy/tag.html
Normal file
@ -0,0 +1,20 @@
|
||||
{{ define "main" }}
|
||||
{{ $lang := .Site.Language.Lang }}
|
||||
|
||||
<div id="page-tag">
|
||||
<h1 class="ps-lg-2">
|
||||
<i class="fa fa-tag fa-fw text-muted"></i>
|
||||
{{ .Data.Term }}
|
||||
<span class="lead text-muted ps-2">{{ len .Pages }}</span>
|
||||
</h1>
|
||||
<ul class="content ps-0">
|
||||
{{ range .Pages }}
|
||||
<li class="d-flex justify-content-between px-md-3">
|
||||
<a href="{{ .RelPermalink }}">{{ .Title }}</a>
|
||||
<span class="dash flex-grow-1"></span>
|
||||
{{ partial "datetime.html" (dict "date" .Date "lang" $lang "class" "text-muted small text-nowrap") }}
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
{{ end }}
|
28
layouts/taxonomy/tag.terms.html
Normal file
28
layouts/taxonomy/tag.terms.html
Normal file
@ -0,0 +1,28 @@
|
||||
{{ define "main" }}
|
||||
<article class="px-1">
|
||||
<h1 class="dynamic-title">
|
||||
{{ i18n "tabs.tags" }}
|
||||
</h1>
|
||||
<div class="content">
|
||||
<div id="tags" class="d-flex flex-wrap mx-xl-2">
|
||||
{{ $tags := slice }}
|
||||
{{ range $name, $taxonomy := .Site.Taxonomies.tags }}
|
||||
{{ $tags = $tags | append $name }}
|
||||
{{ end }}
|
||||
|
||||
{{ $sorted_tags := sort $tags }}
|
||||
|
||||
{{ range $sorted_tags }}
|
||||
<div>
|
||||
<a class="tag" href="{{ "/tags/" | relLangURL }}{{ . | urlize }}/">
|
||||
{{ . -}}
|
||||
<span class="text-muted">{{ len (index $.Site.Taxonomies.tags .) }}</span>
|
||||
</a>
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</article>
|
||||
|
||||
{{ end }}
|
Reference in New Issue
Block a user