将动态内容传递给Middleman中的模板

时间:2013-02-11 23:54:09

标签: yaml middleman

我正在使用Middleman建立一个静态网站,该网站拥有所有客户最近项目的投资组合部分。 投资组合部分将以3×3画廊的方式显示项目缩略图,点击后,将在灯箱内打开他们共同响应的html页面。

灯箱内页面的布局是相同的,所以不是标记每个页面,我认为Middleman可以使用[a link]处理yaml数据文件(projects.yml)中提供的内容。

这是我在config.rb文件中的内容

###
# Page options, layouts, aliases and proxies
###

# A path which all have the same layout
with_layout :popup do
  page "/projects/*"
end

# Proxy (fake) files
# page "/this-page-has-no-template.html", :proxy => "/template-file.html" do
#   @which_fake_page = "Rendering a fake page with a variable"
# end
data.projects.details.each do |pd|
  proxy "/projects/#{pd[:client_name]}.html", "/projects/template.html", locals: { project: pd }, ignore: true
end

1 个答案:

答案 0 :(得分:13)

好的,经过一番挖掘后,我遇到了下面的两个帖子,这些帖子帮助我了解动态页面如何在中间人中工作。 (不幸的是,没有很多doco,而且中间人的动态页面示例非常基本)

http://benfrain.com/understanding-middleman-the-static-site-generator-for-faster-prototyping/ http://forum.middlemanapp.com/discussion/134/best-way-to-use-yaml-same-html-but-parameter-driven-data-fixed/p1

我的解决方案......

data / projects.yml(包含项目详细信息)

details:
  - client: "Company X"
    title: "Company X Event"
    video_url: ""
    logo: 
      - "logo_companyx.gif"
    image_path: "/img/projects/companyx"
    total_images: 10
    content: "<p>Blah blah blah</p>"
    responsibilities: 
      "<li>Something</li>
      <li>Some task</li>"

config.rb:

data.projects.details.each do |pd|
    proxy "/projects/#{pd[:client]}.html", "/projects/template.html", :layout => false, :locals => { :project => pd }, :ignore => true
end

上面代码片段的技巧是通过使用本地的代理将整个项目数据对象传递给模板,并将布局设置为false,因此它不会继承默认的站点布局(因为我 - 或客户端而非 - 想要在灯箱弹出窗口中显示这些内容

该过程的最后一步是创建/projects/template.html.erb(在源文件夹中),在模板顶部声明以下内容

<% p = locals[:project] %>

这允许我在template.html.erb中输出p对象的每个属性。

例如:

<%= p[:title] %>

我希望这可以帮助别人,因为它花了我几天的时间玩游戏,很多网上搜索或提示。