避免使用Middleman代理构建相同的页面

时间:2019-02-01 17:37:40

标签: ruby middleman middleman-4

我正在用Middleman创建一个静态网站,引用从电子表格解析的产品。

我的表具有这些栏:

 _________________________________
| Product Name | Price | Category |
| Pet Food     |   $12 | Pets     |
| iPhone       |  $500 | Phone    |
| Pet toy      |   $25 | Pets     |
|______________|_______|__________|

我使用名为Pets的模板创建了显示Phoneproduct_category.html类别中所有产品的页面。它为每一个独特的类别,例如网页。 pets.htmlphone.html

的问题是,给定I进行的方式,中间人建立一个类别页面在类别中的每个产品,然后跳过它,因为它是相同的:

remote:           create     build/pets.html
remote:           identical  build/pets.html
remote:           create     build/iphone.html

这是我的config.rb示例:

rows_by_categories = app.data.spreadsheet.sheet1.group_by { |row| row.category }

#Category Landings

app.data.spreadsheet.sheet1.each do |f|
  proxy "/#{f.category.to_s.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')}.html", "/product_category.html", locals: {
    f: {
      categorytitle: f.category,
      name: f.name,
      all_in_category: rows_by_categories[f.category],
      price: f.selling_price,
    },
  categories: rows_by_categories.keys,
  }, ignore: true
end

我了解循环在电子表格的每一行上进行迭代,并为相应类别重新创建了一个页面。然而,试了几次我给了,例如。将app.data.spreadsheet.sheet1.each do |f|修改为rows_by_categories.each do |f|失败。有任何线索吗?

1 个答案:

答案 0 :(得分:0)

如前所述,我没有middleman的经验,但是无论如何我都会尝试并提供帮助。

看来,您的主要问题是要循环播放单个项目而不是分组。请尝试以下方法。

rows_by_categories = app.data.spreadsheet.sheet1.group_by { |row| row.category }

#Category Landings
rows_by_categories.each do |category, rows|
    path_name = "/#{category.to_s.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')}.html" 
    row_data = rows.map do |row| 
        {
          categorytitle: row.category,
          name: row.name,
          price: row.selling_price,
        }
    end
    proxy path_name, "/product_category.html", locals: {
        products: row_data,
        categories: rows_by_categories.keys
     }, ignore: true
end

在这里,我们遍历类别,products现在将是该类别中所有产品的Array,而不是单个产品。以我的有限知识,这将为每个类别创建一个页面,并为您提供一个集合products,您可以循环浏览