在Middleman Frontmatter中使用自定义助手

时间:2014-12-31 01:28:08

标签: middleman

我的中间人结构如下:

source/
  blog/
    post-one.md
    post-two.md
  blog.erb
  index.md

我的config.rb定义了这个帮手:

helpers do
  TOP_LEVEL_DIR = Dir.pwd

  def posts
    files = Dir["#{TOP_LEVEL_DIR}/source/blog/*"]

    files.map do |file|
      created_at = `git log --follow --date=short --pretty=format:%ad --diff-filter=A -- #{file}`
      basename = File.basename(file).split('.')[0]

      {
        date: created_at,
        link: '/blog/' + basename,
        title: basename.gsub('-', ' ').capitalize
      }
    end
  end
end

我的blog.erb看起来像这样:

<ul>
  <% posts.each do |post| %>
    <li><%=post[:date]%>: <%= link_to post[:title], post[:link] %></li>
  <% end %>
</ul>

这对我来说非常好,但是我错过了一件事。我想在created_atpost-one的布局中显示我在自定义帮助程序中定义的post-two元数据。

通常这是通过定义Frontmatter来完成的,但我不想在git中提供每个帖子时手动输入每个帖子的日期。

所以我需要一种方法来定义一个允许我访问current_page元数据的自定义帮助器。或者传递元数据的其他方式我在posts助手中手动创建到布局中。

1 个答案:

答案 0 :(得分:1)

这比我想象的要简单得多。助手可以使用current_page,因此我可以在config.rb中直接在我的助手中使用它:

helpers do
  def created_at
    # `git log --follow --date=short --pretty=format:%ad --diff-filter=A -- #{current_page.source_file}`
  end
end