mainvisual

Hugoを使って、書いてきた記事が増えたこともあり、更新順に並び替えたいな〜と思うようになりました。 しかし、思ってた以上に情報が少なくって調べるのに苦労したので、ここでシェアできればと思います。

Hugoで記事の作成、期限、変更、公開などのついて日付変数について

Hugoには記事のメタ情報を管理している変数が存在します。

記事の作成日時などの日時を管理する変数には.Date,.ExpiryDate,.Lastmod,.PublishDateの4種類があります。

変数説明
.Date記事の作成日時
.ExpiryDate記事の掲載期限
.Lastmod記事の変更日時
.PublishDate記事の公開日時

実際に変数に値をセットするには、記事内のフロントマターで値を入れます。記事内のトップにこのように記述します。

---
date:        "2017-01-01T01:50:00+09:00"
publishdate: "2017-01-02T01:50:00+09:00"
lastmod:     "2017-01-03T01:50:00+09:00"
expirydate:  "2017-01-07T00:00:00+09:00"
---

.Lastmod.Lastchangeの違い

Hogoには、.Lastmodと似たような変数として、.Site.LastChangeが存在します。 違いは、.Lastmodは各記事に対して存在し、変更日時を表します。 対して、.Site.LastChangeはサイト内記事全体の.Dateの中から、最も新しい日付を表します。

このため、.Site.LastChangeはサイトのトップページで何日に更新されたかを表示するために使用されます。

記事を更新順に並び替える

更新順に並び替えるには、.Data.Pages.ByLastmod.Reverseを使って表します。 .Data.Pagesから全ての記事を取得できるので、ByLastmodでソートをしています。 しかし、このままだと古い順となってしまうためReverseにより新しい順に並び替えています。

ByLastmodの他にもByWeight,ByDate,ByExpiryDate,ByLengthなどたくさんの並び替えがあるので、参考にするといいと思います。

テンプレートで実装する場合は、このようにするといいと思います。

<main role="main">
  <div class="grid-row">
    {{ $paginator := .Paginate (where .Data.Pages.ByLastmod.Reverse "Type" "post") 24 }}
    {{ range $paginator.Pages }}
    <div class="grid-cell">
      <article itemscope itemtype="http://schema.org/BlogPosting">
        {{ partial "post-list/post-list-item.html" . }}
       </article>
    </div>
    {{ end }}
  </div>
</main>

もっと知りたいなと思ったときは!

その他、この記事でわからないことがあったら、teratialというサービスを利用するといいと思います。 勇者が初歩的な質問からマニアックな質問に幅広く答えてくれますよ! 是非、一度使ってはいかがでしょうか?

参考サイト

ByLastmodは4月に追加されました - Github

comments powered by Disqus