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

Avoid building identical pages with Middleman proxy

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

我的 table 有这些列:

 _________________________________
| Product Name | Price | Category |
| Pet Food     |    | Pets     |
| iPhone       |  0 | Phone    |
| Pet toy      |    | Pets     |
|______________|_______|__________|

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

问题是按照我的处理方式,Middleman 为类别中的每个产品构建一个类别页面,然后跳过它,因为它是相同的:

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|不成功。有什么线索吗?

如前所述,我没有使用 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,您可以循环浏览