blog
初めての Middleman シリーズ初めてのMiddleman:Middleman-blogにカテゴリやシリーズなどのカスタムコレクションを追加する方法
この記事は書かれてから1年以上経過しており、内容が古い場合があります。
はじめに
今回はMiddleman-blogにカテゴリやシリーズなどのカスタムコレクションを作ってみます。カスタムコレクションを作る機能はMiddleman-blogに用意されています。
コレクション設定
まずはカスタムコレクションページを作るための設定をconfig.rb
に追記します。
activate :blog do |config|
#...
# Enable collection
config.custom_collections = {
category: {
link: '/categories/{category}/index.html',
template: 'category.html'
},
series: {
link: '/series/{series}/index.html',
template: 'series.html'
}
}
end
YAML FrontMatter
YAML FrontMatterで指定するカスタムコレクションは複数指定できますが、値は1つだけです。
---
category: <categoryName>
series: <seriesName>
---
カスタムコレクションテンプレート
カスタムコレクションテンプレートはその他のテンプレート同様にpage_articles
を使って一覧を取得できます。Middleman-blog v3.5.3ではカスタムコレクションページのページングができません。v3.6.0で使えるようになるようです。
とりあえず一覧を表示するテンプレートにしておきます。
category.html.erb
<h1><%= category %></h1>
<% page_articles.each_with_index do |article, i| %>
<div>
<h2><%= link_to article.title, article %></h2>
<p><%= strip_tags article.summary(100) %></p>
<p><time date="<%= article.date.strftime('%Y-%m-%d') %>"><%= article.date.strftime('%Y-%m-%d') %></time></p>
</div>
<% end %>
series.html.erb
<h1><%= series %></h1>
<% page_articles.each_with_index do |article, i| %>
<div>
<h2><%= link_to article.title, article %></h2>
<p><%= strip_tags article.summary(100) %></p>
<p><time date="<%= article.date.strftime('%Y-%m-%d') %>"><%= article.date.strftime('%Y-%m-%d') %></time></p>
</div>
<% end %>
リストを取得するヘルパーの作成
カテゴリやシリーズの一覧を取得するヘルパーを作ります。このヘルパーはすべてのコレクションで共用できます。
helpers do
def get_taxonomies(slug = 'category')
list = []
blog.articles.select{ |i| i.data[slug].present? }.each do |article|
list = list.push article.data[slug]
end
return list.inject(Hash.new(0)){|hash, a| hash[a] += 1; hash}
end
end
第一引数にコレクション名を指定することで全記事に指定されているカテゴリと記事数を持ったハッシュを取得できます。
<h2>カテゴリ</h2>
<% get_taxonomies('category').each do |category, count| %>
<li class="list-item">
<% link_to category_path(category) do %>
<%= category %> (<%= count %>)
<% end %>
</li>
<% end %>
<h2>シリーズ</h2>
<% get_taxonomies('series').each do |series, count| %>
<li class="list-item">
<% link_to series_path(series) do %>
<%= series %> (<%= count %>)
<% end %>
</li>
<% end %>
これでシンプルではありますがカスタムコレクションを作ることができました。
参考
シリーズ
- 初めてのMiddleman:rbenv, bundler 環境でMiddlemanを使ったHello World
- 初めてのMiddleman:レイアウト機能でレイアウトとコンテンツを分離する
- 初めてのMiddleman:パーシャルを使ったコンテンツのモジュール化
- 初めてのMiddleman:SCSSのコンパイルとテンプレートの基礎
- 初めてのMiddleman:Sass MixinライブラリのBourbon, Neatを導入してみる
- 初めてのMiddleman:データファイルとデータファイルを使った動的ページ生成
- 初めてのMiddleman:サイトにブログ機能を追加する
- 初めてのMiddleman:Amazon S3にビルドされたファイルを同期する
- 初めてのMiddleman:HTML/CSS/JS/画像をビルド時に圧縮する
- 初めてのMiddleman:設定について
- 初めてのMiddleman:静的サイトのキャッシュとasset_hash拡張を使ったキャッシュのパージ
- 初めてのMiddleman:Middleman::S3Syncで使うAWS IAMユーザーのアクセスキー管理方法について
- 初めてのMiddleman:Helperを使ってGravatarのアイコンを表示する
- 初めてのMiddleman:アセットパイプラインを使った外部アセットファイルの読み込みと結合
- 初めてのMiddleman:Bowerを使ってjQueryなどのライブラリをロードする
- 初めてのMiddleman:スケルトンを自作する方法
- 初めてのMiddleman:Middleman Blogの記事データを使いやすく管理する方法
- 初めてのMiddleman:Middleman-blogのシングルブログを前提としたSkeletonを作った
- 初めてのMiddleman:Middleman-blogでマルチブログを試してSkeletonを作った
- 初めてのMiddleman:Markdown EngineをkramdownからRedcarpetに切り替える
- 初めてのMiddleman:RedcarpetとMiddleman::Rougeを使ったシンタックスハイライト
- 初めてのMiddleman:Middleman-Syntaxを使ったシンタックスハイライト
- 初めてのMiddleman:Middleman-Blogで記事毎に画像を管理する方法
- 初めてのMiddleman:Gulpを使ってサムネイル画像を生成する
- 初めてのMiddleman:Middleman-OGPのOGP画像指定を相対パスで設定する
- 初めてのMiddleman:Middleman-OGPでMiddleman-BLogにOGPを設定する
- 初めてのMiddleman:Middleman-Titleでタイトルタグを手軽に設定する
- 初めてのMiddleman:多言語化 - 言語ファイルの作成とヘルパーの埋め込み
- 初めてのMiddleman:Middleman-blogにカテゴリやシリーズなどのカスタムコレクションを追加する方法
- 初めてのMiddleman:Bowerで管理されているフォントファイルをインポートする