- タグページを自動生成するようにしました
- jekyll + github-pagesでも動作します
今まで,このブログのタグのページを開くとNotfoundが出ていたのですが,タグのページを作成しました.例: 日記
このブログは,jekyll + github-pages で動いていますが,タグページを作成するのに難儀したので,メモをしておきます.
jekyllによるタグページ
jekyllのデフォルトではタグページが自動生成されないので,自分で生成する必要があります.
jekyll-taggingなどのプラグインによって自動生成するのは可能ですが,github-pagesを利用してブログを公開する際には,github側で公式にサポートしているプラグインしか使えません.
参照:github-pages-Dependency
このリストの中には,タグやカテゴリに関するプラグインはないので,なんとか自前でページを作成する必要があります.
タグページの設定
このページを参考に,設定を付与します.
まず,/tag
以下にタグページを配信するために,_config.yml
に設定を追記します.
/_config.yml
collections:
my_tags:
output: true
permalink: /tag/:name/
filepath: /tag
layout: tag_index
/_layouts/tag_index.html
---
layout: page
---
<div class="page-content wc-container">
<div class="post">
<h2 class="post_title"><a href="{{ page.url | relative_url }}">{{ page.tag }}</a>のタグがついている投稿</h2>
<ul>
{% assign posts = site.posts | where_exp:"post", "post.tags contains page.tag" %}
{% for post in posts %}
<li class="archive_list">
<time>{{ post.date | date_to_string }}</time>
<a class="archive_list_article_link" href='{{ post.url | relative_url }}'>{{post.title}}</a>
<p>{{post.description}}</p>
</li>
{% endfor %}
</ul>
</div>
</div>
これで,以下のように /tag/
以下にファイルを配置することで,ページを配信することができます.
/tag/日記.md
---
layout: tag_index
tag: 日記
---
タグページの自動生成
あとは,/tag/
以下にファイルを自動配置するスクリプトを書きます.
jekyll公式ページを参考に,更新時のhookを利用してタグページのファイルを生成します.
_plugins/ext.rb
に書くことでローカルで動作させた時に,hookが動作します.
_plugins/ext.rb
def tag_file_body(tag, layout)
return <<~TEXT
---
layout: #{layout}
tag: #{tag}
---
TEXT
end
def tag_files(site)
config = site.config
site.tags.keys.each do |tag|
source = File.expand_path(config["source"])
path = config["collections"]["my_tags"]["filepath"]
file = File.join(source, path, "#{tag}.md")
yield tag, file
end
end
Jekyll::Hooks.register :site, :post_write do |site|
config = site.config
site.tags.keys.each do |tag|
source = File.expand_path(config["source"])
path = config["collections"]["my_tags"]["filepath"]
file = File.join(source, path, "#{tag}.md")
next if File.exists?(file)
layout = config["collections"]["my_tags"]["layout"]
File.write(file, tag_file_body(tag, layout))
p "Generate: #{file}"
end
end
これによって生成されたタグページのファイルもコミットしてpushしましょう.
このままだと,タグページのファイルの更新や削除ができないのですが,それは今後の課題ということにします.
参考
jekyll-tagging
github-page-Dependency
http://www.minddust.com/post/alternative-tags-and-categories-on-github-pages/
jekyll公式ページ