リモートインターン | MIddleman 実践(3)- ブログレイアウトと入れ子レイアウト

参考 - Middleman:ブログ機能 今回はブログ機能を付けていたときに躓いたことについて書いていきます。

config.rbにブログ機能のオプションを色々と書くことができる。

# blog
activate :blog do |blog|
  # ブログ機能のオプションを設定
  Time.zone = "Tokyo" # タイムゾーン
  blog.prefix = "blog" # カスタムパス
  blog.permalink = "/:year/:month/:day/:title.html" # パーマリンク
  blog.per_page = 5 # ページあたりの記事数
  blog.paginate = true # ページネーションを有効化する場合には true を設定
  blog.layout = "layouts/blog_layout" # 全ての記事に使用される特定のレイアウトを設定
end

ブログレイアウトの指定方法

方法1.ブログ用のレイアウトをlayoutsディレクトリ作ってその配下にarticle_layout.hamlという名前などで作る。(元のerbでもいいけどhamlでやってます。)

blog.layout = "layouts/article_layout"

方法2.ブログレイアウトの指定は入れ子レイアウトも使えるらしい。 同様にconfig.rbのブログオプションの箇所でレイアウトの指定を下記のように書き換える。

page "blog/*", :layout => :article_layout

ここで問題。 layoutsディレクトリを作る、ということで私はここで勝手に元のlayout.hamlもlayoutsディレクトリに入れてしまった。 こうしてしまうとパーシャルを含むブログレイアウトの指定を入れ子レイアウトにした場合、ヘッダーやフッターのパーシャルをうまく読み込んでくれない。 あくまでsource/layout.hamlが基本で、そこからsource/layouts/article_layout.hamlを入れ子にするという考え方が正しい。

原因が分からず、source/layouts/layout.hamlはブログ以外のページ用のレイアウトとしてそのまま残し、source/layouts/article_layout.hamlにはヘッダーやフッターのパーシャルにしないで直書き…というキモいやり方でとりあえず動かしてしまっていた。

今回この記事書くために改めて検証してみて、原因が分かりました…とほほ。 今回検証する用に作ったコードをGithubに上げておきます。→

comments powered by Disqus