Middleman变量在config.rb和页面中的可见性

时间:2012-02-26 13:19:40

标签: ruby middleman

我遗漏了一些关于变量可见性的内容。 在我的config.rb中,我使用数据结构来生成动态页面:

    @pages = [
    {
      id: "cookies",
      title: "Happy Chocolate Chip Cookies", 
      quote: "These cute cookies are full of sweet chocolate and ready to give you energy!",
      content: "Orecchini a monachella. Realizzati in fimo, dipinti a mano e rivestiti con vernice lucida."
    },
    ....]



 @pages.each do |p|
    page "/creations/#{p[:id]}.html", :proxy => "item-template.html", :ignore => true do 
      @tile = p
    end
  end

页面生成顺利,没问题。但..

我如何访问此数据结构以提供生成页面的动态链接?我希望能够使用以下代码创建索引页面(让我们称之为creations.html):

    <ul>
    <% @pages.each do |tile| %>
        <li><a href="creations/<%= tile[:id]%>.html">
            <%= tile[:title] %>
        </a></li>
    <% end %>
</ul>

2 个答案:

答案 0 :(得分:2)

无需创建自定义帮助程序,您可以使用yaml数据文件填充模板并生成链接列表。让我解释一下。

在与源和构建目录相同的级别上,确保创建数据目录。 即:

  • 构建
  • 数据

在其中创建一个名为“pages.yml”的文件(例如)。

此文件需要经过特殊格式化,因此请小心(或使用yaml parser确保您没有任何错误 - 例如缺少逗号或转义引号)。

使用config.rb文件中的数据,例如:

- id: "cookies"
  title: "Happy Chocolate Chip Cookies"
  quote: "These cute cookies are full of sweet chocolate and ready to give you energy!"
  content: "Orecchini a monachella. Realizzati in fimo, dipinti a mano e rivestiti con vernice lucida."

 - id: "bacon"
   title: "Smoked bacon bits"
   quote: "everything tastes better with bacon!"
   content: "blah"

等...

现在,在您的config.rb文件中,将 @ pages.each do | p | 替换为 data.pages.each do | p |

data.pages.each循环遍历新创建的yaml文件中的每个项目

然后您可以简单地在索引文件(creations.html)中引用相同的文件,如下所示:

<ul>
  <% data.pages.each do |tile| %>
    <li><a href="creations/<%= tile[:id]%>.html">
       <%= tile[:title] %>
    </a></li>
  <% end %>
</ul>

我在动态网页上遇到类似问题,您可以参考here

希望这会有所帮助。祝你好运!

答案 1 :(得分:1)

也许添加一个帮助器,在您的文件@pages中返回creations.erb数据结构。即在config.rb文件中添加:

helpers do
  def dynamic_pages()
    @pages
  end
end

然后在creations.erb中:

<ul>
  <% dynamic_pages.each do |tile| %>
    <li><a href="creations/<%= tile[:id]%>.html">
       <%= tile[:title] %>
    </a></li>
  <% end %>
</ul>

而且,如果你想在你的动态页面中引用动态页面(!),帮助者可以生成那个html,你可以调用... nah,没关系!