首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MIddleman中链接动态生成的页面?

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

Stack Overflow用户
提问于 2017-05-31 20:15:57
回答 1查看 167关注 0票数 0

我在config.rb中使用以下代码生成动态页面

代码语言:javascript
复制
data.generated.each do |i|
  proxy "#{i.id}.html", "/generated/template.html", :locals => { :i => i }, :ignore => true
end

source/generated/template.html.erb格式的模板

代码语言:javascript
复制
<% i = locals[:i] %>
<h1><%= i.title %></h1>

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

EN

回答 1

Stack Overflow用户

发布于 2017-05-31 20:22:15

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

代码语言:javascript
复制
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开始。我找不到快速的解决方案来以优雅的方式处理这些角落案例,所以我们只能手动生成这些页面:

代码语言:javascript
复制
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

代码语言:javascript
复制
<% 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进行额外的检查。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44284578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档