2014-12-31 3 views
1

моя Посредник структура выглядит следующим образом:Использовать пользовательский помощник в Middleman Frontmatter

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_at, которые я определил в своем пользовательском помощнике в макетах для post-one и post-two.

Обычно это делается путем определения Frontmatter, но я не хочу вручную вводить даты каждого сообщения, когда они доступны в git.

Так что мне нужен способ определения пользовательского помощника, который позволяет мне получить доступ к метаданным current_page. Или какой-то другой способ передать метаданные, которые я вручную создаю в помощнике posts в макете.

ответ

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