如何在MIddleman中链接动态生成的页面?

时间:2017-05-31 12:15:57

标签: ruby hyperlink dynamically-generated middleman

我正在config.rb

中生成包含以下内容的动态网页
data.generated.each do |i|
  proxy "#{i.id}.html", "/generated/template.html", :locals => { :i => i }, :ignore => true
end

以及source/generated/template.html.erb

中的模板
<% i = locals[:i] %>
<h1><%= i.title %></h1>

如何动态创建指向这些生成页面的下一个和上一个的链接?

1 个答案:

答案 0 :(得分:1)

有一种简单的方法可以为第一个和最后一个页面生成所有页面:

data.generated.each_cons(3) do |prev, curr, nxt|
  proxy "#{curr.id}.html",
        "/generated/template.html",
        locals: { prev: prev, curr: curr, next: nxt },
        ignore: true
end

以上将以curr为第二页开始。我找不到以优雅的方式处理这些角落案例的快速解决方案,因此我们只是手动生成这些页面:

def generate_page prev, curr, nxt
  proxy "#{curr.id}.html",
        "/generated/template.html",
        locals: { prev: prev, curr: curr, next: nxt },
        ignore: true
end

data_generated = data.generated
data_generated.each_cons(3).with_index do |(prev, curr, nxt), idx|
  generate_page(nil, prev, curr) if idx == 0
  generate_page(prev, curr, nxt)
  generate_page(curr, nxt, nil) if idx == data_generated.size
end
<% prev, curr, nxt = locals.values_at(*%i|prev curr next|) %>
<h1><%= curr.title %></h1>

  <a href="<%= prev.id %>.html">⇐ <%= prev.title %></a> |
  <a href="<%= nxt.id %>.html"><%= nxt.title %> ⇒</a>

可能需要在构建链接时应用nxt / prev不是nil的附加检查。