jekyll-taggingプラグインは十分なんだけど、
プラグイン作成のトライアルにタグクラウドが簡単そうなので作成してみる
タグページを生成する
ページ生成プログラム(tagpage.rb)
module Jekyll
class TagPage < Page
def initialize(site, base, dir, tag)
@site = site
@base = base
@dir = dir
@name = 'index.html'
self.process(name)
self.read_yaml(File.join(base, '_layouts'), 'tag.html')
self.data['title'] = "Entries of #{tag}"
self.data['posts'] = site.tags[tag]
self.data['tag'] = tag
end
end
class TagPageGenerator < Generator
safe true
def generate(site)
site.tags.each_key do |tag|
site.pages << TagPage.new(site, site.source, File.join('tags', tag), tag)
end
end
end
end
レイアウトファイル(tag.html)
{% raw %}---
layout: default
---
<h1>
{{ page.tag }}
</h1>
<article class="post-content">
<ul>
{% for post in page.posts %}
<li><a href="{{ post.url }}">{{ post.title }}</a></li>
{% endfor %}
</ul>
</article>{% endraw %}
タグクラウドを生成する
タグクラウド生成プログラム(tagcloud.rb)
module Jekyll
class TagCloud < Liquid::Tag
def initialize(tag_name, text, tokens)
super
end
def render(context)
tag_array = []
site = context.registers[:site]
site.tags.each do |tag, tag_pages|
tag_array << tag
end
tag_array.sort!
tagcloud = ""
tag_array.each do |tag|
tagcloud << "<span><a href='#{site.baseurl}/tags/#{tag}/index.html'>#{tag}</a></span>"
end
"#{tagcloud}"
end
end
end
Liquid::Template.register_tag('tag_cloud', Jekyll::TagCloud)
タグクラウド生成指定(sidebar.htmlなどへ)
{% raw %}<h1>TAG GLOUD</h1>
<div id="tag-cloud">
{% tag_cloud %}
</div>{% endraw %}