【问题标题】:Avoid building identical pages with Middleman proxy避免使用中间人代理构建相同的页面
【发布时间】:2019-02-01 17:37:40
【问题描述】:

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

我的表有这些列:

 _________________________________
| Product Name | Price | Category |
| Pet Food     |   $12 | Pets     |
| iPhone       |  $500 | Phone    |
| Pet toy      |   $25 | 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 或者我会尝试通过代码而不是轶事 cmets 提供帮助
  • 这确实是我想要实现的目标。试图用一个简单的数组、一个按类别对数组分组的哈希,然后是一个循环来进行概念验证。它有效,但我无法将相同的逻辑应用于中间人。

标签: ruby middleman middleman-4


【解决方案1】:

如前所述,我没有使用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,您可以循环访问该集合

【讨论】:

  • 有效!除了rows_by_categories 上的一个小错字。非常感谢!
猜你喜欢
  • 2013-10-08
  • 2023-01-20
  • 1970-01-01
  • 1970-01-01
  • 2019-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多