はじめに
だいぶ乗り遅れた感はあるのですが、hugoのshortcodesでやってる人はみつからなかったので、チャレンジです。
hugoはmarkdownから静的なhtmlを生成するツールですが、生成過程でちょっとした独自のスクリプトを定義して使えます。
下準備
新しいサイトを作成します。
$ hugo new site yuba-ba
適当なテンプレートをダウンロードします。
今日はhermitを使うことにします。
$ cd yuba-ba
$ git clone https://github.com/Track3/hermit.git themes/hermit
config.tomlも書き換えます。
config.toml
baseURL = "http://example.org/"
languageCode = "ja-jp"
title = "湯婆婆"
theme = "hermit"
コード
layouts/shortcodesの下にyuba-ba.htmlという名前で作ります。
layouts/shortcodes/yuba-ba.html
{{ $name := .Get 0 }}
{{ $new_name := index (split $name "" | shuffle) 0 }}
契約書だよ。そこに名前を書きな。<br />
フン。{{ $name }}というのかい。贅沢な名だねぇ。<br />
今からお前の名前は{{ $new_name }}だ。いいかい、{{ $new_name }}だよ。分かったら返事をするんだ、{{ $new_name }}!!<br />
呼び出す方も作成します。
contents/index.mdを作成します。
contents/index.md
---
title: "湯婆婆"
date: 2020-11-26T13:00:00Z
draft: false
---
{{< yuba-ba 山田太郎 >}}
実行
$ hugo server --bind=0.0.0.0 -b http://example.org:1313
ブラウザでアクセスしてみます。
いい感じです。
湯婆婆エラー
contents/index.md
---
{{< yuba-ba >}}
に変えてみます。
おっと、エラーになりません。
仕切り直しです。
エラー処理
エラー処理を入れるのは本望ではないのですが、なかなかいいやり方が見つからなかったので妥協します。
layouts/shortcodes/yuba-ba.html
{{ $name := .Get 0 }}
{{ if eq $name nil }}{{errorf "湯婆婆エラー"}}{{end}}
{{ $new_name := index (split $name "" | shuffle) 0 }}
契約書だよ。そこに名前を書きな。<br />
フン。{{ $name }}というのかい。贅沢な名だねぇ。<br />
今からお前の名前は{{ $new_name }}だ。いいかい、{{ $new_name }}だよ。分かったら返事をするんだ、{{ $new_name }}!!<br />
湯婆婆エラー リベンジ
できました。
おわりに
なんとかできましたが、エラー処理を書いてしまったので、ちょっと負けた気分です。