middlemanのFrontmatterで変数を使う

Frontmatterで呼び出し元のテンプレートに変数を渡すことができる。

layout.haml
!!!
%html
  %head
    %meta(charset="utf-8")
    %title= current_page.data.title
%body
  = yield
index.html.haml
---
title: akiroom.com
---

%p something.

この時、index.htmlにアクセスすると、titleタグの中身は「akiroom.com」になっている。
この変数にさらに「title: #{hoge_var}」というような感じでさらに変数を呼び出したいと思った。
その時どうすればいいか。

解決策

Frontmatterを使うのをあきらめた。代わりに、yieldとcontent_forを組み合わせた。
組み合わせ方の例は以下の通り。

layout.haml
!!!
%html
  %head
    %meta(charset="utf-8")
    - if current_page.data.title.present?
      %title= current_page.data.title
    - else
      %title= yield_content(:title)
%body
  = yield
index.html.haml
- content_for(:title, "#{hoge_var}")
%p something.

もっとしかるべきやり方があるかもしれない。

Pocket
LINEで送る
LinkedIn にシェア

「middlemanのFrontmatterで変数を使う」への4件のフィードバック

  1. こんにちわ。Frontmatterの中で変数を定義して使いたい場合、というのはどういった場合が想定されるでしょうか?後学のために教えていただきたく。(私自身はプログラマなので、実際に使う人がどこで困るのが知りたい)

  2. コメントいただきありがとうございます。
    confing.rbにproxyを使って大量のページを生成する際、proxyメソッドで渡したローカル変数をタイトルに含めたいと思って、このようなコードになりました。

コメントは停止中です。