2017-05-31 84 views
0

我生成我的动态页面与config.rb如何在MIddleman中链接动态生成的页面?

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

有一个简单的方法来产生所有页面保存为第一和最后的:

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在建筑物链接周围是必需的。

+0

好主意!但是我在使用'[n]''的时候遇到了问题。没有他们,它可以正常工作,除了你写的第一页。当我使用上面的例子时,我得到:无法将Middleman :: CoreExtensions :: Collections :: LazyCollectorStep转换为Array(Middleman :: CoreExtensions :: Collections :: LazyCollectorStep#to_ary给Middleman :: CoreExtensions :: Collections :: LazyCollectorStep)(TypeError) – helcim

+0

啊。在'data.generated'上调用'to_a'应该有所帮助。你可以请检查,因为我没有中间人在这里。 – mudasobwa

+0

不,获取相同的错误。 – helcim