0

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

我的表有这些列:

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

我使用Pets名为. 它为每个独特的类别创建一个页面,例如。和。Phoneproduct_category.htmlpets.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|不成功。有什么线索吗?

4

1 回答 1

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可以循环浏览的集合

于 2019-02-04T14:33:04.440 回答