本站統計算法

Article statistics in Hugo. 文章統計算法舉例。經過艱苦卓絕的試驗,網站第四版終於完工了!現在介紹一下本站怎樣進行各種統計的。本人不懂編程,這裏只是瞎貓撞上死耗子。源碼直接在我 Github 上找就可以,在 list.html

一級難度

分頁

如何同時滿足㒳箇條件:1、每 50 篇進行分頁;2、按年份進行分組

1
2
3
4
5
6
7
{{ $paginator := .Paginate (where .Pages.ByDate.Reverse "Type" "post") (index 50) }}
{{ range $paginator.Pages.GroupByPublishDate "2006" }}
    {{ .Key }}
    {{ range .Pages }}
        {{ .Title }}
    {{ end }}
{{ end }}

統計

這個 list 中,一共有多少篇文章?多少字?平均每篇多少字?

1
2
3
4
5
6
{{- $length := len .Data.Pages }}
{{ $count := 0 }}
{{ range .Pages }}
    {{ $count = add $count .WordCount  }}
{{ end }}
凡 {{ $length }} 篇 {{ $count }} 字 篇均 {{ div $count $length }} 字

年數

這些文章存在於幾箇年份中?

1
{{ len (.Pages.GroupByDate "2006") }}

各年統計

各年的情況又怎樣?

1
2
3
4
5
6
7
8
{{ range $paginator.Pages.GroupByPublishDate "2006" }}
    {{ $countyear := 0 }}
    {{ range .Pages }}
        {{ $countyear = add $countyear .WordCount  }}
    {{ end }}
    {{ $lengthyear := len .Pages }}
    {{ .Key }} 凡 {{ $lengthyear }} 篇 {{- $countyear }} 字 篇均 {{ div $count6 $lengthyear }} 字
⋯⋯

最關鍵的坑是 {{ $lengthyear := len .Pages }}。我試了好久,沒想到就那麼簡單一箇。

但要注意的是,每年的情況受到分頁的制約,相同年份會顯示在各自分頁下的數據。至於如何統計連貫的年份數據,我還沒想出來。那將是三級難度的。

二級難度

文章序號

如果沒有分頁,文章序號是很好算的,可是加上分頁之後怎麼辦呢?

1
2
3
4
5
6
{{ $count4 := sub (add $length 1 ) (mul 50 (sub $paginator.PageNumber 1)) }}
⋯⋯
{{ range .Pages }}
  {{ $count4 = sub $count4 1  }}{{ $count4 }}    {{ .Title }}
{{ end }}
⋯⋯

最關鍵的坑就是 {{ $count0 := $paginator.PageNumber }}。我之前試了好久都不成功,就是因爲這個。

把上面寫成算式就是,第一個數字是 (文章總數 + 1) - (頁數 - 1) × 50,然後在循環中不斷 -1。

三級難度

統計連貫的年份數據。暫時無解。

拓展閱讀:Yearly Post Archives In Hugo 一些歸檔技巧。他也沒辦法按年歸檔。